Paired: GitHub #361 ↔ GitCode #190
背景描述
当前 upstream/develop 的 ReActAgent 可通过 maxIterations 限制迭代次数,但没有限制一次 invoke 的总运行时间。ModelClientConfig.timeout 和 ModelInvokeOptions.timeout 已提供模型请求的默认及逐次超时配置;模型请求重试、流式响应读取和工具执行仍可能使整次 ReAct 运行超过调用方预期。消费者只能在框架外设置任务级超时,难以在截止前生成阶段性结论,也无法获知本次运行的剩余预算。
本特性面向单次 ReAct 调用增加可选的墙钟总预算和临近截止收尾能力。未配置总预算时保持既有行为;不改变已有模型请求超时配置的含义。
设计思路
- 在 ReActAgentConfig 或单次调用参数中提供可选的总时间预算,并在每次 invoke 开始时独立计算截止时间。截止状态不得存放在可被不同会话共享的 agent 实例状态中;明确中断、恢复调用时预算是否重置。
- 在每次迭代以及模型、重试、流式读取和工具派发前检查剩余时间。单次模型请求与工具等待使用其既有时限和剩余预算中的较小值;重试等待、流式消费和降级调用也不得重新获得完整预算。到期后不再派发新工作。
- 提供可配置的临近截止阈值。触发时仅对本次运行向模型发出一次收尾提示,使模型有机会利用已有信息形成结论;提示不保证一定生成终稿,也不应永久污染后续会话。
- 到期时提供可识别的终止原因及调用方可见的错误/结果语义,并明确同步与流式调用的一致性。保存已产生的上下文和输出;对执行中工具采用尽力取消,并明确无法强制停止不配合取消的工具或撤销其外部副作用。
- 未配置总预算时不增加提示消息、不改变原有超时、重试、工具执行及返回行为。同一 agent 实例的后续调用仍可正常运行。
测试设计与测试计划
- 无总预算对照:验证同步和流式调用的消息、超时参数、重试及终止行为与现有实现一致。
- 预算与提醒:验证运行级预算按每次 invoke 隔离;临近截止提示最多一次,模型可自然完成;到期后不再开始新迭代或新工具调用。
- 模型调用:验证单次请求采用既有请求时限与剩余预算的较小值;覆盖请求重试等待、流式持续读取、空流重试及非流式降级,确认不会因重试重新获得完整预算。
- 工具执行:验证工具等待按剩余预算缩短;覆盖并行工具、工具超时及无法响应取消的工具,确认对外承诺与实际取消能力一致。
- 生命周期:验证截止终止原因、同步和流式输出、已有上下文可读性,以及工具中断/恢复、同一 agent 的重复调用和不同会话并发调用不会串扰。
Paired: GitHub #361 ↔ GitCode #190
背景描述
当前 upstream/develop 的 ReActAgent 可通过 maxIterations 限制迭代次数,但没有限制一次 invoke 的总运行时间。ModelClientConfig.timeout 和 ModelInvokeOptions.timeout 已提供模型请求的默认及逐次超时配置;模型请求重试、流式响应读取和工具执行仍可能使整次 ReAct 运行超过调用方预期。消费者只能在框架外设置任务级超时,难以在截止前生成阶段性结论,也无法获知本次运行的剩余预算。
本特性面向单次 ReAct 调用增加可选的墙钟总预算和临近截止收尾能力。未配置总预算时保持既有行为;不改变已有模型请求超时配置的含义。
设计思路
测试设计与测试计划