检索组件优化方法
检索源优化
- 检索源数据结构处理
- 结构化数据(知识图谱、知识库标、CSV文件)
- 非结构化数据(语料库文本)
- 半结构化数据(PDF、Word、HTML等同时包含图片、表格、文本的数据)
- 文本格式转化、摘要生成、Text-2-SQL查询
- 检索粒度优化(从细到粗)
- 方法
- 工程实践:采用 Small-to-Big / Parent-Child 策略
- 用 sentence/小 chunk 做向量匹配(命中率高);
- 命中后返回所属大 chunk / document 给 LLM(上下文足)。
- 工程实践:采用 Small-to-Big / Parent-Child 策略
- 粒度
- Token
- Sentence
- Chunks
- Document
- 方法
- 检索源数据结构处理
索引优化
- chunk规则优化
- 制定合适的文本切割策略
- metadata优化
- 通过metadata字段附加检索信息,进行检索过滤
- 实践
- 基础字段:source、doc_id、title、section、page、date、author、doc_type。
- 业务字段:product_line、version、permission_level、language、tag。
- 派生字段:LLM 抽取的关键词、命名实体、问题类型、置信度。
- 使用方式:
- Filter Pushdown:先用 metadata 过滤候选集,再做向量检索(极大缩小搜索空间)。
- Self-Query Retriever:让 LLM 把 query 自动拆为"语义部分 + 过滤条件"。
- 示例
Query: "2024年之后发布的Angular性能优化文章" → semantic: "Angular性能优化" → filter: {date > 2024-01-01, tag: "performance"}
- 结构化索引
- 为文档建立层次结构,增强信息检索
- 层次化索引(Hierarchical Index):Doc → Section → Paragraph → Sentence,多级摘要 + 多级向量。
- 树状索引(RAPTOR):自底向上对 chunk 聚类 + 摘要,构建递归摘要树;检索可在不同层级跳跃。
- 知识图谱索引:把文档抽取为实体-关系图,支持图遍历检索。
- 多索引并存:同一份内容建多套索引(按摘要 / 按假问题 / 按原文),检索时多路召回后融合。
- 为文档建立层次结构,增强信息检索
- chunk规则优化
查询优化
- 查询扩展
- 将单一查询扩展为多个查询,丰富查询内容并提供更多上下文
- 查询转换
- 用转换后的查询替换用户原始查询进行检索,对齐文档语义
- Query Rewriting:把口语化、含上下文指代的 query 改写为标准检索式。
- HyDE(Hypothetical Document Embeddings):让 LLM 先生成"假设答案",用假答案的向量去检索(缩小 query-doc 语义鸿沟)。
- Step-Back Prompting:先抽象为上位概念问题再检索。
- 用转换后的查询替换用户原始查询进行检索,对齐文档语义
- 查询路由
- 根据不同的查询实体路由到不同的RAG管道,适用于涉及不同查询场景的多功能RAG系统
- 基于规则路由:正则 / 关键词匹配指定路由。
- 基于 LLM 分类路由:让 LLM 判断 query 类别(事实 / 统计 / 时效 / 代码 / 对话)。
- 基于向量路由(Semantic Router):把每条路由的描述向量化,匹配 query 最近的路由。
- 典型路由目标:
- 事实类 → 向量知识库
- 统计类 → SQL / 数据库
- 时效类 → Web Search
- 代码类 → 代码索引
- 闲聊类 → 直接 LLM
- 根据不同的查询实体路由到不同的RAG管道,适用于涉及不同查询场景的多功能RAG系统
- 查询扩展
Embedding优化
- Embedding 模型选型
- Embedding 模型微调
外部适配器
- 适配器选择
生成组件优化方法
- 检索内容筛选
- 检索内容重排
- 重新排列文档chunk,以突出和原查询最相关的结果
- 上下文选择/压缩
- 对检索文档内容进行筛选或提炼
- 检索内容重排
- LLM微调
- 使LLM具备特定领域知识,从而使输出对齐用户偏好
