Files
SuperBizAgent-java/mvp/issues/rag/rag-chunk-context-reconstruction.md

56 lines
2.3 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.
# RAG 切片上下文重建缺失
**状态**:待规划
**严重程度**:高
**发现时间**:2026-07-04
**范围**:知识库上传、切片、向量召回、Agent 上下文组装
---
## 现象
同一个 Markdown 章节在内容较长时会被拆成多个 chunk。当前检索命中其中一个 chunk 后,返回给 Agent 的主要是单个 chunk 内容,不会自动把同章节的前后片段、章节标题链路、相邻 chunk 一起恢复出来。
这会导致两个问题:
1. 命中片段只包含局部语义,缺少前置定义、约束条件或后续步骤。
2. 同章节被分段后,检索结果之间缺少可追溯的关联,Agent 不一定知道它们属于同一章节。
---
## 当前实现
- `DocumentChunkService` 会按 Markdown 标题建立 `title` 和 `breadcrumb`,再按段落累积切片。
- 超过阈值时仍会切断同一章节,只是尽量避免打断代码块和列表。
- `VectorIndexService` 会把 `chunkIndex`、`totalChunks`、`title`、`breadcrumb` 放入 metadata。
- `VectorSearchService` 查询 Milvus 后直接返回命中的 chunk,没有做相邻 chunk 扩展或 section 级聚合。
- `LookupKnowledgeTool` 消费 L1 结果时,也没有根据 `docId + chunkIndex + breadcrumb` 回补上下文。
---
## 影响
- RAG 回答容易漏掉同章节中的约束条件。
- 长流程类文档会被拆散,Agent 看到的是“片段证据”,不是“完整流程”。
- 面试解释中需要承认:当前系统有 metadata 基础,但还没有把它用于上下文重建。
---
## 建议修复
优先做命中后的上下文扩展:
1. L1 命中 chunk 后,按 `docId + chunkIndex` 拉取前后 N 个相邻 chunk。
2. 如果 metadata 中 `breadcrumb` 相同,允许扩展到同章节的多个 chunk。
3. 上下文打包时标记 `命中片段`、`前文`、`后文`,避免 Agent 把扩展内容误认为全部都是高置信命中。
4. 增加 token budget 控制,超过预算时优先保留命中 chunk 和标题链路。
---
## 相关文件
- `src/main/java/com/superbiz/agent/service/DocumentChunkService.java`
- `src/main/java/com/superbiz/agent/service/VectorIndexService.java`
- `src/main/java/com/superbiz/agent/service/VectorSearchService.java`
- `src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.java`