缺陷 #38(验收 §4):任务在最早阶段(pipeline 日志出现前)抛出无消息异常,
mineru API 侧 task.error 空串 → CLI 拼出空 message;API 异常日志打向 stdout
被块缓冲,CLI 失败后立即杀 API 进程,真因永久丢失。
修复(agent/methodology 与 agent/legacy-rag 两处同改):
- build_mineru_runtime 的 env 注入 PYTHONUNBUFFERED=1(子进程异常日志即写即落)
- returncode≠0 且 job.log 无 doc_analyze_streaming 行 = 启动期失败 → 自动重试
1 次(stdout 追加同一 job.log,日志留 [retry] 标记,重试块含重复启动命令行)
- 重试仍失败且仍无 pipeline 行 → status failed + 中文可读错误
「提取启动阶段失败(重试后),可能受主机 GPU/显示重配置干扰,请重试」,
附 job.log 原始错误尾部
- 已有 pipeline 行的中途失败不得触发重试,走原错误路径(含 CUDA OOM 中文错误)
测试:agent/{methodology,legacy-rag}/api/test_mineru_retry.py(两树 8 用例):
env 含 PYTHONUNBUFFERED;首败无 pipeline 行 → 重试;重试仍败 → 中文可读错误;
有 pipeline 行失败 → 不重试;json 直投跳过 mineru 段不重试;G6-2 边界。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
agent/ —— 底层服务三件套
| 目录 | 服务 | 端口 | 入口(白名单明文) | conda |
|---|---|---|---|---|
| qa/ | QA V1.1.73 断言锚定检索 | 8091 | scripts/qa_v1_1_73_server.py | plantai-rag-new-venv |
| methodology/ | Methodology 提取 | 8092 | scripts/methodology_server.py | plantai-rag-new-venv |
| legacy-rag/ | 旧路由族(app 3 路由/main 11 族) | 8093 | api/app.py | plantai-rag-new-venv |
| vendor/ | 共享源码池(非服务) | — | — | — |
约束:仅 shell 启动(scripts/{start,stop,status,restart}.sh);编译产物 .so 隐藏源码;compile.manifest 记录模块级白名单。vendor 为源码单份,编译时复制进各 agent 暂存目录。