提示轮次生命周期
提示轮次遵循结构化流程,支持用户、代理和任何连接工具之间的丰富交互。1. 用户消息
当客户端发送session/prompt 时,轮次开始:
2. 代理处理
接收到提示请求后,代理处理用户消息并将其发送到语言模型,语言模型可以用文本内容、工具调用或两者响应。3. 代理报告输出
代理通过session/update 通知向客户端报告模型的输出。这可能包括代理完成任务的计划:
了解更多关于代理计划的信息
4. 检查完成
如果没有待处理的工具调用,轮次结束,代理必须用StopReason 响应原始的 session/prompt 请求:
StopReason 停止轮次。
5. 工具调用和状态报告
在继续执行之前,代理可以通过session/request_permission 方法请求客户端的权限。
一旦授予权限(如果需要),代理应该调用工具并报告状态更新,将工具标记为 in_progress:
fs) 方法,访问客户端环境中的资源。
当工具完成时,代理发送另一个更新,包含最终状态和任何内容:
了解更多关于工具调用的信息
6. 继续对话
代理将工具结果发送回语言模型作为另一个请求。 循环返回到步骤 2,持续进行,直到语言模型完成其响应而不请求额外的工具调用,或轮次被代理停止或被客户端取消。停止原因
当代理停止轮次时,必须指定相应的StopReason:
end_turn
语言模型完成响应而不请求更多工具
max_tokens
达到最大令牌限制
max_turn_requests
超出单个轮次中模型请求的最大数量
refusal
代理拒绝继续
cancelled
客户端取消轮次
取消
客户端可以在任何时候通过发送session/cancel 通知取消正在进行的提示轮次:
session/cancel 通知后,应该抢先将所有与当前轮次相关的未完成的工具调用标记为 cancelled。
客户端必须用 cancelled 结果响应所有待处理的 session/request_permission 请求。
当代理收到此通知时,它应该尽快停止所有语言模型请求和所有工具调用。
在所有正在进行的操作成功中止且待处理的更新已发送后,代理必须用 cancelled 停止原因响应原始的 session/prompt 请求。
代理在收到 session/cancel 通知后可以发送带有内容或工具调用更新的 session/update 通知,但它必须确保在响应 session/prompt 请求之前这样做。
客户端在发送 session/cancel 后应该仍然接受收到的工具调用更新。
一旦提示轮次完成,客户端可以发送另一个
session/prompt 以继续对话,建立在先前轮次中建立的上下文之上。