Agent Card 与发现
Agent Card 是 A2A 的发现入口。别的 agent 拿到这张卡,就知道草料是谁、能做什么、往哪调、返回什么格式——不需要额外的对接文档。
三个发现地址
| 地址 | 用途 |
|---|---|
https://a2a.objqr.com/.well-known/agent-card.json | 服务本身的标准发现地址 |
https://qr61.cn/.well-known/agent-card.json | 码域名上的同一张卡 |
https://qr71.cn/.well-known/agent-card.json | 码域名上的同一张卡 |
三个地址返回的是同一张卡。
放在码域名上是有意的:agent 扫到一张草料码,得到的是 https://qr71.cn/... 这样的链接,此时它可以直接从这个域名的 .well-known 路径发现草料的 A2A 服务,不需要事先知道 a2a.objqr.com 的存在。
提示:如果你的客户端还在用 A2A 0.2.x,探测的是旧路径
/.well-known/agent.json。这个路径也保留着,返回同一张卡。
卡上有什么
{
"protocolVersion": "0.3.0",
"name": "草料二维码实体查询 Agent",
"description": "...",
"url": "https://a2a.objqr.com/a2a/jsonrpc",
"preferredTransport": "JSONRPC",
"version": "0.1.0",
"documentationUrl": "https://a2a.objqr.com/ext/caoliao-entity/v2",
"iconUrl": "https://static.clewm.net/cli/images/cli_logo_new.png",
"provider": {
"organization": "草料二维码 (cli.im)",
"url": "https://cli.im"
},
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false,
"extensions": [ "..." ]
},
"defaultInputModes": ["text/plain", "application/json"],
"defaultOutputModes": ["application/json", "text/plain"],
"skills": [ "..." ]
}| 字段 | 说明 |
|---|---|
protocolVersion | 目标 A2A 协议版本,当前为 0.3.0 |
description | 本 agent 的能力描述,中英双语,供调用方 agent 判断是否选用 |
url | 客户端发起 JSON-RPC 请求的单一端点 |
preferredTransport | 传输方式,JSONRPC |
version | 本 agent 自身的版本,与协议版本无关 |
documentationUrl | 指向只读契约扩展的规范文档 |
capabilities | 支持哪些协议能力,以及声明了哪些扩展 |
defaultInputModes | 接受的输入类型,纯文本或 JSON |
defaultOutputModes | 返回的输出类型,JSON 或纯文本 |
skills | 3 个只读 skill,详见 Skill 列表 |
卡上没有 security 和 securitySchemes,这是刻意的:本服务不需要鉴权,按 A2A 规范省略这两个字段即表示无鉴权要求。
三个 capabilities 布尔值都是 false,含义分别是:不支持流式返回、不支持推送通知、不保留状态变更历史。
每个 skill 的输入输出模态与顶层 defaultInputModes / defaultOutputModes 相同,按规范省略不重复声明。
只读契约扩展
卡上声明了一个扩展,用来把「返回什么结构、守什么边界」讲清楚:
{
"uri": "https://a2a.objqr.com/ext/caoliao-entity/v2",
"required": false,
"params": {
"profile": "read-only",
"schemaUrl": "https://a2a.objqr.com/ext/caoliao-entity/v2/schema.json",
"appliesTo": ["get_entity", "get_records", "list_actions"],
"invocation": "explicit-datapart-only",
"rules": {
"readOnly": true,
"publicOnly": true,
"singleOrgView": true,
"actionsExecutable": false
}
}
}A2A 目前没有 per-skill 的输出 schema 字段,所以草料用官方的扩展机制补上这块。扩展提供两样东西:
- 规范文档(人读):
https://a2a.objqr.com/ext/caoliao-entity/v2 - JSON Schema(机读):
https://a2a.objqr.com/ext/caoliao-entity/v2/schema.json
Schema 由后端的类型定义直接生成,和实际返回同源,不会出现文档与实现不一致的情况。
required 为 false,意思是不认识这个扩展的客户端可以直接忽略它,正常调用不受影响。
关于 GB/Z 185—2026
卡上还有第二个扩展声明:
{
"uri": "urn:gb-z-185:aip",
"required": false,
"params": {
"standard": "GB/Z 185(所有部分)—2026",
"alignment": "field-level",
"descriptionUrl": "https://a2a.objqr.com/.well-known/aip-agent.json"
}
}草料同时提供了一份符合 GB/Z 185—2026《人工智能 智能体互联》的描述文件,放在 /.well-known/aip-agent.json。
这是一条指针,不是格式转换:A2A 卡本身的结构完全按 A2A 规范来,一个字段都没有为国标改动;需要国标描述的一方到 descriptionUrl 单独取。同样是 required: false,不识别的客户端忽略即可。
下一步
- Skill 列表 —— 三个 skill 分别怎么用
- Task 与返回结构 —— 调用后拿到什么