A2A协议基础
文章目录
- A2A agent 与agent之间的沟通规范
- A2A协议使用场景
- 简化只问天气场景的场景
- 某些 agent 以 HTTP server 的形式对外提供能力。
- A2A 协议如何规定agent的注册过程
-
- Agent Card 可以理解为智能体的“说明书 / 名片 / 服务发现文件”
-
- name Agent 的人类可读名称
- description 是 required,用于帮助用户和其他 agent 理解它的用途
- version Agent 自己的版本号,不是协议版本
- supportedInterfaces 表示 这个 agent 可以通过哪些接口/协议被调用。
- provider表示 agent 的服务提供方
- documentationUrl 文档地址
- iconUrl Agent 图标地址
- capabilities 表示这个 agent 支持哪些能力
- defaultInputModes 和 defaultOutputModes 默认输入输出格式
- skills 表示这个 agent 的具体能力列表
- signatures 用于给 Agent Card 做签名,例如 JWS 签名
- securitySchemes 和 securityRequirements用于描述认证方式
- A2A 最新规范里,Agent Card 可以通过 well-known 地址发现
- 主agent调用其它agent
- 总结
A2A agent 与agent之间的沟通规范
什么是agent?
agent就是能自主思考(llm),并调用工具来解决用户问题的的智能程序。比如cline就是一个agent.让cline做一个ai的网页,他首先会通过llm思考方案的大致步骤,然后调用工具来完成任务
A2A协议使用场景
需要从西雅图,飞往纽约,需要从3天里面选择一天,且这一天天气要好


调度agent做整体的规划和调度,把任务下发给其它更专业的agent


A2A 协议作用在2个agent之间,mcp协议作用在agent内部

简化只问天气场景的场景
既然只有一个agent,就不需要调度agent了,可用直接问天气agent,为什么还要通过调度agent?
只是为什么方便演示A2A协议

某些 agent 以 HTTP server 的形式对外提供能力。


A2A 协议如何规定agent的注册过程



Agent Card 可以理解为智能体的“说明书 / 名片 / 服务发现文件”


{
"name": "Code Prepare Agent",
"description": "An agent that prepares code context and streams preparation task status.",
"version": "1.0.0",
"supportedInterfaces": [
{
"url": "https://example.com/a2a/v1",
"protocolBinding": "HTTP+JSON",
"protocolVersion": "1.0"
}
],
"provider": {
"organization": "Your Organization",
"url": "https://example.com"
},
"documentationUrl": "https://example.com/docs/code-prepare-agent",
"iconUrl": "https://example.com/icon.png",
"capabilities": {
"streaming": true,
"pushNotifications": false,
"extendedAgentCard": false
},
"defaultInputModes": [
"application/json"
],
"defaultOutputModes": [
"application/json",
"text/event-stream"
],
"skills": [
{
"id": "prepare_code_context",
"name": "Prepare code context",
"description": "Submit a code preparation task and stream its task status.",
"tags": [
"code",
"prepare",
"task-status",
"sse"
],
"examples": [
"Prepare code context for version V27A and stream the progress."
],
"inputModes": [
"application/json"
],
"outputModes": [
"application/json",
"text/event-stream"
]
}
]
}
name Agent 的人类可读名称

description 是 required,用于帮助用户和其他 agent 理解它的用途

version Agent 自己的版本号,不是协议版本

supportedInterfaces 表示 这个 agent 可以通过哪些接口/协议被调用。


provider表示 agent 的服务提供方

documentationUrl 文档地址

iconUrl Agent 图标地址

capabilities 表示这个 agent 支持哪些能力

defaultInputModes 和 defaultOutputModes 默认输入输出格式

skills 表示这个 agent 的具体能力列表
skill 指的是这个 Agent “对外公开宣称的、可以独立完成的某项业务功能/原子任务”。


"skills": [
{
"id": "prepare_code_context", // 【外包订单号】:主 Agent 发起请求时,JSON-RPC 里要指定的 method
"name": "Prepare code context", // 读起来人性化的名字
"description": "Submit a code preparation task...", // 【业务广告】:给其他 Agent 的 LLM 评估“你能帮我干这活不”
"tags": ["code", "prepare", "sse"], // 【索引标签】:方便其他 Agent 在上百个外部路由里快速过滤过滤
"examples": [ ... ] // 【话术样例】:教对方 Agent 怎么用自然语言或者结构化意图来触发我
}
]
一个 skill = agent 对外承诺的一类能力
skills 不是接口列表,而是 agent 对外声明的“我能完成哪些任务”的能力列表。


signatures 用于给 Agent Card 做签名,例如 JWS 签名

securitySchemes 和 securityRequirements用于描述认证方式


A2A 最新规范里,Agent Card 可以通过 well-known 地址发现
客户端不用事先知道 Agent Card 放在哪个接口,只要知道这个 agent 服务的域名,就可以按一个约定好的固定路径去取它的“名片”
well-known 地址发现就是:协议规定一个固定路径,客户端直接访问这个路径获取 Agent Card,而不需要提前约定这个 JSON 文件具体放在哪里



主agent调用其它agent

请求 遵循json-rpc格式
json-rpc:用json作为传输格式,调用远程函数的方法
message 必填,真正发给对方 agent 的消息
configuration 可选,控制这次调用怎么返回
metadata 可选,调用方自定义上下文
message“主 agent 发给子 agent 的消息”

messageId 必填。消息唯一 ID。
role 必填。表示消息是谁发的

parts 必填。消息正文


text

data 结构化json数据

url 文件或资源 URL

raw原始二进制内容。JSON 序列化时通常是 base64。

mediaType内容类型,类似 HTTP 里的 MIME type

contextId 可选。表示这条消息属于哪个上下文 / 会话。


taskId 可选。表示这条消息关联哪个任务

回答
kind:task也能看出来,A2A里面的一个概念,代表一个任务,当被调用的agent接收到一个请求之后,一般就会生成一个task,并且在返回结果的时候填充task的各种信息

A2A 规定:message:send 的返回只能是 Task 或 Message;message:stream 的 SSE 流里每个事件是一个 StreamResponse,里面可能包含 task、message、statusUpdate 或 artifactUpdate



















总结


AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)