管理 API 会话、调用任务和中断
一体化智能体运行与协同平台(AgentWorks)的 Invoke API 使用 session_id 关联多轮对话。一段会话可以依次包含多个调用任务;每个调用任务处理一次输入或中断响应。
区分会话和调用任务
会话保存多轮对话上下文,调用任务表示会话中正在处理的一次输入或中断响应。
| 对象 | 开始 | 结束或停止使用 |
|---|---|---|
| 会话 | 首次请求只发送 prompt,平台返回 session_id | 调用方不再复用该 ID;需要新对话时,下一次请求不发送 session_id |
| 调用任务 | 在会话中发送 prompt,或响应待处理中断 | completed 或 error 结束本次调用任务;interrupted 表示任务暂停,等待中断响应 |
调用任务结束不表示会话结束。前一个调用任务完成或失败后,可以使用同一个 session_id 发送新的 prompt,继续原会话。同一会话同时只能有一个活动调用任务流。
Invoke API 不提供会话列表、会话删除端点或可配置的会话过期时间。调用方应保存用户或业务对话与 session_id 的对应关系,并在不再需要继续时停止复用该 ID。不要依赖空闲等待来开始新会话;会话上下文也不应代替业务系统中的权威记录。
在外部系统中保存流程状态
外部流程多次调用同一个智能体实例时,需要分别管理智能体对话和业务流程。只有模型需要参考前文时,后续调用才复用原 session_id;固定流程步骤、重试和业务结果由外部系统单独保存。
AgentWorks 使用 session_id 关联智能体对话上下文。业务应用或编排系统还需要保存:
- 业务流程执行标识、当前步骤和条件判断结果。
- 已执行次数、验收结果、重试上限、超时和成本预算。
- 已完成的写操作、审批结果和避免重复执行所需的业务记录。
外部系统应记录每次流程执行所使用的 session_id 和调用时间,便于把业务日志与 AgentWorks Trace 对照排查。不要把 session_id 同时当作流程执行标识、幂等键或审批记录。
API 会话和调用任务生命周期
一段会话可以依次包含多个调用任务。调用任务结束后,调用方可以复用 session_id 继续原会话,也可以停止复用该 ID,或在下一次请求中不发送原 ID 来开始新会话。调用任务还可能经历中断、同会话并发冲突和 SSE 断开后的状态恢复:
SSE 断开后,调用方不知道任务结果,应先调用 GetMissionState;只有任务无法继续时才调用 ResetMissionState。not_found 表示调用任务状态已经不可查询,不表示会话历史已经删除。stream_in_progress 只拒绝同会话的新调用,不会替换原活动任务。这些状态转换属于一次调用任务,不表示整个会话已经结束。
创建、继续和开始新会话
- 新会话:只发送
prompt,服务端返回session_id。 - 继续会话:发送
session_id和新的prompt。 - 响应中断:发送
session_id和interrupt_response,不发送prompt。 - 开始另一段新会话:下一次请求只发送
prompt,不复用原session_id。
session_id 必须是有效 UUID。它只用于目标智能体实例中的会话。调用方应把它与自己的用户或业务会话安全关联,不要让一个用户猜测或复用另一个用户的会话 ID。
规划会话边界、上下文和数据保留
业务应用应主动规定什么时候复用 session_id,而不是让一个 ID 无限制地覆盖所有对话。用户、租户、账号、权限范围、业务任务或主题发生变化时,下一次请求不发送原 session_id,开始一段新会话。需要延续同一任务且模型仍需参考前文时,才复用原 ID。
- 继续同一用户的同一业务任务:复用
session_id,并串行发送请求。 - 用户、主题、业务任务或权限范围发生变化:不发送原
session_id,开始新会话。 - 会话需要持续很多轮,并继续使用早期信息:为智能体模板启用并验证上下文压缩。
- 信息需要跨会话保存:使用记忆库或业务系统保存。
- 组织要求按期限清理会话历史:上线前与平台管理员确认目标环境的数据保留和清理流程。
调用方也可以根据业务风险设置自己的最大会话时长或轮数,到达边界后开始新会话。这些边界由业务应用执行,不是 Invoke API 的会话过期设置。
停止复用 session_id 只表示业务应用不再继续这段对话,不表示会话历史已经删除。completed、error、not_found 和 ResetMissionState 也不能作为删除完成的依据。上下文压缩用于控制送入模型的历史内容,同样不是数据删除功能。配置方法参见配置模型、提示词与上下文压缩。
串行处理同一会话
同一个会话同时只能有一个活动调用任务流。如果已有调用尚未结束,再次调用会返回:
stream_in_progress调用方应:
- 等待当前 SSE 流的
done。 - 为同一会话建立串行队列。
- 连接中断后先查询调用任务状态。
- 不要通过立即重试制造并发调用。
响应中断
调用任务返回 pending_interrupt 后,业务应用应先完成所需的用户输入、工具执行或审批,再使用同一个 session_id 返回 interrupt_response。这里的外部处理流程表示调用方负责的业务操作,不是另一项平台资源:
响应确认型中断
当 pending_interrupt.type 为 confirm 时,用中断 ID 批准或拒绝:
{
"session_id": "b02d0b5b-5083-4e25-ae98-b21538bf1515",
"interrupt_response": {
"interrupt_id": "interrupt-001",
"action": "APPROVE"
},
"stream": false
}拒绝时使用 REJECT。只有确认型中断可以使用这两个动作。
响应输入型中断
当中断要求用户提供信息时,使用 RESPOND:
{
"session_id": "b02d0b5b-5083-4e25-ae98-b21538bf1515",
"interrupt_response": {
"interrupt_id": "interrupt-002",
"action": "RESPOND",
"response_data": "订单号是 SO-1024"
},
"stream": true
}无法提供输入或处理失败时使用 ERROR。如果会话仍有待处理中断却发送普通 prompt,服务端会返回 pending_interrupt 冲突。
用户工具包也通过 RESPOND 接收调用方执行工具后的结果。调用方必须先校验工具名称和参数,再把与工具输出结构一致的结果返回给同一个会话。参见定义用户工具包和构建可调用业务系统的工单助手。
查询调用任务状态
curl -X POST "{base_url}/api/agents/GetMissionState" \
-H "Authorization: Bearer {agent_token}" \
-H "Content-Type: application/json" \
-d '{
"session_id": "b02d0b5b-5083-4e25-ae98-b21538bf1515"
}'状态包括:
activeinterruptedcompletederrornot_found
interrupted 响应会携带待处理中断。
completed 和 error 表示本次调用任务已经结束,后续仍可使用同一 session_id 发送新的 prompt。not_found 表示该调用任务的状态已经不可查询,不表示会话历史已经删除。
如果业务操作结果仍不确定,先查询外部系统状态,避免重复执行有副作用的操作。确认可以继续原对话时,使用同一 session_id 发送新的 prompt;需要从干净的对话上下文开始时,不发送原 ID。
重置异常调用任务
当流已经丢失且调用任务无法继续时:
curl -X POST "{base_url}/api/agents/ResetMissionState" \
-H "Authorization: Bearer {agent_token}" \
-H "Content-Type: application/json" \
-d '{
"session_id": "b02d0b5b-5083-4e25-ae98-b21538bf1515"
}'重置会终止当前调用任务并清除待处理中断。该操作幂等,但不会恢复未完成的业务副作用,也不会表示会话历史已经删除。重置后由调用方决定继续原会话还是创建新会话。
处理服务重启和超时
SSE 可能以 server_restart 结束,活动调用任务也会按部署配置过期。调用方应把业务操作设计为可重试或可核对,并在未知结果时先查询外部系统状态,而不是直接重复写操作。