Files
Auto-Finance/.agents/docs/error-experience/2026-06-15-补充材料SSE立即读到旧result.json导致前端无消息.md
2026-06-15 10:39:01 +08:00

2.1 KiB
Raw Permalink Blame History

last_reviewed
last_reviewed
2026-06-15

补充材料提交后 SSE 立即读到旧 result.json 导致前端无消息

错误现象

  • 第二次补充材料提交后,前端没有任何消息显示
  • 状态栏不更新,聊天区无新增消息
  • 后台日志显示处理正常完成LLM 提取、校验、Bot 提交均成功)
  • 前端像是"卡住"了一样,没有报错也没有反馈

触发条件

  1. 第一轮处理或第一轮补充材料完成,result.json 已写入 session 目录
  2. 用户再次补充材料,触发新一轮处理
  3. 前端创建新的 SSE 连接到 /api/logs/<session_id>
  4. SSE 端点轮询时立即检测到旧的 result.json,直接发射 done 事件并关闭连接
  5. 前端断开 SSE但后台线程仍在执行新任务

根因

_run_agent_task 在每次任务启动时只清理了 llm_stream.log,未清理 result.jsonagent_events.log

# 修复前 - 只清理了 llm_stream.log
try:
    (session_dir / "llm_stream.log").unlink(missing_ok=True)
except Exception:
    pass

SSE 端点 (/api/logs/<session_id>) 在 generate() 中轮询检查 result.json 是否存在,一旦存在就发射 done 事件并 break 退出循环。旧的 result.json 未被清理,导致 SSE 连接在任务实际开始前就结束了。

修复

_run_agent_task 开头统一清理三个残留文件:

# 修复后 - 同时清理三个残留文件
for fname in ("llm_stream.log", "agent_events.log", pipeline_web.SESSION_RESULT_FILE):
    try:
        (session_dir / fname).unlink(missing_ok=True)
    except Exception:
        pass
  • llm_stream.log — LLM 流式日志
  • agent_events.log — Agent 事件日志(避免旧事件被重放)
  • result.json — 处理结果文件(避免 SSE 立即读到旧结果)

影响范围

所有使用 _run_agent_task 的端点均受影响:

  • /api/process/<session_id> — 初始处理
  • /api/agent/supplement/<session_id> — 补充文件
  • /api/agent/user-supplement/<session_id> — 文字补充
  • /api/agent/force-submit/<session_id> — 强制提交
  • /api/submit-financial/<session_id> — 手动财务提交