# RAG 使用 DocumentPostProcessor 做后处理 **状态**:待规划 **严重程度**:中 **发现时间**:2026-07-05 **范围**:检索后处理、去重、上下文打包、轻量 rerank --- ## 背景 当前检索结果返回给 Agent 前,主要依赖 `LookupKnowledgeTool` 自己拼接内容。系统还缺少统一的后处理阶段。 Spring AI RAG 流程中可以使用 DocumentPostProcessor 类能力,在文档进入模型上下文前做过滤、去重、压缩或 rerank。 --- ## 问题 当前检索后处理不足: 1. L1 topK 候选没有被充分利用。 2. 同文档或同章节结果可能重复。 3. 命中 chunk 后没有统一处理前后文扩展。 4. 证据块缺少统一格式,后续 verifier / evaluator 不容易复用。 --- ## 改造方向 建立一个轻量后处理链: ```text retrieved documents -> deduplicate -> optional neighbor / section expansion -> score / reason annotation -> token budget packing -> evidence blocks ``` 优先做规则型后处理,不急于引入 cross-encoder 或 LLM rerank。 --- ## 验收标准 - 同一个 docId/chunkIndex 不重复进入 Agent 上下文。 - 最终返回内容包含 source、title、breadcrumb、score、hitReason。 - 可以限制单次工具调用返回的最大 token 或最大字符数。 - 后处理前后的候选数量、去重数量、最终 evidence 数量记录到 `tool_invocation`。 --- ## 相关文件 - `src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java` - `src/main/java/com/superbiz/agent/service/VectorSearchService.java` - `src/main/java/com/superbiz/agent/service/DocumentChunkService.java` - `src/main/java/com/superbiz/agent/service/ToolInvocationRecorder.java`