常见问题#

如何获取底层代理实例?#

代理可能分布在多台机器上,因此有意不鼓励访问底层代理实例。如果代理确定在同一台机器上运行,您可以通过调用 autogen_core.AgentRuntime.try_get_underlying_agent_instance()AgentRuntime 上访问代理实例。如果代理不可用,这将抛出异常。

如何调用代理上的函数?#

由于实例本身不可访问,您不能直接在代理上调用函数。相反,您应该创建一个类型来表示函数调用及其参数,然后将该消息发送给代理。然后在代理中,为该消息类型创建一个处理程序并实现所需的逻辑。这也支持向调用者返回响应。

这允许您的代理在分布式环境和本地环境中工作。

为什么我需要使用工厂来注册代理?#

一个 autogen_core.AgentId 由一个 type 和一个 key 组成。类型对应于创建代理的工厂,而键是此实例的运行时、数据相关的键。

如果不需要区分实例,键可以对应于用户 ID、会话 ID,或者只是“default”。每个唯一的键都将根据提供的工厂创建一个新的代理实例。这允许系统自动扩展到同一代理的不同实例,并根据您在应用程序中选择处理键的方式独立管理每个实例的生命周期。

如何增加 GRPC 消息大小?#

如果您需要提供自定义 gRPC 选项,例如覆盖 max_send_message_lengthmax_receive_message_length,您可以定义一个 extra_grpc_config 变量并将其传递给 GrpcWorkerAgentRuntimeHostGrpcWorkerAgentRuntime 实例。

# Define custom gRPC options
extra_grpc_config = [
    ("grpc.max_send_message_length", new_max_size),
    ("grpc.max_receive_message_length", new_max_size),
]

# Create instances of GrpcWorkerAgentRuntimeHost and GrpcWorkerAgentRuntime with the custom gRPC options

host = GrpcWorkerAgentRuntimeHost(address=host_address, extra_grpc_config=extra_grpc_config)
worker1 = GrpcWorkerAgentRuntime(host_address=host_address, extra_grpc_config=extra_grpc_config)

注意:当 GrpcWorkerAgentRuntime 为客户端创建主机连接时,它使用 HostConnection 类中的 DEFAULT_GRPC_CONFIG 作为默认值集,如果您使用 extra_grpc_config 传递同名参数,这些值可以被覆盖。

什么是模型能力以及如何指定它们?#

模型能力是 LLM 除了标准自然语言功能之外可能拥有的额外能力。目前 Autogen 中可以指定 3 种额外能力

  • 视觉:模型能够处理和解释图像数据。

  • 函数调用:模型能够接受函数描述,例如函数名称、目的、输入参数等;并能响应要调用的适当函数,包括任何必要的参数。

  • json_输出:模型能够输出符合指定 json 格式的响应。

模型能力可以传递给模型,这将覆盖默认定义。这些能力不会影响底层模型实际能够做什么,但会允许或禁止与之相关的行为。这在使用本地 LLM 时特别有用。

from autogen_ext.models.openai import OpenAIChatCompletionClient

client = OpenAIChatCompletionClient(
    model="gpt-4o",
    api_key="YourApiKey",
    model_capabilities={
        "vision": True,
        "function_calling": False,
        "json_output": False,
    }
)