已开启
[Feature] ReActAgent 运行级 deadline:墙钟总预算、每次调用向下夹逼、soft→hard 两段收尾 #188
yaojun97创建于 4 天前
4 天前 添加了label:sig/sig-agent-core-java
openJiuwen-bot
4 天前 评论:
4 天前 评论:
欢迎来到 openJiuwen 社区
Hey @yaojun97 , 感谢你对社区的贡献.
机器人使用手册
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。
联系指引
有疑问可以联系 SIG: sig-agent-core-java ,
维护者是: @shenwei21, @tianmingyong ,
审核者是: @foreach1991, @gcw_xJSJ32Ge, @jeffrey_qiao, @kangquansheng_makeIT, @xiongjie_makeit .


4 天前 修改了issue 的描述
xiaoming
3 天前 评论:
3 天前 评论:
已基于最新 upstream/develop 将本 issue 的运行级时间预算需求整理为符合仓库需求模板的 #190:ReActAgent 支持单次运行总时间预算与临近截止收尾,包含背景描述、设计思路和测试设计与测试计划。
当前 develop 已有模型请求级超时配置,但 ReAct 单次运行仍缺少总预算。#190 补充了模型重试、流式读取、工具执行、并发调用及中断恢复等边界,并将超时后的具体错误语义和取消保证留给设计评审确认。建议后续围绕 #190 讨论和验收该 feature;本评论不改变 #188 状态。


Paired: GitHub #356 ↔ GitCode #188
标题:
[Feature] ReActAgent 运行级 deadline:墙钟总预算、每次调用向下夹逼、soft→hard 两段收尾1. 问题
即使有了 per-call timeout(Issue A),
maxIterations × per-call仍无总上界:以 smartresearch-alpha 为例,三相位 ReAct 各 ≤120/60 迭代 × 单调用上界 1200s ⇒ 名义运行上界 40+ 小时。真 LLM 实测中单次任务 10–90 分钟,目前只能靠部署外层的墙钟 timeout 进程级 kill 兜底——无法优雅收尾,任务已写的中间工件状态不可控,消费者也无法在框架内回答「这次调用还剩多少预算」。具体三个缺口:
min(per-call, remaining)夹逼;2. 建议设计(三层,默认关闭零破坏)
① 总预算入口(Builder/引擎配置)
ReActAgent agent = new ReActAgent(card); // 墙钟总预算(二选一语义均可,建议 Duration 为主、Instant 便于对齐外部期限) agent.configureDeadline(java.time.Duration.ofMinutes(90)); // 可选:软线比例,默认 0.2 agent.configureSoftDeadlineRatio(0.2);② 向下夹逼传播(ReAct 主循环内,每次迭代重算)
③ soft → hard 两段收尾
④(可选第二步)工具侧可见性:
ToolCallInputs(或工具执行上下文)增加deadlineRemaining()——长退避类工具(如限流检索的 30s×N 退避 sleep)可自行夹逼min(backoff, remaining),避免预算耗尽前「睡死」。3. 兼容性
IllegalStateException(与一次性任务的 fail-fast 模式一致);4. 测试建议(消费者视角的最小验证集)
5. 开源先例
recursion_limit是迭代数总量上界;TimeoutPolicy 提供run_timeout(总墙钟)+idle_timeout(进度停滞)双闸——「总量上界 + 停滞检测」的公开组合设计;timeout(remaining, sleep(delay))形态——退避永远不越过剩余预算);会话级超时旋钮原生配置;min(perTurnMs, deadline − started))——与本提案②的公式同形。6. 不含(明确出界)
工具实现内部的退避策略本身(各工具自治);分布式/跨进程 deadline 传播(gRPC-style context cancellation 是更重的方案,若本 Issue 落地后再评估)。
(关联:per-call timeout 配置化 Issue A 随后提交,为本文夹逼公式的前置,可独立评审。)