简历审查Agent工程化收尾:模型坑位、线程安全、超时兜底与RAG预告
0. 上下文衔接
Day 6 完成了简历审查Agent的API层骨架:上传返回202、后台create_task+GC保护、轮询查询、图编排。但代码跑通和能上线之间还有一段距离,今天收尾处理一批工程化问题:
- DeepSeek V4模型的思考模式坑:换模型后结构化输出全部报错
- 图实例的线程安全:全局单例图在并发下State互相污染
- 临时文件清理:审查完PDF不删,磁盘迟早撑爆
- 轮询超时兜底:后台任务挂死时前端不能永远轮询
- DELETE和列表接口:补齐CRUD的最后两个接口
- 开发效率技巧:中间结果缓存避免每次调LLM
- 问题诊断节点完整实现:CoT+优先级排序+降级
- 第五章RAG预告:从线性Agent到带分支的检索增强系统
1. DeepSeek V4思考模式:换模型必踩的坑
1.1 问题现象
之前用的是deepseek-chat(V3),一切正常。当尝试切换到V4 Flash或V4 Pro时,结构化输出全部报错,with_structured_output返回的不是Pydantic对象而是字符串,retry两次都失败,最后走兜底。
1.2 根本原因
DeepSeek V4系列默认开启了"思考模式"(类似o1的推理链),模型在正式回答前会先输出一段<think>...</think>推理过程。这段推理文本不在Pydantic schema里,导致结构化输出解析失败: