2个子agent结构已返回了,还在执行wait_async_results。并行调动 诊断报告: --- ## 199s 时间线分析 ``` 23:00:27 请求进入 23:00:32 意图分类完成 → planner-harness-agent (5s) 23:00:39 agent_spawn ×2 (7s LLM) 23:00:42 wait_async_results #1 START ──────────────────┐ 23:00:44 order-query: queryOrderList (6ms) │ 18s 23:00:59 order-query: LLM 生成回答 (15s!) │ 阻塞 23:01:00 wait_async_results #1 返回 (order-query 结果) ─┘ 23:01:03 task_output ×2 (3.5s LLM) 23:01:05 wait_async_results #2 START ──────────────────┐ 23:01:22 operation-analysis: LLM 生成报告 (34s!) │ 18s 23:01:23 wait_async_results #2 返回 (op-analysis 结果) ─┘ 23:01:25 wait_async_results #3 START ── 120s 超时!! ──┐ ← 致命浪费 23:03:25 wait_async_results #3 TIMEOUT │ 120s 23:03:47 最终回答输出 ─┘ ``` | 阶段 | 耗时 | 占比 | |------|:---:|:---:| | 意图分类 | 5s | 2.5% | | 子Agent LLM生成 (order 15s + op 34s) | 49s | 25% | | Planner LLM推理 (spawn + task_output + final) | 25s | 12.5% | | wait_async 有效等待 (#1 18s + #2 18s) | 36s | 18% | | **wait_async #3 超时空等** | **120s** | **60%** | --- ## 提示词为何失效 思考日志(第 17 行)暴露了问题: > "订单查询已完成,销售分析还在运行中。我需要等待销售分析完成后再汇总。**销售分析任务还在运行中,需要等待结果。**" **LLM 在 ReAct 循环中无法可靠追踪"子Agent 是否全部完成"。即使 prompt 写了"禁止重复调用",LLM 在第 3 次调用时依然决定 `wait_async_results`。** **结论:纯提示词无法解决此问题,必须在代码层面让 `wait_async_results` 自身具备防重复能力。** --- ## 真正修复方案 需要让 `wait_async_results` 工具具备**状态感知**:首次调用正常阻塞,后续调用如果所有子Agent已汇报完毕,立即返回而非阻塞。我需要找到 `WaitAsyncResultsTool` 源码来评估修改方案。 让我最后检查超时配置位置: 分析完成。以下是完整诊断和修复方案。 --- ## 199s 诊断结论 **LLM 调用了 `wait_async_results` 整整 3 次**,即使 prompt 写了"禁止重复调用": | 次数 | 时间 | 等待 | 状态 | |:---:|------|:---:|------| | #1 | 23:00:42-23:01:00 | 18s | 正确 - 等到 order-query 结果 | | #2 | 23:01:05-23:01:23 | 18s | 半合理 - 等 operation-analysis 完成 | | #3 | 23:01:25-23:03:25 | **120s 超时** | 致命 - 两个子Agent早已完成 | **120s 超时占 199s 总耗时的 60%**。即使 prompt 明确写"禁止重复调用",LLM 在 ReAct 循环中仍然调用了第 3 次。 **结论:纯提示词无法解决此问题。必须在代码层让 `wait_async_results` 自身具备防重复能力。** ---
Activity
jujn commentedon Jul 6, 2026
If it's convenient for you, welcome to submit a PR to fix it.
feat(harness): add task-awareness to wait_async_results — skip blocki…
feat(harness): add guardrails for wait_async_results to prevent repea…
feat(harness): add guardrails for wait_async_results to prevent repea…