Skip to content

管理 API 会话、调用任务和中断

一体化智能体运行与协同平台(AgentWorks)的 Invoke API 使用 session_id 关联多轮对话。一段会话可以依次包含多个调用任务;每个调用任务处理一次输入或中断响应。

区分会话和调用任务

会话保存多轮对话上下文,调用任务表示会话中正在处理的一次输入或中断响应。

对象开始结束或停止使用
会话首次请求只发送 prompt,平台返回 session_id调用方不再复用该 ID;需要新对话时,下一次请求不发送 session_id
调用任务在会话中发送 prompt,或响应待处理中断completederror 结束本次调用任务;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;只有任务无法继续时才调用 ResetMissionStatenot_found 表示调用任务状态已经不可查询,不表示会话历史已经删除。stream_in_progress 只拒绝同会话的新调用,不会替换原活动任务。这些状态转换属于一次调用任务,不表示整个会话已经结束。

创建、继续和开始新会话

  • 新会话:只发送 prompt,服务端返回 session_id
  • 继续会话:发送 session_id 和新的 prompt
  • 响应中断:发送 session_idinterrupt_response,不发送 prompt
  • 开始另一段新会话:下一次请求只发送 prompt,不复用原 session_id

session_id 必须是有效 UUID。它只用于目标智能体实例中的会话。调用方应把它与自己的用户或业务会话安全关联,不要让一个用户猜测或复用另一个用户的会话 ID。

规划会话边界、上下文和数据保留

业务应用应主动规定什么时候复用 session_id,而不是让一个 ID 无限制地覆盖所有对话。用户、租户、账号、权限范围、业务任务或主题发生变化时,下一次请求不发送原 session_id,开始一段新会话。需要延续同一任务且模型仍需参考前文时,才复用原 ID。

  • 继续同一用户的同一业务任务:复用 session_id,并串行发送请求。
  • 用户、主题、业务任务或权限范围发生变化:不发送原 session_id,开始新会话。
  • 会话需要持续很多轮,并继续使用早期信息:为智能体模板启用并验证上下文压缩。
  • 信息需要跨会话保存:使用记忆库或业务系统保存。
  • 组织要求按期限清理会话历史:上线前与平台管理员确认目标环境的数据保留和清理流程。

调用方也可以根据业务风险设置自己的最大会话时长或轮数,到达边界后开始新会话。这些边界由业务应用执行,不是 Invoke API 的会话过期设置。

停止复用 session_id 只表示业务应用不再继续这段对话,不表示会话历史已经删除。completederrornot_foundResetMissionState 也不能作为删除完成的依据。上下文压缩用于控制送入模型的历史内容,同样不是数据删除功能。配置方法参见配置模型、提示词与上下文压缩

串行处理同一会话

同一个会话同时只能有一个活动调用任务流。如果已有调用尚未结束,再次调用会返回:

language-text
stream_in_progress

调用方应:

  1. 等待当前 SSE 流的 done
  2. 为同一会话建立串行队列。
  3. 连接中断后先查询调用任务状态。
  4. 不要通过立即重试制造并发调用。

响应中断

调用任务返回 pending_interrupt 后,业务应用应先完成所需的用户输入、工具执行或审批,再使用同一个 session_id 返回 interrupt_response。这里的外部处理流程表示调用方负责的业务操作,不是另一项平台资源:

响应确认型中断

pending_interrupt.typeconfirm 时,用中断 ID 批准或拒绝:

language-json
{
  "session_id": "b02d0b5b-5083-4e25-ae98-b21538bf1515",
  "interrupt_response": {
    "interrupt_id": "interrupt-001",
    "action": "APPROVE"
  },
  "stream": false
}

拒绝时使用 REJECT。只有确认型中断可以使用这两个动作。

响应输入型中断

当中断要求用户提供信息时,使用 RESPOND

language-json
{
  "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 接收调用方执行工具后的结果。调用方必须先校验工具名称和参数,再把与工具输出结构一致的结果返回给同一个会话。参见定义用户工具包构建可调用业务系统的工单助手

查询调用任务状态

language-bash
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"
  }'

状态包括:

  • active
  • interrupted
  • completed
  • error
  • not_found

interrupted 响应会携带待处理中断。

completederror 表示本次调用任务已经结束,后续仍可使用同一 session_id 发送新的 promptnot_found 表示该调用任务的状态已经不可查询,不表示会话历史已经删除。

如果业务操作结果仍不确定,先查询外部系统状态,避免重复执行有副作用的操作。确认可以继续原对话时,使用同一 session_id 发送新的 prompt;需要从干净的对话上下文开始时,不发送原 ID。

重置异常调用任务

当流已经丢失且调用任务无法继续时:

language-bash
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 结束,活动调用任务也会按部署配置过期。调用方应把业务操作设计为可重试或可核对,并在未知结果时先查询外部系统状态,而不是直接重复写操作。