2.6 KiB
2.6 KiB
Modular RAG Pipeline — Evidence
代码证据
关键入口:
src/main/java/com/superbiz/agent/tool/LookupKnowledgeTool.javasrc/main/java/com/superbiz/agent/service/ToolInvocationRecorder.javasrc/main/java/com/superbiz/agent/dto/LookupResult.java
新增模块:
KnowledgeQueryTransformer:复用KnowledgeIndexService.analyzeQuery,把 L0 转成 query hints 和可选categoryFilter。KnowledgeDocumentRetriever:封装VectorSearchService.searchSimilarDocuments(query, topK, category),统一 filtered / unfiltered attempt。KnowledgeEvidencePostProcessor:归一化 L2、创建 evidence blocks、source dedup、规则 rerank、输出RerankTrace。KnowledgeContextPacker:按字符预算打包 evidence,保留 source/title/breadcrumb/hit reasons。LookupResultAssembler:统一组装 evidence-first result、no-evidence result、session dedup result。
设计证据
已有文档约束:
mvp/architecture/rag-architecture.md:RAG 应表达为可解释 pipeline,而不是一坨工具逻辑。mvp/architecture/retrieval-observability.md:L0 是 hint/explainability 层,L1 是语义检索主路径。devflow/glossary/CONTEXT.md:lookup_knowledge是显式 Agent evidence tool,tool_invocation是 trace / verifier / eval 的证据来源。
OpenSpec 对齐:
openspec/changes/modular-rag-pipeline/proposal.mdopenspec/changes/modular-rag-pipeline/design.mdopenspec/changes/modular-rag-pipeline/specs/rag-knowledge-retrieval/spec.mdopenspec/changes/modular-rag-pipeline/tasks.md
用户确认
- 一次到位做模块化 RAG,而不是只做小补丁。
- L0 不再作为事实证据兜底。
- filtered L1 不准时,MVP 降级为 raw query unfiltered L1 retry。
- 可以新增字段,并删除旧字段以换取后续流程清晰。
Review 发现
Review 中发现一个非阻塞但应修复的问题:
- 会话去重命中时,返回
found=false但仍带evidenceBlocks/contextPack,可能导致 Agent 重复消费同一份证据。
修复:
LookupResultAssembler.deduped清空可消费 evidence/context,只保留 message、trace、relevance hint 和 session domain memory。- 新增
LookupKnowledgeToolTest.sessionDedupDoesNotReturnConsumableEvidenceAgain。
非阻塞观察
MilvusConnectionTest仍直接依赖MILVUS_TOKEN环境变量;主配置中已有 token,但测试不读 Spring 配置。- 测试日志仍有 ANTLR 版本 warning,不影响测试通过。
- 控制台在部分命令输出中仍会出现中文编码显示问题,但源码按 UTF-8 读取时关键用户提示文本正常。