Skip to content

[Bug] LLM 阶段 JSON 解析偶发失败,hybrid 模式回退规则引擎 #4

Description

@vbqx

测试场景

  • 测试日期: 2026-06-14
  • 环境: AGENT_MODE=hybrid · LLM_STAGE_RESEARCH=true · LLM_STAGE_DEBATE=true
  • 步骤:
    1. 启动 Streamlit,首次加载触发完整流水线
    2. 观察服务端日志中 LLM 阶段输出
    3. 在「LLM决策链」页查看阶段来源与 I/O 记录

发现的问题

首次 Streamlit 启动时,看多研究(bullish)阶段 LLM 调用失败:

WARNING | src.agents.llm.base | llm stage bullish failed: Unterminated string starting at: line 456 column 3 (char 6875)
  • hybrid 模式自动回退到规则引擎,流水线不中断(容错正常)
  • 但 LLM 研究阶段的价值降低,且 I/O 页可能记录截断/ malformed JSON
  • 后续 CLI 复跑时 bullish 阶段成功(89s),说明问题具有间歇性
  • 优先级: P1 — 影响 hybrid 模式核心能力

建议修复方案

  1. 增强 JSON 解析容错src/agents/llm/base.py):

    • json.loads 失败尝试修复常见截断(补全括号、去除 trailing comma)
    • 或使用 json_repair 等库做二次解析
  2. 流式响应完整性校验:

    • _stream_json_response 结束处检查 JSON 是否闭合
    • 不完整则自动重试(最多 1–2 次,指数退避)
  3. Prompt 约束:

    • 在 system prompt 中强调「返回紧凑 JSON,避免过长字符串」
    • 对 items 数组设置 max 条数限制
  4. 可观测性:

    • 解析失败时将原始响应写入 llm_io 的 error 字段(便于排查)
    • 在 UI 阶段来源 Banner 明确标注「LLM 失败 · 已回退规则」
  5. 验收标准:

    • 连续 5 次流水线运行,bullish/bearish/debate 阶段 JSON 解析成功率 ≥ 95%
    • 失败时 UI 与日志有明确回退原因

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority: highHigh prioritytestingTesting related

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions