Skip to content

5. 启动服务器

现在我们有了 Agent Card 和智能体执行器,我们可以设置并启动 A2A 服务器。

A2A Python SDK 提供了一个 A2AStarletteApplication 类,简化了运行符合 A2A 标准的 HTTP 服务器。它使用 Starlette 作为 Web 框架,通常与 Uvicorn 等 ASGI 服务器一起运行。

Helloworld 中的服务器设置

让我们再次查看 __main__.py,看看服务器是如何初始化和启动的。


让我们分解一下:

  1. DefaultRequestHandler

    • SDK 提供了 DefaultRequestHandler。这个处理程序接收您的 AgentExecutor 实现(这里是 HelloWorldAgentExecutor)和 TaskStore(这里是 InMemoryTaskStore)。
    • 它将传入的 A2A RPC 调用路由到您的执行器的适当方法(如 executecancel)。
    • TaskStoreDefaultRequestHandler 使用来管理任务的生命周期,特别是对于有状态的交互、流式传输和重新订阅。即使您的智能体执行器很简单,处理程序也需要任务存储。
  2. A2AStarletteApplication

    • A2AStarletteApplication 类使用 agent_cardrequest_handler(在其构造函数中称为 http_handler)进行实例化。
    • agent_card 至关重要,因为服务器将在 /.well-known/agent-card.json 端点(默认情况下)暴露它。
    • request_handler 负责通过与您的 AgentExecutor 交互来处理所有传入的 A2A 方法调用。
  3. uvicorn.run(server_app_builder.build(), ...)

    • A2AStarletteApplication 有一个 build() 方法,用于构建实际的 Starlette 应用程序。
    • 然后使用 uvicorn.run() 运行此应用程序,使您的智能体可通过 HTTP 访问。
    • host='0.0.0.0' 使服务器在您机器上的所有网络接口上可访问。
    • port=9999 指定监听端口。这与 AgentCard 中的 url 匹配。

运行 Helloworld 服务器

在终端中导航到 a2a-samples 目录(如果还没有在那里),并确保您的虚拟环境已激活。

运行 Helloworld 服务器:

# 从 a2a-samples 目录
python samples/python/agents/helloworld/__main__.py

您应该看到类似这样的输出,表明服务器正在运行:

INFO:     Started server process [xxxxx]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:9999 (Press CTRL+C to quit)

您的 A2A Helloworld 智能体现在已上线并准备接收请求!在下一步中,我们将与它交互。