Skip to content

bugfix: 工具流式输出问题修改 - #124

Open
openjiuwen-sync-bot[bot] wants to merge 6 commits into
openJiuwen-ai:730from
openjiuwenai:sync/pr-246
Open

bugfix: 工具流式输出问题修改#124
openjiuwen-sync-bot[bot] wants to merge 6 commits into
openJiuwen-ai:730from
openjiuwenai:sync/pr-246

Conversation

@openjiuwen-sync-bot

@openjiuwen-sync-bot openjiuwen-sync-bot Bot commented Aug 13, 2026

Copy link
Copy Markdown

Paired: GitHub #124GitCode !246

What type of PR is this?

/kind

Self-checklist:(请自检,在[ ]内打上x,我们将检视你的完成情况,否则会导致pr无法合入

    • 设计:PR对应的方案是否已经经过Maintainer评审,方案检视意见是否均已答复并完成方案修改
    • 测试:PR中的代码是否已有UT/ST测试用例进行充分的覆盖,新增测试用例是否随本PR一并上库或已经上库
    • 验证:PR描述信息中是否已包含对该PR对应的Feature、Refactor、Bugfix的预期目标达成情况的详细验证结果描述
    • 接口:是否涉及对外接口变更,相应变更已得到接口评审组织的通过,API对应的注释信息已经刷新正确
    • 文档:是否涉及官网文档修改,如果涉及请及时提交资料到Doc仓

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@openjiuwen-collaboration-bot

openjiuwen-collaboration-bot Bot commented Aug 13, 2026

Copy link
Copy Markdown

head_sha: 775e2493c15b0ce3ff087086244a84f7b8e674f0

变更摘要

本 PR 主要围绕工具流式输出问题做修复:在 AbilityManager 中新增流式工具执行路径,统一以 tool_output 类型的 OutputSchema 向下游输出工具调用结果,并在 ReActAgent 主循环、TaskSchedulerDeepAgent 等链路中补充和传递 task_id,使工具调用、LLM 输出与任务元信息在流中可被一致消费。同时,将 LocalShellOperation.executeCmdStream 改造为真正惰性的迭代器,避免重复 hasNext() 消费事件以及 EXIT/ERROR 后可能出现的下游死循环,并新增了配套的单元测试与示例。

主要改动

  • AbilityManager 新增流式工具执行能力: 新增 executeStreamexecuteStreamingToolbuildToolOutputChunkmergeStreamChunks 等方法,将工具流式分片统一包装为 tool_output 类型的 OutputSchemapayload 固定包含 task_idtool_nametool_call_idcontent,并以 index 记录分片序号;非流式工具则回退到原有 invoke 路径。
  • ReActAgent 接入流式工具执行并补齐 task_id: 新增带 agentSession 参数的 executeToolCallEntries 重载,在主 ReAct 循环中调用 executeStream,同时在 llm_reasoningllm_outputllm_usage 等流式 chunk 的 payload 中补充 task_id,使各类流式输出与 tool_output 保持一致。
  • TaskScheduler 输出任务元信息: 在任务执行前通过 session.writeStream 写入 task_output 类型的 chunk,payload 包含 task_idtask_type 和截断后的 description,便于下游统一消费任务开始事件。
  • LocalShellOperation.executeCmdStream 改为惰性迭代器: 移除先全量收集结果再返回迭代器的逻辑,改为 hasNext() 幂等、按需拉取事件的惰性 Iterator;校验失败时返回单元素 ERROR 迭代器,EXIT/ERROR 事件产出后立即终止,避免下游 while(hasNext()) 死循环。
  • DeepAgent 注入并保证 task_id 可见: 在创建 innerSession 时从 effectiveInputs 读取 task_id 并写入 session state,且在 copySessionState 之后重新注入一次,确保下游 AbilityManager 能读取到 task_id

@openjiuwen-collaboration-bot

openjiuwen-collaboration-bot Bot commented Aug 13, 2026

Copy link
Copy Markdown

head_sha: 775e2493c15b0ce3ff087086244a84f7b8e674f0

代码审查

审查总结

已逐一审查全部 2 个变更文件:

  1. examples/deep_agent/DeepAgentToolCallStreamExample.java(新增 768 行)— 发现 2 个 P3 问题:

    • 未使用的私有方法(死代码):mapToCompactStringStreamingSearchResult.chunks()countToolResultsextractOriginalUserQuery
    • inspectInvokeResult 从未被调用,示例实际只演示流式 stream,与类 javadoc 声称的“非流式 invoke 演示”不一致。
  2. src/main/java/com/openjiuwen/core/controller/modules/TaskScheduler.java(+13 行)— 新增 task_output 流事件经核查未发现正确性/可靠性缺陷(task_output 类型已在 ReActAgent 注释中被认可;description 截断边界安全;writeStream 内部判空)。

结论统计:共 3 个 P3 发现(无 P0/P1/P2),整体风险为。变更主体是示例代码与一个任务开始流事件的补充,未发现会导致编译失败、运行时崩溃、数据一致性或安全问题的缺陷。


审查总结

已完成对全部 6 个变更文件的审查,逐文件结论如下:

  • src/main/java/com/openjiuwen/core/singleagent/AbilityManager.java —— 发现 2 个问题(1 个 P0 编译错误、1 个 P3 死代码)。
  • src/main/java/com/openjiuwen/core/singleagent/agents/ReActAgent.java —— 无问题。
  • src/main/java/com/openjiuwen/core/sysop/local/LocalShellOperation.java —— 无问题(惰性迭代器逻辑正确,transformCmdStreamEvent 为穷尽 switch、恒不返回 null)。
  • src/main/java/com/openjiuwen/harness/deep_agent/DeepAgent.java —— 无问题。
  • src/test/java/com/openjiuwen/core/singleagent/AbilityManagerStreamOutputTest.java —— 无问题。
  • src/test/java/com/openjiuwen/core/sysop/local/LocalShellOperationTest.java —— 无问题。

问题统计

  • P0:1 个
  • P3:1 个

整体风险判断:高风险。AbilityManager.executePreparedToolCallWithStreamingcatch (ToolInterruptException | AbilityExecutionError e) 之后又新增了 catch (RuntimeException re),由于前两者均为 RuntimeException 的子类,该后续 catch 不可达,会导致编译失败(构建级故障),必须修复后方可合入。其余变更(流式输出、惰性迭代器、task_id 注入)未发现功能性缺陷。

类型 数量
🔴 阻塞 1
🟡 建议 1

⛔ 需要修改

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 775e2493c15b0ce3ff087086244a84f7b8e674f0

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​246 冒烟测试存在 33 个失败用例(环境问题 33)。

  • 失败用例数:33
  • 失败原因分类:环境问题 33
  • 采集时间:20260813165328

失败用例列表

# 类型 用例 原因(首行)
1 error com.openjiuwen.test.cases.agent.agent_as_tool.TestAgentAsTool001#testAgentAsTool001 Failed to invoke agent
2 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent005#testRunAgent005 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
3 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent008#testRunAgent008 pre workflow execute error, session_id=user_123, workflow=weather_flow, error='workflow state exists but non-interactive
4 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent009#testRunAgent009 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
5 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent011#testRunAgent011 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
6 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent012#testRunAgent012 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
7 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming013#testRunAgentStreaming013 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
8 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming014#testRunAgentStreaming014 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
9 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming019#testRunAgentStreaming019 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
10 error com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming020#testRunAgentStreaming020 agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
11 error com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHandoff001#testTeamHandoff001 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
12 error com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHandoff002#testTeamHandoff002 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
13 error com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalMsgBus001#testTeamHierarchicalMsgBus001 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
14 error com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalMsgBus002#testTeamHierarchicalMsgBus002 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
15 error com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalTools001#testTeamHierarchicalTools001 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
16 error com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalTools002#testTeamHierarchicalTools002 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
17 error com.openjiuwen.test.cases.agent.react_agent.ReActAgent001Test#testReActAgent001 Failed to invoke agent
18 error com.openjiuwen.test.cases.agent.react_agent.ReActAgent004Test#testReActAgent004 Failed to invoke agent
19 error com.openjiuwen.test.cases.agent.react_agent.ReActAgent034Test#testReActAgent034 Failed to invoke agent
20 error com.openjiuwen.test.cases.agent.react_agent.ReActAgent042Test#testReActAgent042 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
21 error com.openjiuwen.test.cases.agent.react_agent.ReActAgent043Test#testReActAgent043 Failed to invoke agent
22 error com.openjiuwen.test.cases.agent.react_agent.ReActAgent098Test#testReActAgent098 Failed to invoke agent
23 failure com.openjiuwen.test.cases.agent.react_agent.mcp.ReActAgentMcp001Test#testReActAgentMcp001 Expecting actual:
24 error com.openjiuwen.test.cases.component.intent_detection_component.TestIntentDetectComponent001#testIntentDetectComponent001 component intent_detection_invoke call failed, reason: failed to invoke llm: Failed to connect to /127.0.0.1:8088
25 error com.openjiuwen.test.cases.component.intent_detection_component.TestIntentDetectComponent002#testIntentDetectComponent002 component intent_detection_invoke call failed, reason: failed to invoke llm: Failed to connect to /127.0.0.1:8088
26 error com.openjiuwen.test.cases.component.intent_detection_component.TestIntentDetectComponent003#testIntentDetectComponent003 component intent_detection_invoke call failed, reason: failed to invoke llm: Failed to connect to /127.0.0.1:8088
27 error com.openjiuwen.test.cases.component.questioner_component.TestQuestionerComponent001#testQuestionerComponent001 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
28 error com.openjiuwen.test.cases.component.questioner_component.TestQuestionerComponent002#testQuestionerComponent002 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
29 error com.openjiuwen.test.cases.component.questioner_component.TestQuestionerComponent003#testQuestionerComponent003 java.net.ConnectException: Failed to connect to /127.0.0.1:8088
30 error com.openjiuwen.test.cases.context_engine.processors.current_round_compressor.ContextCurrentRoundCompressor008Test#testContextCurrentRoundCompressor008 Missing required mock service: 127.0.0.1:8088 (start JiuwenTestJava/mock_service/mockllm/main.py before running tests)
31 error com.openjiuwen.test.cases.context_engine.processors.dialogue_compressor.ContextDialogueCompressor007Test#testContextDialogueCompressor007 Missing required mock service: 127.0.0.1:8088 (start JiuwenTestJava/mock_service/mockllm/main.py before running tests)
32 error com.openjiuwen.test.cases.context_engine.processors.round_level_compressor.ContextRoundLevelCompressor009Test#testContextRoundLevelCompressor009 Missing required mock service: 127.0.0.1:8088 (start JiuwenTestJava/mock_service/mockllm/main.py before running tests)
33 error com.openjiuwen.test.cases.runnner.others.TestRunnerWorkflowManager001#testRunnerWorkflowManager001 component llm_invoke call failed, reason: component llm_invoke call failed, reason: Failed to connect to /127.0.0.1:8088

根因分析

1. com.openjiuwen.test.cases.agent.agent_as_tool.TestAgentAsTool001#testAgentAsTool001

失败原因分类

环境问题

具体失败原因

测试用例调用 Runner.runAgent 触发 ReActAgent 执行,Agent 在 railedModelCall 中调用 LLM 时,OkHttp 连接 127.0.0.1:8088 被 Connection refused,导致 RuntimeException: Failed to invoke agent。Mock LLM 服务在 CI 环境中未启动。PR 改动不涉及 LLM 连接逻辑,非回归。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088Connection refused[RESET] Mock server reset attempt 1/2/3 failed: null — mock 服务从测试开始就不可达
  • 代码定位: 异常堆栈 OpenAiCompatibleModelClient.executeCall(OpenAiCompatibleModelClient.java:354)ReActAgent.railedModelCall(ReActAgent.java:470)
  • 其他: PR diff 无 LLM 连接或 OkHttp 相关改动

修复建议

确保 CI 环境在运行测试前启动 Mock LLM 服务(mock_service/mockllm/main.py 监听 127.0.0.1:8088)。参考 AGENTS.md 的 JiuwenTestJava Smoke Gate 步骤 3,启动所有五个 mock 服务并验证端口监听后再跑测试。

其他建议

此失败模式在全部 33 个用例中高度一致(均因 8088 端口不可达),建议 CI 流水线增加 mock 服务健康检查前置门禁,避免无效测试运行。


2. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent005#testRunAgent005

失败原因分类

环境问题

具体失败原因

Controller 进行意图检测时调用 LLM(127.0.0.1:8088),连接被拒绝。意图检测失败后 fallback 到首个 workflow,workflow 内 questioner 组件同样调用 LLM 失败,最终抛出 agent controller runtime error。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: Intent detection failed: Failed to connect to /127.0.0.1:8088, using first workflowcomponent questioner_invoke call failed, reason: failed to invoke llm for extraction
  • 代码定位: WorkflowEventHandler.executeRegisteredTask(WorkflowEventHandler.java:348)QuestionerDirectReplyHandler.invokeLlmForExtraction(QuestionerDirectReplyHandler.java:352)
  • 其他: PR diff 不涉及 workflow 或 questioner 组件逻辑

修复建议

同上——确保 CI 环境中 Mock LLM 服务(8088 端口)已启动并可达。

其他建议

意图检测 fallback 到首个 workflow 的行为掩盖了原始错误,测试断言未能区分"意图检测失败"与"workflow 执行失败",建议增强错误信息可观测性。


3. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent008#testRunAgent008

失败原因分类

环境问题

具体失败原因

与前序用例共享同一 sessionId=user_123 的 InMemoryCheckpointer 状态。前序用例(TestRunAgent005)在 LLM 不可达时异常退出但未清理 checkpointer 中的 workflow state,导致本用例尝试启动同 session 的 workflow 时触发 preWorkflowExecute 检查:workflow state exists but non-interactive input and cleanup is disabled。根因仍是 mock LLM 不可达造成的级联影响。

证据来源

  • 日志关键信息: pre workflow execute error, session_id=user_123, workflow=weather_flow, error='workflow state exists but non-interactive input and cleanup is disabled'
  • 代码定位: InMemoryCheckpointer.preWorkflowExecute(InMemoryCheckpointer.java:92)CompiledGraph.prepareExecution(CompiledGraph.java:98)
  • 其他: 前序用例 #​2(TestRunAgent005)已对 session user_123 创建了 workflow state,但因 LLM 不可达未能正常完成,残留的 state 未被清理

修复建议

  1. 确保_mock LLM 服务启动,消除根本原因。2. 作为防御措施,测试用例间应确保 sessionId 隔离或在 @BeforeEach 中清理 checkpointer 残留状态。

其他建议

InMemoryCheckpointer 是进程内全局共享的,测试用例复用 sessionId=user_123 会导致状态泄漏。建议测试框架在每条用例前强制 reset checkpointer 或使用唯一 sessionId。


4. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent009#testRunAgent009

失败原因分类

环境问题

具体失败原因

与 #​2 相同模式:Controller 调用 LLM 进行意图检测时 ConnectException: Failed to connect to /127.0.0.1:8088,导致 agent controller runtime error。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: WorkflowEventHandler.executeRegisteredTask(WorkflowEventHandler.java:348)
  • 其他: 同 #​2

修复建议

确保 Mock LLM 服务(8088 端口)启动。

其他建议

同 #​2 的通用建议。


5. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent011#testRunAgent011

失败原因分类

环境问题

具体失败原因

同 #​2/#4 模式:LLM 调用失败,ConnectException: Failed to connect to /127.0.0.1:8088

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​2
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


6. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent.TestRunAgent012#testRunAgent012

失败原因分类

环境问题

具体失败原因

同 #​2 模式:LLM 调用失败,ConnectException: Failed to connect to /127.0.0.1:8088

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​2
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


7. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming013#testRunAgentStreaming013

失败原因分类

环境问题

具体失败原因

流式模式下 Controller 调用 LLM 进行意图检测失败,ConnectException: Failed to connect to /127.0.0.1:8088。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​2
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


8. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming014#testRunAgentStreaming014

失败原因分类

环境问题

具体失败原因

同 #​7 模式:流式模式下 LLM 调用失败。

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​2
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


9. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming019#testRunAgentStreaming019

失败原因分类

环境问题

具体失败原因

同 #​7 模式:流式模式下 LLM 调用失败。

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​2
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


10. com.openjiuwen.test.cases.agent.multi_workflow_agent.run_agent_streaming.TestRunAgentStreaming020#testRunAgentStreaming020

失败原因分类

环境问题

具体失败原因

同 #​7 模式:流式模式下 LLM 调用失败。

证据来源

  • 日志关键信息: agent controller runtime error, reason: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​2
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


11. com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHandoff001#testTeamHandoff001

失败原因分类

环境问题

具体失败原因

多 Agent Team Handoff 测试中 LLM 调用失败,ConnectException: Failed to connect to /127.0.0.1:8088。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 堆栈指向 OpenAiCompatibleModelClient.executeCall
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


12. com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHandoff002#testTeamHandoff002

失败原因分类

环境问题

具体失败原因

同 #​11 模式:LLM 调用失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​11
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


13. com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalMsgBus001#testTeamHierarchicalMsgBus001

失败原因分类

环境问题

具体失败原因

层级式消息总线 Team 测试中 LLM 调用失败。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088[RESET] Mock server reset attempt 1/2/3 failed: null
  • 代码定位: 同 #​11
  • 其他: PR diff 中 DelegateTool.javaHierarchicalDelegateTool.java 在 pr_info.txt 变更文件列表中,但 pr_diff.txt 未包含其 diff;即便这些类有改动,失败根因仍是 mock 服务不可达而非代码逻辑变更

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


14. com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalMsgBus002#testTeamHierarchicalMsgBus002

失败原因分类

环境问题

具体失败原因

同 #​13 模式:LLM 调用失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​11
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


15. com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalTools001#testTeamHierarchicalTools001

失败原因分类

环境问题

具体失败原因

层级式工具 Team 测试中 LLM 调用失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​11
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


16. com.openjiuwen.test.cases.agent.mutli_agent.TestTeamHierarchicalTools002#testTeamHierarchicalTools002

失败原因分类

环境问题

具体失败原因

同 #​15 模式:LLM 调用失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​11
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


17. com.openjiuwen.test.cases.agent.react_agent.ReActAgent001Test#testReActAgent001

失败原因分类

环境问题

具体失败原因

ReActAgent 非流式调用 LLM 时连接 127.0.0.1:8088 被拒绝,抛出 Failed to invoke agent。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: java.lang.RuntimeException: Failed to invoke agent;Caused by: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: ReActAgent.railedModelCall(ReActAgent.java:470)OpenAiCompatibleModelClient.executeCall
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


18. com.openjiuwen.test.cases.agent.react_agent.ReActAgent004Test#testReActAgent004

失败原因分类

环境问题

具体失败原因

同 #​17 模式:ReActAgent 调用 LLM 失败。

证据来源

  • 日志关键信息: Failed to invoke agentConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​17
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


19. com.openjiuwen.test.cases.agent.react_agent.ReActAgent034Test#testReActAgent034

失败原因分类

环境问题

具体失败原因

同 #​17 模式:ReActAgent 调用 LLM 失败。

证据来源

  • 日志关键信息: Failed to invoke agentConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​17
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


20. com.openjiuwen.test.cases.agent.react_agent.ReActAgent042Test#testReActAgent042

失败原因分类

环境问题

具体失败原因

ReActAgent 流式调用 LLM 时连接失败。虽然 PR #​246 改了 ReActAgent 的流式输出路径(新增 writeAssistantStreamChunk 中 task_id 传播和 executeToolCallEntries 的流式分支),但失败发生在 LLM 连接层(OpenAiCompatibleModelClient.executeCall),早于任何流式输出逻辑。非 PR 改动引入的回归。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: OpenAiCompatibleModelClient.executeCall(OpenAiCompatibleModelClient.java:354)
  • 其他: PR diff 中 ReActAgent 的改动仅在 writeAssistantStreamChunk(task_id 传播)和 executeToolCallEntries(新增 agentSession 参数走流式分支),不影响 LLM 连接逻辑

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


21. com.openjiuwen.test.cases.agent.react_agent.ReActAgent043Test#testReActAgent043

失败原因分类

环境问题

具体失败原因

同 #​17 模式:ReActAgent 调用 LLM 失败。

证据来源

  • 日志关键信息: Failed to invoke agentConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​17
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


22. com.openjiuwen.test.cases.agent.react_agent.ReActAgent098Test#testReActAgent098

失败原因分类

环境问题

具体失败原因

同 #​17 模式:ReActAgent 调用 LLM 失败。

证据来源

  • 日志关键信息: Failed to invoke agentConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​17
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


23. com.openjiuwen.test.cases.agent.react_agent.mcp.ReActAgentMcp001Test#testReActAgentMcp001

失败原因分类

环境问题

具体失败原因

此用例是唯一的 [failure] 类型(断言失败而非异常)。测试期望流式输出包含 "22℃",但实际输出是 LLM 连接失败的日志文本(ReAct stream error (attempt 1/3), aborting retry: java.net.ConnectException: Failed to connect to /127.0.0.1:8088)。Mock LLM 服务未启动,Agent 无法调用 LLM 获取天气查询结果,流式输出仅包含错误日志。此外日志还显示 add resource failed, id=weather_tool_id, type=toolresource already exist,说明前序用例残留的 tool 资源未清理,但这是次要问题,主因仍是 mock LLM 不可达。

证据来源

  • 日志关键信息: 断言 Expecting actual: "ReAct stream error (attempt 1/3), aborting retry: java.net.ConnectException: Failed to connect to /127.0.0.1:8088 ..." to contain: "22℃"add resource failed, id=weather_tool_id, type=tool, error='resource already exist'
  • 代码定位: ReActAgentMcp001Test.testReActAgentMcp001(ReActAgentMcp001Test.java:223)ResourceMgr.innerAddResource(ResourceMgr.java:1227)
  • 其他: PR diff 不涉及 MCP 工具注册或 ResourceMgr.addTool 逻辑

修复建议

  1. 确保 Mock LLM 服务启动(消除主因)。2. 测试用例间应清理 ResourceMgr 全局状态(resource already exist 错误表明前序用例注册的 tool 残留)。

其他建议

resource already exist 是 Runner.resourceMgr 进程全局状态的典型泄漏问题。建议 MCP 测试用例在 @AfterEach 中主动移除已注册的 tool/MCP 资源,或在 @BeforeEach 中先清理再注册。


24. com.openjiuwen.test.cases.component.intent_detection_component.TestIntentDetectComponent001#testIntentDetectComponent001

失败原因分类

环境问题

具体失败原因

意图检测组件直接调用 LLM 进行意图分类,连接 127.0.0.1:8088 被拒绝。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: component intent_detection_invoke call failed, reason: failed to invoke llm: Failed to connect to /127.0.0.1:8088
  • 代码定位: ErrorHelper.createWithDetails(ErrorHelper.java:189)
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


25. com.openjiuwen.test.cases.component.intent_detection_component.TestIntentDetectComponent002#testIntentDetectComponent002

失败原因分类

环境问题

具体失败原因

同 #​23 模式:意图检测组件调用 LLM 失败。

证据来源

  • 日志关键信息: component intent_detection_invoke call failed, reason: failed to invoke llm: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​23
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


26. com.openjiuwen.test.cases.component.intent_detection_component.TestIntentDetectComponent003#testIntentDetectComponent003

失败原因分类

环境问题

具体失败原因

同 #​23 模式:意图检测组件调用 LLM 失败。

证据来源

  • 日志关键信息: component intent_detection_invoke call failed, reason: failed to invoke llm: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​23
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


27. com.openjiuwen.test.cases.component.questioner_component.TestQuestionerComponent001#testQuestionerComponent001

失败原因分类

环境问题

具体失败原因

Questioner 组件调用 LLM 提取参数时连接 127.0.0.1:8088 失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: QuestionerDirectReplyHandler.invokeLlmForExtraction
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


28. com.openjiuwen.test.cases.component.questioner_component.TestQuestionerComponent002#testQuestionerComponent002

失败原因分类

环境问题

具体失败原因

同 #​26 模式:Questioner 组件调用 LLM 失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​26
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


29. com.openjiuwen.test.cases.component.questioner_component.TestQuestionerComponent003#testQuestionerComponent003

失败原因分类

环境问题

具体失败原因

同 #​26 模式:Questioner 组件调用 LLM 失败。

证据来源

  • 日志关键信息: java.net.ConnectException: Failed to connect to /127.0.0.1:8088
  • 代码定位: 同 #​26
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


30. com.openjiuwen.test.cases.context_engine.processors.current_round_compressor.ContextCurrentRoundCompressor008Test#testContextCurrentRoundCompressor008

失败原因分类

环境问题

具体失败原因

测试在 @BeforeEach 阶段通过 ReactAgentBaseTest.requireMockLlmReachable 检查 8088 端口可达性,检查失败后直接抛出 IllegalStateException: Missing required mock service: 127.0.0.1:8088,未进入测试方法体。Mock LLM 服务未启动。

证据来源

  • 日志关键信息: Missing required mock service: 127.0.0.1:8088 (start JiuwenTestJava/mock_service/mockllm/main.py before running tests)
  • 代码定位: ReactAgentBaseTest.requireMockLlmReachable(ReactAgentBaseTest.java:47)ContextCurrentRoundCompressor008Test.java:74
  • 其他: 此用例有显式的 mock 服务前置检查,失败消息比其他用例更明确

修复建议

确保 Mock LLM 服务启动。

其他建议

这种显式前置检查模式值得推广——其他用例如果也加了 requireMockLlmReachable 检查,就不会产生冗长的 OkHttp 连接重试堆栈,失败消息更清晰。


31. com.openjiuwen.test.cases.context_engine.processors.dialogue_compressor.ContextDialogueCompressor007Test#testContextDialogueCompressor007

失败原因分类

环境问题

具体失败原因

同 #​29 模式:requireMockLlmReachable 检查失败。

证据来源

  • 日志关键信息: Missing required mock service: 127.0.0.1:8088
  • 代码定位: ReactAgentBaseTest.requireMockLlmReachable(ReactAgentBaseTest.java:47)ContextDialogueCompressor007Test.java:75
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

同 #​29 的建议。


32. com.openjiuwen.test.cases.context_engine.processors.round_level_compressor.ContextRoundLevelCompressor009Test#testContextRoundLevelCompressor009

失败原因分类

环境问题

具体失败原因

同 #​29 模式:requireMockLlmReachable 检查失败。

证据来源

  • 日志关键信息: Missing required mock service: 127.0.0.1:8088
  • 代码定位: ReactAgentBaseTest.requireMockLlmReachable(ReactAgentBaseTest.java:47)ContextRoundLevelCompressor009Test.java:75
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

同 #​29 的建议。


33. com.openjiuwen.test.cases.runnner.others.TestRunnerWorkflowManager001#testRunnerWorkflowManager001

失败原因分类

环境问题

具体失败原因

Workflow Manager 组件中 llm_invoke 组件调用 LLM 失败,ConnectException: Failed to connect to /127.0.0.1:8088

证据来源

  • 日志关键信息: component llm_invoke call failed, reason: component llm_invoke call failed, reason: Failed to connect to /127.0.0.1:8088
  • 代码定位: ErrorHelper.createWithDetails(ErrorHelper.java:186)
  • 其他: 无

修复建议

确保 Mock LLM 服务启动。

其他建议

无额外建议。


📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 775e2493c15b0ce3ff087086244a84f7b8e674f0

TASK STATUS DETAILS
CodeCheck ❌FAILED Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Maven Build ❌FAILED See CHECK tab

Comment thread src/main/java/com/openjiuwen/core/sysop/local/LocalShellOperation.java Outdated
@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 22f2fce9477cbd5f9ab5d1e5099bdb4130b730ac

TASK STATUS DETAILS
CodeCheck ❌FAILED Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: e605797b21ba010e7c82cc12979bcf58b7d0b2b5

TASK STATUS DETAILS
CodeCheck ❌FAILED Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Maven Build ✅SUCCESS See CHECK tab

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants