查询改写
Query Rewriting
结合对话上下文改写模糊查询,拆分多意图问题为独立子查询
子问题
1.如何判断查询是否需要上下文
2.如何拆分复合查询
3.如何保持改写后语义等价
4.如何平衡对话摘要的长度与信息完整性
5.如何防止领域特定术语被过度改写
6.如何处理改写后语义漂移的检测
各项目的解法1 solutions
Signals
横向对比
| 维度 | agentic-rag-for-dummies |
|---|---|
| 改写触发条件 | 每次查询前强制改写,无跳过机制 |
| 上下文来源 | 对话摘要(最近 6 轮,30-50 词) |
| 结构化输出 | Pydantic QueryAnalysis(3 字段) |
| 多问题拆分 | 最多 3 个子查询,Send 并行执行 |
| 失败处理 | 标记 is_clear=False,interrupt 等待澄清 |
| 领域术语保护 | Prompt 规则明确区分领域术语和通用指代 |
最佳实践
1.使用结构化输出定义改写结果
2.区分领域特定术语和通用指代
3.多问题拆分最多 3 个子查询
4.改写失败时标记为 unclear
5.用 Pydantic Field description 为 LLM 提供字段语义提示
6.改写成功后删除原始消息历史(RemoveMessage),避免污染子查询上下文
7.对话摘要只保留最近 N 轮,用 temperature=0.2 保证稳定性
8.澄清消息长度校验(≥10 字符),防止空响应