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

60 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.json``agent_events.log`
```python
# 修复前 - 只清理了 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` 开头统一清理三个残留文件:
```python
# 修复后 - 同时清理三个残留文件
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>` — 手动财务提交