# Gateway API 参考 ## HTTP API ### Agent 生命周期 #### `POST /gateway/register` 注册 Agent 到 Gateway,并提供 Webhook 地址用于接收消息。 **请求体**: ```json { "agent_id": "my-agent-001", "agent_name": "My Agent", "agent_type": "analyst", "capabilities": ["search", "analyze"], "description": "我的分析 Agent", "webhook_url": "http://my-agent.local:8080/webhook/a2a-messages" } ``` **响应**: ```json { "status": "registered", "agent_id": "my-agent-001" } ``` **实现**:`gateway/core/router.py:GatewayRouter.register_agent` --- #### `POST /gateway/heartbeat` 更新 Agent 心跳,保持在线状态。每 30 秒调用一次。 **请求体**: ```json { "agent_id": "my-agent-001" } ``` **响应**: ```json { "status": "ok" } ``` **实现**:`gateway/core/router.py:GatewayRouter.heartbeat` --- #### `POST /gateway/unregister` 注销 Agent,标记为离线。 **请求体**: ```json { "agent_id": "my-agent-001" } ``` **响应**: ```json { "status": "unregistered" } ``` **实现**:`gateway/core/router.py:GatewayRouter.unregister_agent` --- ### Agent 查询 #### `GET /gateway/agents` 获取所有在线 Agent 列表。 **查询参数**: - `agent_type` (可选): 过滤 Agent 类型 - `online_only` (可选, 默认 true): 只返回在线 Agent **响应**: ```json { "agents": [ { "agent_id": "agent-001", "agent_name": "Research Agent", "agent_type": "analyst", "capabilities": ["search", "analyze"], "status": "online", "last_heartbeat": "2026-03-05T12:00:00Z" } ], "total": 1 } ``` **实现**:`gateway/core/router.py:GatewayRouter.list_agents` --- #### `GET /gateway/status/{agent_id}` 查询指定 Agent 的在线状态。 **响应**: ```json { "agent_id": "agent-001", "status": "online", "last_heartbeat": "2026-03-05T12:00:00Z" } ``` **实现**:`gateway/core/router.py:GatewayRouter.get_agent_status` --- ### 消息发送 #### `POST /gateway/send` 发送消息到目标 Agent。Gateway 通过目标 Agent 注册的 Webhook 地址推送。 **请求体**: ```json { "from_agent_id": "sender-001", "to_agent_id": "receiver-001", "conversation_id": "conv-abc-123", "content": [ {"type": "text", "text": "Hello"} ], "metadata": {} } ``` `conversation_id` 为空时自动生成。 **响应**: ```json { "message_id": "msg-xyz-789", "conversation_id": "conv-abc-123", "status": "sent" } ``` 若目标 Agent 不在线:返回 `404`。 若 Webhook 调用失败:返回 `502`,Gateway 会记录失败原因。 **实现**:`gateway/core/router.py:GatewayRouter.send_message` --- ### Gateway 状态 #### `GET /gateway/health` 获取 Gateway 运行状态。 **响应**: ```json { "status": "running", "version": "1.0.0", "uptime_seconds": 3600, "registered_agents": 5 } ``` --- ## Webhook 推送格式 当目标 Agent 收到消息时,Gateway 会向其注册的 `webhook_url` 发送 HTTP POST 请求。 **请求体**: ```json { "message_id": "msg-xyz-789", "conversation_id": "conv-abc-123", "from_agent_id": "sender-001", "content": [ {"type": "text", "text": "Hello"} ], "metadata": {}, "timestamp": "2026-03-05T12:00:00Z" } ``` **期望响应**:HTTP 200,内容任意。 **Agent 端 Webhook 实现**: ```python # api_server.py @app.post("/webhook/a2a-messages") async def receive_a2a_message(message: dict): message_queue.push(message) return {"status": "received"} ``` **实现**:`agent/tools/builtin/a2a_im.py:A2AMessageQueue`(待实现) --- ## Agent Card 格式 Agent Card 用于描述 Agent 的身份和能力,在注册时提供。 ```json { "agent_id": "agent-001", "agent_name": "Research Agent", "agent_type": "analyst", "capabilities": ["search", "analyze", "summarize"], "description": "专注于信息检索和分析的 Agent", "webhook_url": "http://agent.local:8080/webhook/a2a-messages", "metadata": { "version": "1.0.0", "owner": "team-a" } } ``` **实现**:`gateway/core/registry.py:AgentConnection` --- ## 错误码 | HTTP 状态码 | 说明 | |------------|------| | `404` | 目标 Agent 不在线或不存在 | | `400` | 请求格式错误 | | `502` | Webhook 推送失败(目标 Agent 的 webhook 返回非 200) | | `401` | 未授权访问(Enterprise 层) | | `429` | 超过速率限制(Enterprise 层) | --- ## 配置参数 ```python # gateway_server.py gateway = GatewayRouter( host="0.0.0.0", port=8001, heartbeat_timeout=60, # 心跳超时(秒),超过则标记离线 webhook_timeout=10, # Webhook 推送超时(秒) ) ``` --- ## 扩展点 ### Enterprise 集成 Gateway 提供扩展点用于集成 Enterprise 层功能: - **认证**:`gateway/enterprise/auth.py`(规划中) - **审计**:`gateway/enterprise/audit.py`(规划中) - **速率限制**:`gateway/enterprise/rate_limit.py`(规划中) 详见 [架构文档](./architecture.md#扩展点)。