Agent Gateway (A2A 协议) - 概述
在 LiteLLM AI 网关上添加 A2A 代理,通过 A2A 协议调用代理,并在 LiteLLM 日志中跟踪请求/响应记录。管理哪些团队或密钥可以访问已接入的代理。
| 功能 | 支持 |
|---|---|
| 支持的代理提供商 | A2A, Vertex AI Agent Engine, LangGraph, Azure AI Foundry, Bedrock AgentCore, Pydantic AI |
| 日志记录 | ✅ |
| 负载均衡 | ✅ |
| 流式传输 | ✅ |
| 迭代预算 | ✅ |
LiteLLM 遵循 A2A (代理对代理) 协议 来调用代理。
添加您的代理
添加 A2A 代理
您可以通过 LiteLLM 管理界面 (Admin UI) 添加兼容 A2A 的代理。
- 导航至 Agents (代理) 选项卡
- 点击 Add Agent (添加代理)
- 输入代理名称(例如
ij-local)和您的 A2A 代理 URL
该 URL 应为您的 A2A 代理的调用 URL(例如 https://:10001)。
添加 Azure AI Foundry 代理
请遵循此指南,将您的 Azure AI Foundry 代理添加到 LiteLLM 代理网关
添加 Vertex AI Agent Engine
请遵循此指南,将您的 Vertex AI Agent Engine 添加到 LiteLLM 代理网关
添加 Bedrock AgentCore 代理
请遵循此指南,将您的 Bedrock AgentCore 代理添加到 LiteLLM 代理网关
添加 LangGraph 代理
请遵循此指南,将您的 LangGraph 代理添加到 LiteLLM 代理网关
添加 Pydantic AI 代理
请遵循此指南,将您的 Pydantic AI 代理添加到 LiteLLM 代理网关
调用您的代理
请参阅调用 A2A 代理指南,了解如何使用以下方式调用您的代理:
- A2A SDK - 原生 A2A 协议,完全支持任务和工件 (artifacts)
- OpenAI SDK - 熟悉的
/chat/completions接口,带有a2a/模型前缀
跟踪代理日志
调用代理后,您可以在 LiteLLM 的 Logs (日志) 选项卡中查看请求记录。
日志显示内容:
- 请求/响应内容:发送至代理及从代理接收的内容
- 用户、密钥、团队信息:用于跟踪是谁发出的请求
- 延迟和成本指标
转发 LiteLLM 上下文标头
当 LiteLLM 调用您的 A2A 代理时,它会发送特殊的标头,从而实现:
- 追踪分组 (Trace Grouping):来自同一代理执行的所有 LLM 调用将显示在同一个追踪中
- 代理支出跟踪 (Agent Spend Tracking):成本被归因于特定代理
| 头 | 目的 |
|---|---|
X-LiteLLM-Trace-Id | 将所有 LLM 调用链接到同一执行流 |
X-LiteLLM-Agent-Id | 将支出归因于正确的代理 |
要启用这些功能,您的 A2A 服务器必须转发这些标头到它返回给 LiteLLM 的任何 LLM 调用中。
实施步骤
第 1 步:从传入的 A2A 请求中提取标头
"""Extract X-LiteLLM-* headers from incoming A2A request."""
all_headers = request.call_context.state.get('headers', {})
return {
k: v for k, v in all_headers.items()
if k.lower().startswith('x-litellm-')
}
第 2 步:将标头转发到您的 LLM 调用 在调回 LiteLLM 时传入提取的标头
- OpenAI SDK
- LangChain
- LiteLLM SDK
- HTTP (requests/httpx)
headers = get_litellm_headers(request)
client = OpenAI(
api_key="sk-your-litellm-key",
base_url="https://:4000",
default_headers=headers, # Forward headers
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello"}]
)
from langchain_openai import ChatOpenAI
headers = get_litellm_headers(request)
llm = ChatOpenAI(
model="gpt-4o",
openai_api_key="sk-your-litellm-key",
base_url="https://:4000",
default_headers=headers, # Forward headers
)
import litellm
headers = get_litellm_headers(request)
response = litellm.completion(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello"}],
api_base="https://:4000",
extra_headers=headers, # Forward headers
)
import httpx
headers = get_litellm_headers(request)
headers["Authorization"] = "Bearer sk-your-litellm-key"
response = httpx.post(
"https://:4000/v1/chat/completions",
headers=headers,
json={"model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}]}
)
结果
启用标头转发后,您将看到:
Langfuse 中的追踪分组
代理支出归因
API Reference
Endpoint
POST /a2a/{agent_name}/message/send
身份验证
在 Authorization 标头中包含您的 LiteLLM 虚拟密钥
Authorization: Bearer sk-your-litellm-key
请求格式
LiteLLM 遵循 A2A JSON-RPC 2.0 规范
{
"jsonrpc": "2.0",
"id": "unique-request-id",
"method": "message/send",
"params": {
"message": {
"role": "user",
"parts": [{"kind": "text", "text": "Your message here"}],
"messageId": "unique-message-id"
}
}
}
响应格式
{
"jsonrpc": "2.0",
"id": "unique-request-id",
"result": {
"kind": "task",
"id": "task-id",
"contextId": "context-id",
"status": {"state": "completed", "timestamp": "2025-01-01T00:00:00Z"},
"artifacts": [
{
"artifactId": "artifact-id",
"name": "response",
"parts": [{"kind": "text", "text": "Agent response here"}]
}
]
}
}
代理注册表
想要创建一个中央注册表,以便您的团队可以发现公司内部有哪些代理可用吗?
使用 AI Hub 使代理公开并在整个组织内可被发现。这使开发人员无需重新构建即可浏览可用代理。