# multi-agent **Repository Path**: imbluenotbloo/multi-agent ## Basic Information - **Project Name**: multi-agent - **Description**: multi-agent项目学习,涉及到A2A、MCP等内容 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-30 - **Last Updated**: 2025-07-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Multi-Agent 项目主要目标是开发一个多智能体系统,支持多种智能体类型和任务。 ## 目录结构 ## A2A a2a_learn/server - 主要的服务端代码 a2a_learn/server/agent - 智能体的具体实现,包括不同类型的智能体和任务 a2a_learn/server/handler - 处理请求的逻辑 a2a_learn/server/main - 启动服务的入口 ### 主要运行的逻辑 1. 启动服务端: - 创建一个 `TestAgent` 实例 - 创建一个 `TestAgentHandler` 实例来处理请求 - 使用 `A2AStarletteApplication` 构建 A2A 服务器 - 使用 Uvicorn 启动服务器,监听请求 2. Agent定义 - 定义一个 `TestAgent` 类,包含一个技能 `hello_world` - 在技能中实现一个简单的消息发送方法 - 使用 `AgentCard` 来描述智能体的能力和技能 3. 处理请求 - 在 `TestAgentHandler` 中处理来自客户端的请求 - `TestAgentHandler` 继承自 `RequestHandler`(`from a2a.server.request_handlers.request_handler import RequestHandler`),只要实现了`RequestHandler`的所有接口,就可以处理请求 - `on_message_send`:响应`message/send`请求,发送单条消息到智能体 - `on_message_send_stream`:响应`message/stream`请求,流式发送消息到智能体 4. client消息发送 - 消息的发送主要依靠http请求来实现 - 客户端的主体是`A2AClient`,它提供了发送消息的接口 - 客户端连接到A2A服务器是通过调用`A2AClient.get_client_from_agent_card_url()`方法来获取客户端实例,该方法主要接收以下参数: - httpx_client:用于发送请求的http客户端 - base_url:A2A服务器的服务地址,格式为`http://:` - agent_card_path:A2A服务器里提供服务的Agent的agent_card地址。启动A2A服务后,可以通过`http://:/.well-known/agent.json`获取到Agent的agent_card,所以如果没有特殊配置,此项可以不用填写,默认值既为`/.well-known/agent.json` - 发送消息的主要方法是`A2AClient.send_message()`,它会将消息发送到指定的智能体,并返回响应,请求体一般如下: ```python from a2a.types import (MessageSendParams,SendMessageRequest) send_message_payload: dict[str, Any] = { 'message': { 'role': 'user', 'parts': [{'type': 'text', 'text': 'how much is 10 USD in INR?'}], 'messageId': uuid4().hex, }, } request = SendMessageRequest( id=uuid4().hex, params=MessageSendParams(**send_message_payload) ) ```