通信协议开发
本页只描述当前源码能够共同验证的 wire contract。它适合调试或实现实验性第三方 Adapter,不代表已经发布长期稳定的公共协议 SDK。
需求
第三方 Adapter 需要:
- 主动建立到 Agent Core TCP 服务的连接;
- 按 UTF-8 JSON、换行符
\n分帧; - 发送 JSON-RPC 2.0 请求、响应和通知;
- 持有与实例记录匹配的
instance_id和auth_token; - 在握手后注册工具并处理 Agent Core 发来的调用。
当前 Adapter 实际目标为 127.0.0.1:27541。Agent Core 服务端监听设置不能推导出 Adapter 已支持跨主机配置。
架构
帧与消息
每个 JSON 值编码为一行:
{"jsonrpc":"2.0","method":"pong"}\nAgent Core 和 Bedrock 都按 \n 累积拆帧。不要依赖 TCP 包边界,也不要在一帧中拼接多个 JSON 值。
握手与认证
Adapter 连接后发送带 id 的 handshake 请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "handshake",
"params": {
"instance_id": "<instance id>",
"auth_token": "<secret token>",
"version": {
"protocol": "1.0.0",
"edition": "java"
},
"mod": "<adapter version>"
}
}edition 当前使用 java 或 bedrock。Java 还可能发送实验性 world_name 与 world_online。成功响应的共同可依赖字段是:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"success": true,
"version": "<server version>",
"server_name": "<server name>",
"max_tools": 0
}
}Bedrock 源码明确在服务端未返回心跳间隔时使用 10 秒默认值。不要依赖旧文档中的固定 session_id 响应。
握手前除握手和心跳兼容消息外的请求会被拒绝,当前可见错误为 -32002 Not authenticated。认证失败和版本校验的精确错误结构应以目标 Agent Core 版本的 tcp/handshake.ts 为准。
工具注册
当前 Adapter 使用 register_tools 通知:
{
"jsonrpc": "2.0",
"method": "register_tools",
"params": {
"instance_id": "<instance id>",
"tools": [
{
"name": "example_ping",
"description": "返回连通状态",
"category": "perception",
"input_schema": {
"type": "object",
"properties": {},
"required": []
}
}
]
}
}Agent Core 收到后按工作区替换动态工具列表。工具 Schema 的可选字段和归一化逻辑仍可能变化;实现第三方 Adapter 时应针对目标版本测试。
工具调用
单次调用使用请求:
{
"jsonrpc": "2.0",
"id": "call-1",
"method": "tool_call",
"params": {
"tool_name": "example_ping",
"parameters": {},
"timeout_ms": 30000
}
}当前主 Agent pipeline 主要发送 tool_call_batch:
{
"jsonrpc": "2.0",
"id": "batch-1",
"method": "tool_call_batch",
"params": {
"calls": [
{
"tool_name": "example_ping",
"parameters": {},
"timeout_ms": 30000
}
]
}
}心跳和事件
Agent Core 发送 ping,Adapter 以 pong 回复;当前服务端兼容 pong 请求或通知。Adapter 还可发送 event、status_report 以及 Java 世界上线/离线通知。事件 payload 属于快速演进区,应直接对照目标版本处理器。
执行
- 先实现换行分帧和 JSON-RPC id 匹配。
- 连接后立即握手;认证成功前不要注册工具。
- 用通知发送完整工具列表。
- 实现
tool_call,再根据目标版本实现tool_call_batch。 - 对未知 method 返回 JSON-RPC
-32601,对无效参数返回-32602。 - 记录 id、method、耗时和错误码,但绝不能记录
auth_token。 - 分别与当前 Java、Bedrock 和 Agent Core 集成测试。
稳定边界
| 内容 | 当前判断 |
|---|---|
TCP + UTF-8 JSON + \n 分帧 | 多端源码一致,可作为当前基础 |
| JSON-RPC 2.0 基本形状 | 多端源码一致 |
handshake、register_tools、tool_call | 当前主流程,但字段仍应版本锁定 |
Java world_name / world_online | v2 扩展,实验性 |
| Batch 返回形状 | 不稳定:Agent Core dispatcher 按 Java 裸数组解析,Bedrock 返回 { success, data: [...] } 包装 |
| 全部错误码、事件类型、状态字段 | 未形成统一稳定表,按目标源码验证 |
因此第三方 Adapter 必须声明兼容的 Alice/Agent Core 版本。不要把当前 1.0.0 字符串理解为已经承诺语义化向后兼容。