name: 检索-搜索-编排 description: 当设计用于检索增强生成(RAG)系统中知识图谱查询的检索策略时使用。当用户提到检索策略、搜索编排、全局优先检索、局部优先检索、U形检索、查询分解、多跳推理、来源跟踪或GraphRAG中的引用时调用。提供检索模式选择、查询重写和来源设计。
目录
检索与搜索编排
这是什么?
设计用于检索增强生成(RAG)系统中知识图谱查询的检索策略。该技能涵盖针对不同查询类型的模式选择、复杂多跳问题的查询分解、排名和约束配置,以及来源跟踪,以确保每个生成的答案都可以追溯到其源证据。
工作流程
复制此检查清单 并逐步完成每个步骤:
- [ ] 1. 分析查询类型和需求
- [ ] 2. 选择检索模式
- [ ] 3. 设计查询分解策略
- [ ] 4. 配置排名和约束
- [ ] 5. 设计来源跟踪
- [ ] 6. 定义回退策略
- [ ] 7. 生成检索策略规范
步骤描述
步骤1:分析查询类型和需求
分类系统必须处理的查询。常见类别包括:
- 事实查找:单实体、单跳(例如,“法国的首都是什么?”)
- 探索性/主题性:需要跨多个实体聚合的广泛问题(例如,“这个文集中的主要主题是什么?”)
- 多跳推理:需要遍历多个关系的问题(例如,“哪些药物治疗由基因X引起的疾病?”)
- 时间查询:受时间范围限制或需要序列理解的问题
- 约束查询:带有类型或属性过滤器的问题(例如,“列出2020年后药物Y的所有临床试验”)
识别使用案例中这些查询类型的分布,以指导模式选择。
步骤2:选择检索模式
使用下面的检索模式选择指南为您的查询分布选择正确的方法。有关每种模式的详细实施指导,请参见 resources/methodology.md。
步骤3:设计查询分解策略
对于复杂查询,将其分解为可以独立解决然后聚合的子查询。方法包括LLM作为控制器分解、自问链和ReAct风格的交替推理和检索。有关详细信息,请参见下面的查询分解模式部分和 resources/methodology.md。
步骤4:配置排名和约束
定义如何对检索结果进行评分、排名和过滤:
- 嵌入相似度阈值
- 图距离惩罚
- 基于类型的预过滤器或后过滤器
- 置信度分数最小值
- 时间敏感数据的时间衰减函数
步骤5:设计来源跟踪
确保每一条检索到的信息都携带有关其来源的元数据。这包括源文档ID、提取时间戳、置信度分数和证据链构建。有关注释方法、置信度评分和LLM集成模式,请参见 resources/provenance-patterns.md。
步骤6:定义回退策略
设计当主要检索失败或返回不足结果时的处理方式:
- 迭代深化(扩展跳数)
- 查询松弛(逐步移除约束)
- 并行探索(同时尝试多种模式)
- 优雅降级(返回带有置信度指示符的部分结果)
步骤7:生成检索策略规范
使用下面的输出模板编译完整规范。
检索模式选择指南
| 模式 | 最适合 | 机制 | 权衡 | 章节参考 |
|---|---|---|---|---|
| 全局优先 | 广泛的主题查询、文集级摘要 | 社区检测、摘要索引的自顶向下遍历 | 高层次覆盖;可能遗漏具体细节 | 3.1 |
| 局部优先 | 以实体为中心的查找、邻域探索 | 种子实体链接、带嵌入门的1-2跳邻域扩展 | 对已知实体高精度;范围有限 | 3.2 |
| U形混合 | 需要广度和深度的复杂查询 | 从粗到细的双向搜索、自顶向下然后自底向上细化 | 最佳覆盖;更高的延迟和复杂性 | 3.3 |
| 查询分解 | 多跳推理、复合问题 | LLM将查询分解为子查询、顺序检索、聚合 | 处理复杂问题;取决于分解质量 | 3.4 |
| 时间性 | 时间限制或序列依赖的查询 | 时间切片过滤、情节窗口化、时间衰减排名 | 捕捉时间动态;需要时间元数据 | 3.5 |
| 约束引导 | 类型过滤或规则约束的查询 | 预过滤器 + 向量搜索、符号查询然后神经重排 | 减少搜索空间;需要良好类型的模式 | 3.6 |
选择启发式:从系统中主导的查询类型开始。如果查询混合,考虑将U形混合作为默认,并回退到专门模式。
查询分解模式
LLM作为控制器
LLM接收原始查询并生成子查询计划:
原始: “哪些药物治疗与BRCA1突变相关的疾病?”
子查询1: “哪些疾病与BRCA1突变相关?”
子查询2: “哪些药物治疗[来自子查询1的疾病]?”
聚合: 结合结果,去重,按证据强度排名
自问链
模型迭代地向自己提问后续问题,每次检索后:
问: “公司X和技术Y之间的关系是什么?”
后续1: “公司X生产什么产品?” -> 检索
后续2: “哪些产品使用技术Y?” -> 检索
后续3: “X和Y提供商之间存在哪些合作伙伴关系?” -> 检索
合成: 将所有检索到的证据合并为最终答案
ReAct模式
交替推理和检索操作:
思考: 我需要找到实体A和实体C之间的连接
操作: 在KG中搜索A和C之间的路径(最多3跳)
观察: 通过关系R1和R2找到路径A -> B -> C
思考: 我应该用支持证据验证此路径
操作: 检索边A-B和B-C的源文档
观察: 边A-B由[doc1, doc2]支持,边B-C由[doc3]支持
答案: A通过B连接到C,由3个源文档支持
工具增强检索
生成正式查询(Cypher, SPARQL)进行结构化图遍历:
LLM生成: MATCH (d:药物)-[:治疗]->(dis:疾病)<-[:引起]-(g:基因 {name: 'BRCA1'})
返回 d.name, dis.name, g.name
在图数据库中执行
用LLM后处理结果以获得自然语言答案
输出模板
# 检索策略规范
## 系统上下文
- **领域**: [例如,生物医学、法律、金融]
- **知识图谱类型**: [例如,属性图、RDF、混合]
- **主要查询类型**: [列出主导查询类别]
- **规模**: [近似节点/边计数、查询量]
## 检索模式
- **主要模式**: [从指南中选择的模式]
- **理由**: [为什么此模式适合查询分布]
- **次要/回退模式**: [如果适用]
## 查询分解
- **策略**: [LLM作为控制器 / 自问 / ReAct / 工具增强 / 无]
- **最大子查询**: [每个原始查询的限制]
- **聚合方法**: [并集 / 交集 / 排名合并 / LLM合成]
## 排名与约束
- **相似度阈值**: [最小嵌入相似度分数]
- **最大跳距离**: [最大图遍历深度]
- **类型过滤器**: [实体/关系类型约束]
- **时间约束**: [时间窗口、衰减函数]
- **置信度最小值**: [包含的最小源置信度]
## 来源设计
- **注释方法**: [元数据字段 / 证据节点 / 命名图 / 具体化]
- **置信度评分**: [源可靠性层级、聚合规则]
- **引用格式**: [内联 / 事后 / 两者]
- **冲突解决**: [时间戳优先级 / 源权威性 / LLM裁决]
## 回退策略
- **主要回退**: [迭代深化 / 查询松弛 / 并行探索]
- **最大重试深度**: [回退尝试次数]
- **降级策略**: [带有置信度的部分结果 / 明确不确定性 / 升级]
## 评估标准
- 参考: `resources/evaluators/rubric_retrieval.json`
- **目标分数**: [最小可接受加权分数]