- 文档首页
ArkClaw 企业版
ArkClaw 企业版
最佳实践
ArkClaw A2A 接口集成最佳实践
ArkClaw A2A 接口集成与 Session 多轮会话最佳实践
ArkClaw A2A 接口集成最佳实践
ArkClaw A2A 接口集成与 Session 多轮会话最佳实践
ArkClaw A2A 接口集成与 Session 多轮会话最佳实践
通过 A2A 客户端调用 ArkClaw 时,单次请求默认生成独立会话,智能体无法感知历史对话,如需实现连贯多轮对话、让智能体记忆前文内容,可通过contextId关联会话上下文来实现。
本文主要介绍如何通过contextId ,将多次请求关联到同一 Session,实现多轮会话上下文推理与追问。
若目标 ArkClaw 实例开启 Webhook 能力后,将生成专属公网访问地址,可供外部 A2A 客户端主动调用该 ArkClaw,完成单轮问答、长文本流式输出、异步任务处理等各类交互场景。
开启 ArkClaw 实例基于 A2A 协议的外部接入能力后,平台将自动生成 Endpoint URL 和 API Key,供外部业务系统通过公网访问链接调用当前 ArkClaw。
- 在目标 ArkClaw 实例详情页面,切换至“设置”页签后,单击
图标,开启 Webhook。了解更多
-
- 单击
图标,复制生成的公网访问链接,以备在步骤二发起请求时使用。了解更多
-
步骤二:通过 contextId 绑定多轮请求至同一 Session
携带相同contextId的请求将归属同一个 Session,智能体可读取会话内全部历史对话,完成上下文理解、连续追问与多轮逻辑推理。A2A 接口支持同步与异步两种多轮会话调用模式,可根据业务场景选择合适的访问方式。
- 请求发起后,连接保持阻塞,直至智能体完成处理并返回结果。适用于简短问答、轻量计算及整体耗时较短的任务。
- 请求提交后先返回任务回执,任务在后台继续执行,后续可通过轮询方式获取处理结果。适用于长文本生成、复杂工具调用及执行时间较长的任务。
同步阻塞访问 A2A 接口
异步轮询访问 A2A 接口
可使用 curl、Postman 等接口调试工具调试多轮会话,下文以curl命令为例,结合查询北京、上海坐标的业务场景,介绍同步阻塞调用模式下连续多轮对话的操作流程。
- 以“查看北京坐标”为例,执行下方命令发起首轮对话请求。
注意
仅下述参数需结合业务实际信息替换,其余参数为固定配置,无需改动。
- id:请求唯一标识,建议使用 UUID,自定义即可,用于区分不同请求。
- text:用户实际提问内容,可根据业务需求自定义修改。
-H 'content-type: application/json' \
"id": "req-12345678-1234-1234-1234-1234567****",
"method": "message/send",
"acceptedOutputModes": [],
"messageId": "msg-12345678-1234-1234-1234-1234567****",
- 在返回结果result.contextId 中提取会话 ID(contextId),用于后续发起续轮请求时传入该 ID,实现当前会话上下文连贯。
"id": "req-12345678-1234-1234-1234-1234567****",
"id": "bf24b92c-a826-4341-87d1-9d672c****",
"contextId": "42672b89-1ddf-447c-82dc-ffb556a****",
"messageId": "173e4486-30cf-4780-a09e-2b2425f6****",
"text": "根据已知信息,北京的坐标是:\n\n**地理位置坐标:**\n- **纬度:** 39.9042° N\n- **经度:** 116.4074° E\n\n这是北京市中心(天安门附近)的大致坐标,北京位于北半球、东半球。"
"contextId": "42672b89-1ddf-447c-82dc-ffb556a****"
"timestamp": "2026-07-02T11:01:41.940Z"
"messageId": "msg-12345678-1234-1234-1234-1234567****",
"artifactId": "e0ab4c15-8c0c-4933-9188-aa7b6be****",
"text": "根据已知信息,北京的坐标是:\n\n**地理位置坐标:**\n- **纬度:** 39.9042° N\n- **经度:** 116.4074° E\n\n这是北京市中心(天安门附近)的大致坐标,北京位于北半球、东半球。"
步骤二:绑定多轮请求至同一Session(查询上海坐标)
将上一步骤中获取的contextId填入message.contextId 字段后发起调用,即可复用原有会话,实现上下文持续关联(同一 Session)。
注意
- contextId必须写在params.message.contextId字段,而非顶层params.contextId,否则多轮对话上下文就无法正常保存,智能体读取不到历史聊天记录。
- 仅下述参数需结合业务实际信息替换,其余参数为固定配置,无需改动。
- id:请求唯一标识,建议使用 UUID,自定义即可,用于区分不同请求。
- contextId:会话唯一标识,取自首次新建会话接口返回值;填入后可复用同一会话历史,必须替换为实际获取的值。
- text:用户实际提问内容,可根据业务需求自定义修改。
-H 'content-type: application/json' \
"id": "req-12345678-1234-1234-1234-1234567****",
"method": "message/send",
"acceptedOutputModes": [],
"messageId": "msg-12345678-1234-1234-1234-12345678****",
"contextId": "42672b89-1ddf-447c-82dc-ffb556a5****",
- 打开浏览器,在浏览器地址栏中输入登录 ArkClaw 链接,按“回车”键。
- 在我的任务中查看目标对话记录,两条问答归属同一个会话,则历史上下文完整留存。
-
可使用 curl、Postman 等接口调试工具调试多轮会话,下文以curl命令为例,通过查询杭州、武汉坐标的实操案例,介绍异步轮询调用模式下连续多轮操作流程。
- 新建会话并获取contextId与task.id。
- 以“查看杭州坐标”为例,执行如下命令,发送首轮提问。
注意
仅下述参数需结合业务实际信息替换,其余参数为固定配置,无需改动。
- id:请求唯一标识,建议使用 UUID,自定义即可,用于区分不同请求。
- 将请求参数configuration.blocking设置为false即可启用异步调用模式。
- text:用户实际提问内容,可根据业务需求自定义修改。
-H 'content-type: application/json' \
"id": "req-12345678-1234-1234-1234-1234567****",
"method": "message/send",
"messageId": "msg-12345678-1234-1234-1234-1234567****",
- 在返回结果中获取contextId和与task.id(任务 ID),用于后续发起续轮请求时携带。
- contextId:用于关联到同一 Session,保持会话上下文连贯。
- task.id:调用轮询接口tasks/get时必须传入,用于定位待查询的任务。
"id": "req-12345678-1234-1234-1234-123456****",
"id": "84b952e8-544c-4a89-9fb6-cfda33e****",
"contextId": "7a0bd6fc-0e65-42c1-bc5d-08913b****",
"timestamp": "2026-07-02T12:01:53.962Z"
"messageId": "msg-12345678-1234-1234-1234-123456****",
- 异步提交提问后,任务会在后台异步执行,无法一次性获取完整回复内容,需循环调用任务查询接口,传入上一步返回的task.id持续轮询任务运行状态。
- 将首轮请求返回结果中的result.id (task.id)填入tasks/get 接口的params.id参数中进行轮询查询。
注意
仅下述参数需结合业务实际信息替换,其余参数为固定配置,无需改动。
- params.id:替换为上一步返回的 result.id(task.id),必须替换为实际获取的值。
-H 'content-type: application/json' \
"id": "req-12345678-1234-1234-1234-123456****",
"id": "84b952e8-544c-4a89-9fb6-cfda33e****"
- 当返回参数中status.state为completed时,则异步任务执行完毕,可获取本次任务完整回答内容以及对应contextId。
"id": "req-12345678-1234-1234-1234-123456****",
"id": "84b952e8-544c-4a89-9fb6-cfda33e****",
"contextId": "7a0bd6fc-0e65-42c1-bc5d-08913b****",
"messageId": "28fa7ea5-1db0-4955-8b83-8c483fa****",
"text": "杭州的坐标信息如下:\n\n**经纬度:**\n- 经度:120.1551° E\n- 纬度:30.2741° N\n\n**其他坐标格式:**\n- 十进制度数:30.2741, 120.1551\n- 度分秒:30°16'26.8\"N, 120°9'18.4\"E\n\n杭州位于中国东部沿海地区,浙江省北部,钱塘江下游,京杭大运河南端。这个坐标大致指向杭州市中心区域。"
"contextId": "7a0bd6fc-0e65-42c1-bc5d-08913bf****"
"timestamp": "2026-07-02T12:02:26.280Z"
"artifactId": "abdecb22-4b5b-4326-a592-e381211****",
"text": "杭州的坐标信息如下:\n\n**经纬度:**\n- 经度:120.1551° E\n- 纬度:30.2741° N\n\n**其他坐标格式:**\n- 十进制度数:30.2741, 120.1551\n- 度分秒:30°16'26.8\"N, 120°9'18.4\"E\n\n杭州位于中国东部沿海地区,浙江省北部,钱塘江下游,京杭大运河南端。这个坐标大致指向杭州市中心区域。"
复用上一轮获取的contextId发起追问,系统自动读取此前 “查询杭州坐标” 的对话历史,基于已有上下文持续交互。
- 以“查询武汉坐标”为例,将在步骤一获取的contextId填入message.contextId字段,再次提交异步对话任务,即可绑定原有会话、完整保留历史交互记录,实现多轮递进式接续追问。
注意
仅下述参数需结合业务实际信息替换,其余参数为固定配置,无需改动。
- contextId:会话唯一标识,取自首次新建会话接口返回值;填入后可复用同一会话历史,必须替换为实际获取的值。
- text:用户实际提问内容,可根据业务需求自定义修改。
-H 'content-type: application/json' \
"id": "req-12345678-1234-1234-1234-123456****",
"method": "message/send",
"messageId": "msg-12345678-1234-1234-1234-123456****",
"contextId": "7a0bd6fc-0e65-42c1-bc5d-08913b****",
- 查看返回结果:接口成功响应后会返回本轮任务回执,其中result.id是本次提问全新生成的task.id,用于调用轮询接口查询本次武汉提问的任务执行状态。
- 将上个步骤返回结果中的获取的task.id(result.id)填入params.id参数,主动轮询任务执行状态。
注意
仅下述参数需结合业务实际信息替换,其余参数为固定配置,无需改动。
- params.id:替换为上一步返回的 result.id(task.id),必须替换为实际获取的值。
-H 'content-type: application/json' \
"id": "req-12345678-1234-1234-1234-1234567****",
"id": "f2d257af-ff8c-46c3-ba77-a97ace7****"
- 查看轮询成功返回结果:任务状态变为completed ,获取最终应答结果。
步骤三:会话验证
- 打开浏览器,在浏览器地址栏中输入登录 ArkClaw 链接,按“回车”键。
- 在我的任务中查看目标对话记录,两条问答归属同一个会话,则通过统一contextId实现了异步模式下连续对话,上下文正常生效。
-
最近更新时间:2026.07.15 11:57:06