资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

A2A接口文档

1 协议标准

本协议遵循 Google 发布的 A2A协议0.2.6版本规范。客户端请基于本版本规范进行集成。

2 接入流程

2.1 应用发布A2A渠道

将您搭建的应用发布成A2A服务,将基于A2A协议封装您的应用,发布后支持外部使用方通过SSE URL调用,可以在其他平台或使用A2A Client对接A2A服务的应用。

1.png

点击【复制】按钮复制应用发布后的AgentCard URL,请求时获取个人的API Key填到URL中,能够获取到A2A的AgentCard。AgentCard作为A2A服务的“数字名片”,对于发现和发起交互Agent至关重要。

2.2 获取AgentCard配置信息

访问AgentCard URL拿到我们发布成A2A的应用的Agent描述、Agent能力信息、服务端点和身份验证信息。A2A Client解析信息以确定该Agent是否适合给定的任务、如何构建其请求以及如何进行安全通信。AgentCard及示例参考: "3.1 AgentCard" 小节。

2.3 调用Agent

image.png

用户可以使用满足A2A协议的第三方Agent平台对接发布后的A2A应用,亦或是使用A2A Client与A2A Server进行对话。A2A请求调用和返回结构参数及示例参考"3.2 Agent调用"小节。

3 接口说明

3.1 AgentCard

接口定义

Path /v2/a2a/${appId}/.well-known/agent.json
Method GET
Authorization 请求签名(Bearer <AppBuilder API Key>)

请求结构

GET /v2/a2a/${appId}/.well-known/agent.json HTTP/1.1
HOST: qianfan.baidubce.com
Authorization: authorization string

请求头域

除公共头域外,无其它特殊头域。

响应参数

字段 类型 必然存在 说明
name string 是 Agent 名称。
description string 是 Agent 描述。
url string 是 Agent 服务访问地址。
version string 是 Agent 版本号。
protocolVersion string 是 支持的 A2A 协议版本。
capabilities AgentCapabilities 是 Agent支持的可选功能声明。(例如,流式传输)
securitySchemes map<string, SecurityScheme> 是 Agent 身份验证要求。
security map<string, list[string]> 是 Agent 进行通信的安全要求,标记请求中必须存在的身份验证要求。
skills list[AgentSkill] 是 Agent 技能列表。
provider AgentProvider 是 Agent 提供商信息。
defaultInputModes list[string] 是 Agent 默认支持的输入媒体类型。
defaultOutputModes list[string] 是 Agent 默认支持的输出媒体类型。

AgentCarpabilities

字段 类型 必然存在 说明
streaming boolean 是 是否支持 SSE 流式传输。(多智能体协同Agent发布的A2A应用只支持流式传输)

SecurityScheme

字段 类型 必然存在 说明
type string 是 安全方案类型,这里固定是"apiKey"。
name string 是 要使用鉴权的参数名称。
in string 是 apiKey放置的位置,有效值为"query", "header"或"cookie"。
description string 是 安全方案的描述信息。

AgentSkill

字段 类型 必然存在 说明
id string 是 Agent 技能的唯一标识符。
name string 是 技能名称。
description string 是 技能描述。
tags list[string] 是 技能的关键描述标签。
examples list[string] 否 技能使用示例。
inputModes list[string] 否 接收的媒体类型,设置时会覆盖defaultInputModes。
outputModes list[string] 否 输出的媒体类型,设置时会覆盖defaultOutputModes。

AgentProvider

字段 类型 必然存在 说明
origanization string 是 Agent 提供商组织。
url string 是 Agent 提供商组织链接。

请求curl示例

curl --location 'https://appbuilder.baidu.com/v2/a2a/${appId}/.well-known/agent.json' \
--header 'X-Appbuilder-Authorization: Bearer <AppBuilder API Key>'

正确响应示例

{
  "version": "1.0.0",
  "description": "1",
  "skills": [
    {
      "name": "网页探索Agent",
      "description": " 具备问题分析、信息检索、操作浏览器和获取网页内容的能力。可模拟人类自主操作网页,完成自动点击、输入、选择等操作,更好支持内容检索与获取,帮助轻松完成网页浏览、信息查询、内容筛选等任务。",
      "id": "9f301aed00c1402d8f2cc8faa6a8c91e",
      "tags": []
    },
    {
      "name": "代码编写Agent",
      "description": " 具备问题分析、生成和运行代码的能力。支持生成并运行Python代码来解决用户数据处理和分析、数据可视化、数学计算等方面的需求。支持文件格式包含:xlsx、csv、jsonl、json、docx和pdf。",
      "id": "0e31d072c92347728ae9e2ef204c0ac0",
      "tags": []
    },
    {
      "name": "报告撰写Agent",
      "description": " 具备专业化、结构化报告输出能力。可基于用户需求或各类输入信息完成报告的框架搭建、内容组织、逻辑梳理与格式化呈现。支持内容输出为HTML及Markdown的文件格式。",
      "id": "c46edaee42f44c31afa94c75a56727c1",
      "tags": []
    }
  ],
  "protocolVersion": "0.2.6",
  "url": "http://demo.com",
  "provider": {
    "organization": "baiduqianfan",
    "url": "https://console.bce.baidu.com/ai_apaas/appCenter"
  },
  "capabilities": {
    "streaming": true
  },
  "securitySchemes": {
    "apiKeyAuth": {
      "description": "API Key认证鉴权",
      "in": "header",
      "name": "Authorization",
      "type": "apiKey"
    }
  },
  "security": [
    {
      "apiKeyAuth": []
    }
  ],
  "defaultInputModes": [
    "text/plain"
  ],
  "defaultOutputModes": [
    "text/plain"
  ],
  "name": "我的Agent应用"
}

错误响应示例

{
    "code": "NotFoundResource",
    "message": "A2AServerNotPublishedYet",
    "request_id": "uuid"
}

3.2 Agent调用

从AgentCard的url中获取Agent域名,再将AppBuilder API Key放置到AgentCard中定义的SecuritySchema验证要求中请求调用Agent。

接口定义

Path /v2/${appId}
Method POST
Content-Type application/json
Authorization 请求签名(Bearer <AppBuilder API Key>)

请求结构

POST /a2a/${appId} HTTP/1.1
HOST: qianfan.baidubce.com
Authorization: authorization string
Content-Type: application/json

{
  "id": "uuid",
  "jsonrpc": "2.0",
  "method": "message/stream",
  "params": {
    "message": {
      "kind": "message",
      "parts": [
        {
          "kind": "text",
          "text": "今天天气",
          "metadata": {}
        }
      ],
      "role": "user"
    }
  }
}

请求头域

除公共头域外,无其它特殊头域。

请求参数

参数名 类型 是否必填 说明
jsonrpc string 是 指定JSON-RPC协议版本的字符串,固定为"2.0"。
id string 是 消息id。
method string 是 AgentCard支持SSE流式请求,请填写:"mesage/steam"。
params MessageSendParams 是 请求参数。

MessageSendParams

字段 类型 是否必填 说明
message Message 是 发送的消息内容。

Message

字段 类型 是否必填 说明
role string 是 发送消息对象。填写"user"表示当前消息是用户发送的。
parts list[Part] 是 消息内容,每项为TextPart/FilePart/DataPart之一结构。
messageId string 否 消息发送方生成的消息标识。
taskId string 否 指定关联的任务ID,用于继续任务流程执行。
contextId string 否 与消息关联的上下文标识。
kind string 是 结构类型,这里固定为:"message"。
metadata MessageMetadata 否 与消息关联的元数据,用于支持扩展AppBuilder对话API参数。

Part

Part包含TextPart、DataPart和FilePart三种接结构,通过kind取值进行区分。

(1) TextPart

字段 类型 是否必填 说明
kind string 是 标识此内容类型,TextPart固定为"text"。
text string 是 文本消息内容。

(2) DataPart

字段 类型 是否必填 说明
kind string 是 标识此内容类型,DataPart固定为"data"。
data dict 是 结构化数据。

(3) FilePart

字段 类型 是否必填 说明
kind string 是 标识此内容类型,TextPart固定为"text"。
file File 是 文件内容,支持标识为URI或base64编码字节。

File

字段 类型 是否必填 说明
name string 否 文件名称。
mime string 否 文件媒体类型。
bytes string 否 文件base64编码字节,与uri二选一提供。
uri string 否 文件uri,与bytes二选一提供。

MessageMetadata

用于支持扩展AppBuilder对话API参数。

字段 类型 是否必填 说明
end_user_id string 否 终端用户ID,由用户自行定义与维护,限制6 - 64字符。
file_ids list[string] 否 如果在AppBuilder中上传了文件,可以将文件id放入该字段,目前只处理第一个文件。

响应头域

除公共头域外,无其它特殊头域。

响应参数

字段 类型 必然存在 说明
jsonrpc string 是 指定JSON-RPC协议版本的字符串,固定为"2.0"。
id string 是 消息id。
result Task/TaskAritfactUpdateEvent/TaskStatusUpdateEvent 否 Agent 返回信息,请求处理成功时返回。
error JSONRPCError 否 请求处理失败时返回。

Task

字段 类型 必然存在 说明
id string 是 指定JSON-RPC协议版本的字符串,固定为"2.0"。
contextId string 是 消息id。
status TaskStatus 否 Agent 返回信息,请求处理成功时返回。
history list[Message] 否 历史对话消息。
aritfacts list[Artifact] 否 Agent任务生成的输出结构。
kind string 否 结构类型,这里固定为:"task"。

TaskStatus

字段 类型 必然存在 说明
state string 是 任务的当前状态:
submitted: 任务已提交。
working: 任务正在处理中。
input-required: 任务需要客户端提供额外输入。
completed: 任务已成功完成。
canceled: 任务已被取消。
failed: 任务执行失败。
rejected:任务因远程代理拒绝而终止。
TaskStatus.message可能包含错误详细信息。
auth-required:Agent需要客户端或用户进行额外身份验证才能继续。
unknown: 任务状态未知。
timestamp string 否 状态的更新时间戳。

Artifact

字段 类型 必然存在 说明
artifactId string 是 指定JSON-RPC协议版本的字符串,固定为"2.0"。
name string 是 输出的当前阶段名称。
parts list[Part] 是 输出的内容结构。
metadata ArtifactMetadata 是 与输出内容关联的元数据,用于支持传输AppBuilder对话API相关的输出信息。

ArtifactMetadata

该字段用于支持传输AppBuilder对话API相关的输出信息。

字段 类型 是否必然存在 说明
name string 否 消息名字,用于在同一个组件输出相同type的内容,但是作用不同时,使用该字段进行区分
raw_data object 否 由开发者请求透传,内部系统返回的信息。
usage object 否 大模型的token用量。
metrics object 否 耗时、性能、内存等trace及debug所需信息,服务于下游的Trace及监控需求。
type string 是 消息类型说明,包括text、code、files、urls、oral_text、references、image等。该字段的取值决定了下面的text字段的内容结构。
text object 是 消息具体内容。每种type对应本字段的结构是不同的。
visible_scope string 否 该消息的可见范围,包括user、llm、all,影响消息渲染效果 枚举值:
all :全部,包括大模型和用户。
llm:大模型。
user:用户。
默认为all。
event object 是 事件消息

更多内部数据接口参考千帆AppBuilder对话接口文档。

TaskArtifactUpdateEvent

字段 类型 必然存在 说明
taskId string 是 指定JSON-RPC协议版本的字符串,固定为"2.0"。
contextId string 是 消息id。
artifact Artifact 是 Agent 返回信息,请求处理成功时返回。
append boolean 否 如果为true标识该部分追加到相同artifactId的已返回的结果中。
lastChunk boolean 否 如果为true表示这条信息是这个artifact的最后更新。
kind string 是 结构类型,这里固定为:"artifact-update"。
metadata ArtifactUpdateMetadata 是 与本次事件关联的元数据,用于支持传输AppBuilder对话API相关的元数据。

ArtifactUpdateMetadata

字段 类型 是否必然存在 说明
conversation_id string 是 会话标识ID,用于推送。
end_user_id string 否 终端用户ID。
is_completion boolean 是 流式消息推送回答结果是否完结。
message_id string 是 消息id,即一轮对话的id。一轮对话在流式场景下会多次消息推送的message_id将保持一致。
role string 是 输出该消息的角色,包括tool、assisatnt、user。
status string 是 当前对话状态。
running
done
error
interrupt
trace_id string 是 调用标识ID,便于追踪。
user_id object 是 开发者id。

TaskStatusUpdateEvent

字段 类型 必然存在 说明
taskId string 是 正在更新状态的任务ID。
contextId string 是 关联任务的上下文ID。
status TaskStatus 是 新的任务状态。
final boolean 否 如果为true,表示是本次流更新的最终事件。服务器通常在这之后关闭SSE连接。
kind string 是 结构类型,这里固定为:"status-update"。

JSONRPCError

字段 类型 必然存在 说明
code int 是 错误代码。
message string 是 错误描述信息。

请求 curl 示例

curl --location 'http://appbuilder.baidu.com/a2a/${appId}' \
--header 'Authorization: Bearer <AppBuilder API Key>' \
--header 'Content-Type: application/json' \
--data '{
  "id": "uuid",
  "jsonrpc": "2.0",
  "method": "message/stream",
  "params": {
    "message": {
      "kind": "message",
      "parts": [
        {
          "kind": "text",
          "text": "今天天气"
        }
      ],
      "role": "user"
    }
  }
}'

正确响应示例

data: {
    "jsonrpc": "2.0",
    "result": {
        "taskId": "taskid-1",
        "contextId": "contextid-1",
        "kind": "artifact-update",
        "artifact": {
            "artifactId": "artifactid-1",
            "name": "/thought/plan",
            "parts": [],
            "metadata": {
                "event": {
                    "create": "",
                    "id": "eventid-1",
                    "name": "/thought/plan",
                    "status": "preparing"
                },
                "is_end": false,
                "is_event_done": false,
                "metrics": {
                    "begin_time_stamp": null,
                    "current_time_stamp": null
                },
                "name": "",
                "render": {
                    "component_detail": {
                        "is_workflow": false,
                        "name": "",
                        "thought": ""
                    }
                },
                "text_raw": {
                    "info": ""
                },
                "type": "text",
                "visible_scope": "all"
            }
        },
        "append": true,
        "lastChunk": false,
        "metadata": {
            "conversation_id": "conversationid-1",
            "end_user_id": "",
            "is_completion": false,
            "message_id": "msgid-1",
            "role": "tool",
            "status": "preparing",
            "trace_id": "traceid-1",
            "user_id": "userid-1"
        }
    },
    "id": "id-1"
}

data: {
    "jsonrpc": "2.0",
    "result": {
        "taskId": "taskid-1",
        "contextId": "contextid-1",
        "kind": "artifact-update",
        "artifact": {
            "artifactId": "artifactid-1",
            "name": "/thought/plan",
            "parts": [
                {
                    "kind": "text",
                    "text": "已经完成任务"
                }
            ],
            "metadata": {
                "event": {
                    "create": "",
                    "id": "eventid-1",
                    "name": "/thought/plan",
                    "status": "running"
                },
                "is_end": false,
                "is_event_done": false,
                "metrics": {
                    "begin_time_stamp": null,
                    "current_time_stamp": null
                },
                "name": "",
                "render": {
                    "component_detail": {
                        "is_workflow": false,
                        "name": "",
                        "thought": ""
                    }
                },
                "type": "text",
                "visible_scope": "all"
            }
        },
        "append": true,
        "lastChunk": false,
        "metadata": {
            "conversation_id": "conversationid-1",
            "end_user_id": "",
            "is_completion": false,
            "message_id": "msgid-1",
            "role": "tool",
            "status": "running",
            "trace_id": "traceid-1",
            "user_id": "userid-1"
        }
    },
    "id": "id-2"
}

data: {
    "jsonrpc": "2.0",
    "result": {
        "taskId": "taskid-1",
        "contextId": "contextid-1",
        "kind": "status-update",
        "status": {
            "state": "completed",
            "timestamp": "2025-08-27T08:20:43.604369041+08:00"
        },
        "final": true
    },
    "id": "id-3"
}

错误响应示例

{
    "jsonrpc": "2.0",
    "error": {
        "code": -32700,
        "message": "Server received JSON that was not well-formed."
    }
    "id": "id-4"
}
上一篇
概述
下一篇
数据分析