主题
文档入库中途失败、重复上传或版本更新异常时怎么处理?
题型:问题排查 · 需要体现任务状态机、幂等、版本发布和对账。
排查顺序
先根据 taskId 查看失败阶段和重试次数,再核对文档哈希、documentVersion、chunk 数、Embedding 模型版本以及 PostgreSQL 和 Milvus 中的记录。确认是解析器异常、模型限流、批次超限、网络超时、索引构建失败,还是发布状态没有切换。
处理方案
- 每个阶段输出可持久化结果,恢复时从最近成功阶段继续。
- 上传文件按内容哈希和业务文档 ID 判重,但允许同内容属于不同知识库。
- 新版本在后台构建,完整后原子发布;失败时旧版本继续服务。
- 删除与更新采用逻辑失效加异步清理,清理任务可重复执行。
- 结果未知的批次使用稳定 chunkId 查询后再决定补写。
复盘闭环
增加死信任务、阶段耗时、失败原因分布、双存储差异和长时间未发布任务告警,并准备按知识库或文档版本重建索引的运维入口。
易错点
- 自动重试所有失败会放大数据错误和外部限流。
- 失败后直接删除全部数据可能破坏仍在服务的旧版本。