# 常见问题 ## 如何获取底层 agent 实例? 由于 agents 可能分布在多台机器上,因此我们有意避免直接访问底层 agent 实例。如果确认 agent 运行在同一台机器上,可以通过调用 `AgentRuntime` 上的 {py:meth}`autogen_core.AgentRuntime.try_get_underlying_agent_instance` 方法来访问 agent 实例。如果 agent 不可用,该方法会抛出异常。 ## 如何调用 agent 上的函数? 由于无法直接访问实例本身,因此不能直接在 agent 上调用函数。替代方案是:创建一个类型来表示函数调用及其参数,然后将该消息发送给 agent。在 agent 端,需要为该消息类型创建处理程序并实现所需逻辑。这种方式也支持向调用方返回响应。 这种设计使得您的 agent 既能工作在分布式环境,也能在本地环境中运行。 ## 为什么需要使用工厂来注册 agent? {py:class}`autogen_core.AgentId` 由 `type` 和 `key` 组成。type 对应创建 agent 的工厂,key 则是该实例在运行时与数据相关的唯一标识。 key 可以对应用户 ID、会话 ID,如果不需要区分实例,也可以直接使用 "default"。每个唯一的 key 都会根据提供的工厂创建一个新的 agent 实例。这种设计使得系统能够自动扩展相同 agent 的不同实例,并根据您在应用程序中处理 key 的方式独立管理每个实例的生命周期。 ## 如何增加 GRPC 消息大小? 如果需要提供自定义 gRPC 选项(例如覆盖 `max_send_message_length` 和 `max_receive_message_length`),可以定义 `extra_grpc_config` 变量并将其传递给 `GrpcWorkerAgentRuntimeHost` 和 `GrpcWorkerAgentRuntime` 实例。 ```python # 定义自定义 gRPC 选项 extra_grpc_config = [ ("grpc.max_send_message_length", new_max_size), ("grpc.max_receive_message_length", new_max_size), ] # 使用自定义 gRPC 选项创建 GrpcWorkerAgentRuntimeHost 和 GrpcWorkerAgentRuntime 实例 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支持指定以下三种额外能力: - vision(视觉能力):模型能够处理并解析图像数据 - function_calling(函数调用):模型可接收函数描述(包括函数名称、用途、输入参数等),并能响应适当的函数调用请求(包含必要参数) - json_output(JSON输出):模型能够按照指定JSON格式输出响应 模型能力可以作为参数传入模型,这将覆盖默认定义。需注意这些能力设置不会改变底层模型的实际能力,但会允许或禁止与之相关的行为。这在[使用本地LLM](cookbook/local-llms-ollama-litellm.ipynb)时特别有用。 ```python 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, } ) ```