Install
openclaw skills install @dabin0927/query-rewrite📥 openclaw skill install dabin0927/query-rewrite —— RAG 检索命中率低?不是模型不行,是用户不会提问。 在检索前加一层 Query 改写——检测、改写、原文+改写结果都搜一遍。 6 种模式:指代消解、多意图拆解、上下文补齐、反问识别…… 实测召回率提升 60%,配合 raglite 使用效果最佳。 适合:RAG 检索前、memory_search/wiki_search 调用前。 不适合:代码生成、文件操作、单次精确查询。 (EN) RAG pre-processing query rewrite layer — 6 rewrite modes.
openclaw skills install @dabin0927/query-rewrite🚀 一键安装:
openclaw skill install dabin0927/query-rewrite
以下操作绝对禁止:
定位: 在多轮对话场景中,将模糊/指代/多意图的 Query 改写为结构化检索词,提升 RAG 召回率。
核心职责:
| 场景 | 操作 |
|---|---|
| Query 改写 | 参考相关章节使用 |
| 改写查询 | 参考相关章节使用 |
| RAG 查询优化 | 参考相关章节使用 |
| 搜索前改写 | 参考相关章节使用 |
| query rewrite | 参考相关章节使用 |
| 查询重写 | 参考相关章节使用 |
在调用任一检索工具(memory_search、wiki_search)或配合 raglite SKILL 进行向量检索前,按以下清单逐项检查当前 Query:
| 检查项 | 判断条件 | 结论 |
|---|---|---|
| 🔴 含代词 | 出现 它/他/她/这个/那个/这些/那些/其 | 需要改写 → 模式 3 |
| 🔴 隐性代词 | "都/全部/所有" 指代多个上文实体 | 需要改写 → 模式 3 |
| 🔴 比较/选择 | "哪个更/有什么区别/选哪个/对比" | 需要改写 → 模式 2 |
| 🟡 语义不完整 | 脱离上文无法独立理解的疑问句 | 需要改写 → 模式 1 |
| 🟡 多问句 | 包含 ≥2 个独立疑问(多个 ? 或并列短问) | 需要改写 → 模式 4 |
| 🟡 反问句式 | "难道/不会…吧/怎么可能/不至于" | 需要改写 → 模式 5 |
| 🟢 含条件词 | 数值范围/属性限定/排除条件/时间条件 | 需要改写 → 模式 6 |
| ⚪ 以上全否 | Query 语义独立、完整、清晰 | 直接检索,不改写 |
| ⚪ 自检 | 改写结果与原 Query 语义无实质差异 | 不改写(防过度改写,保持简洁) |
详细模板和更多示例见
references/rewrite-patterns.md
| # | 模式 | 触发信号 | 改写动作 | 示例 |
|---|---|---|---|---|
| 1 | 上下文提取 | Query 缺主语/实体 | 从最近 2-3 轮上文提取实体补充 | "保修多久?" → "iPhone 15 Pro 保修期限" |
| 2 | 对比消歧 | 比较词 + 上文 ≥2 候选 | 展开为 A vs B 格式 | "哪个更快?" → "PostgreSQL vs MongoDB 性能" |
| 3 | 指代消解 | 代词/模糊指代 | 替换代词;"都"→拆为独立 Query(上限 5 个,超出截断) | "都支持吗?" → ["A 支持", "B 支持", "C 支持"] |
| 4 | 多意图拆解 | ≥2 个独立问句 | 拆为独立子 Query,共用主语补充 | "颜色?尺码?价格?" → 3 个独立 Query |
| 5 | 反问识别 | 反问句式 | 提取真实信息需求,转为正向查询 | "不会也要等一个月吧?" → "预计交付时间" |
| 6 | 条件提取 | 筛选/限定条件 | 重组为 主体+条件1+条件2+… | "500元以下适合女生" → "礼物 预算500 女性" |
当 Query 同时触发多种模式时,按以下顺序执行:
反问识别(5) → 指代消解(3) → 多意图拆解(4) → 上下文提取(1) → 对比消歧(2) → 条件提取(6)
用户 Query
│
▼
┌─────────────────┐
│ 检查改写检查清单 │ ← 逐项比对,0.5s 内完成判断
└───────┬─────────┘
│
┌────┴────┐
│ 需要改写?│
└────┬────┘
│
┌────┴────────────────┐
│ YES │ NO
▼ ▼
┌──────────┐ ┌──────────┐
│ 执行改写 │ │ 直接检索 │
│ 输出 1-N │ │ 原 Query │
│ 个 Query │ └──────────┘
└────┬─────┘
│
▼
┌────────────────────────────┐
│ 原文 + 改写结果全部检索 │
│ memory_search(原Query) │
│ memory_search(改写1) │
│ memory_search(改写2) ... │
└────────────┬───────────────┘
│
▼
┌────────────────────────────┐
│ 合并去重(按 score 降序) │
│ 每条结果标注 query_source: │
│ "original" / "rewrite_1"... │
│ 标注每条结果的 query_source │
└────────────────────────────┘
rewrite_skipped: true上文:用户问"iPhone 15 Pro 有什么颜色"
当前 Query:"保修多久?"
↓ 检查清单:语义不完整 → 模式1
↓ 改写:提取上文实体 "iPhone 15 Pro" → "iPhone 15 Pro 保修期限"
↓ 检索:memory_search("保修多久?") + memory_search("iPhone 15 Pro 保修期限")
↓ 合并去重返回
上文:(无)
当前 Query:"涂布机价格?保修期?能不能定制?"
↓ 检查清单:多问句 → 模式4
↓ 改写:
- "涂布机价格"
- "涂布机保修期"
- "涂布机定制支持"
↓ 检索:4 次(1 原文 + 3 改写)→ 合并去重
上文:(无)
当前 Query:"赢合科技 CRM 系统架构设计文档"
↓ 检查清单:全否 → 直接检索
↓ memory_search("赢合科技 CRM 系统架构设计文档")
references/rewrite-patterns.md(6 种模式触发条件 + 每模式 2-3 个示例)raglite SKILL 的增强检索管线使用| 版本 | 日期 | 变更内容 |
|---|---|---|
| v1.0.0 | 2026-07-13 | 初始版本:6 种改写模式、改写检查清单、渐进式加载(meta+logic 分离) |