Query Rewrite

自动识别并优化模糊查询,提升RAG检索准确率。

已扫描
适合谁
AI助手开发者、RAG系统集成人员
不适合谁
代码生成任务使用者、非检索类应用开发者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @dabin0927/query-rewrite

Skill 说明

命令、参数、文件名以原文为准

Query Rewrite — RAG 检索预处理层

目的: 在多轮对话场景中,将模糊、代词指代或包含多重意图的查询改写为结构化的搜索关键词,以提升 RAG 的召回率。

核心能力:

  • ✅ 快速检测:判断查询是否需要改写
  • ✅ 6 种改写模式:自动识别并执行
  • ✅ 双路径搜索:原始查询 + 改写后查询同时检索
  • ✅ 去重与结果合并

🧠 改写检查清单

在调用任何检索工具(memory_searchwiki_search)或向量搜索前,请根据以下清单逐项检查当前查询:

检查项触发条件操作
🔴 代词包含 it/he/she/this/that/these/those改写 → 模式 3
🔴 隐含代词"all/everything" 指代多个实体改写 → 模式 3
🔴 比较类表达"which is better/difference/compare"改写 → 模式 2
🟡 语义不完整无上下文无法理解问题改写 → 模式 1
🟡 多个独立问题≥2 个独立问题改写 → 模式 4
🟡 反问句"surely not/could it be/impossible"改写 → 模式 5
🟢 过滤条件数值范围/属性筛选/排除条件改写 → 模式 6
⚪ 以上均不符合查询独立、完整且清晰直接搜索,无需改写
⚪ 自检改写结果与原查询无实质性差异不改写(防止过度改写)

📋 6 种改写模式

完整模板与示例请参见:references/rewrite-patterns.md

#模式触发条件操作示例
1上下文提取查询缺少主体/实体从最近 2-3 轮对话中提取实体"保修多久?" → "iPhone 15 Pro 保修期"
2比较歧义消除出现比较词 + ≥2 个候选对象扩展为 A vs B 格式"哪个更快?" → "PostgreSQL vs MongoDB 性能"
3代词消解包含代词或模糊指代替换代词;"all" 拆分为独立查询(最多 5 条)"它们都支持吗?" → ["A 支持 X", "B 支持 X", "C 支持 X"]
4多意图分解≥2 个独立问题拆分为子查询,共享主语"颜色?尺寸?价格?" → 3 个独立查询
5反问句识别符合反问句模式提取真实信息需求,转为肯定句查询"不会要一个月吧,对吧?" → "预计交付时间"
6条件提取存在过滤/限制条件重组为 主体+条件1+条件2+… 格式"低于 500 元适合女性的" → "礼物预算 500 女性"

多模式优先级

当一个查询触发多个模式时,按以下顺序执行:

反问句(5) → 代词消解(3) → 多意图分解(4) → 上下文提取(1) → 比较歧义消除(2) → 条件提取(6)

🔄 执行流程

用户查询
    │
    ▼
┌─────────────────┐
│ 检查清单        │ ← 逐项比对,耗时不超过 0.5 秒
└───────┬─────────┘
        │
   ┌────┴────┐
   │ 是否改写?│
   └────┬────┘
        │
   ┌────┴────────────────┐
   │ 是                  │ 否
   ▼                     ▼
┌──────────┐      ┌──────────┐
│ 执行改写  │      │ 直接搜索  │
│ 输出 1-N  │      │ 原始查询  │
│ 查询      │      └──────────┘
└────┬─────┘
     │
     ▼
┌────────────────────────────┐
│ 搜索:原始 + 改写后查询     │
│ memory_search(原始)         │
│ memory_search(改写_1)       │
│ memory_search(改写_2)...    │
└────────────┬───────────────┘
             │
             ▼
┌────────────────────────────┐
│ 合并 & 去重(降低得分)     │
│ 为每条结果标注来源          │
└────────────────────────────┘

⚠️ 关键规则

  1. 零改写原则 —— 无需改写时,直接搜索
  2. 意图保真 —— 改写不得改变用户原始意图,仅补充上下文
  3. 上下文范围 —— 默认从最近 2-3 轮对话中提取实体
  4. 改写增强而非替代 —— 原始查询始终参与检索
  5. 优雅降级 —— 若无法确定参考内容或意图,仍使用原始查询搜索,并标记 rewrite_skipped: true

📝 使用示例

示例 1:正常改写流程

上下文:用户之前问过 "iPhone 15 Pro 有哪些颜色?"
当前查询:"保修多久?"
↓ 检查清单:语义不完整 → 模式 1
↓ 改写:提取实体 "iPhone 15 Pro" → "iPhone 15 Pro 保修期"
↓ 搜索:memory_search("保修多久?") + memory_search("iPhone 15 Pro 保修期")
↓ 合并、去重、返回结果

示例 2:多意图分解

上下文:(无)
当前查询:"涂层机价格?保修?能定制吗?"
↓ 检查清单:多个问题 → 模式 4
↓ 改写:
  - "涂层机价格"
  - "涂层机保修"
  - "涂层机定制支持"
↓ 搜索:共 4 次(1 次原始 + 3 次改写)→ 合并、去重

示例 3:无需改写

上下文:(无)
当前查询:"企业级 CRM 系统架构设计文档"
↓ 检查清单:全部不满足 → 直接搜索
↓ memory_search("企业级 CRM 系统架构设计文档")

📎 资源

  • 改写模式参考references/rewrite-patterns.md

📝 更新日志

版本日期变更
v1.0.02026-07-23初始公开发布:支持 6 种改写模式、改写检查清单、渐进式加载(元数据与逻辑分离)
D
@dabin0927

已收录 1 个 Skill

相关推荐