summaryrefslogtreecommitdiff
path: root/docs/rag_improvement_ideas.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/rag_improvement_ideas.md')
-rw-r--r--docs/rag_improvement_ideas.md238
1 files changed, 238 insertions, 0 deletions
diff --git a/docs/rag_improvement_ideas.md b/docs/rag_improvement_ideas.md
new file mode 100644
index 0000000..f49a6b3
--- /dev/null
+++ b/docs/rag_improvement_ideas.md
@@ -0,0 +1,238 @@
+# RAG Retrieval Improvement Ideas
+
+> 记录日期: 2026-02-07
+> 当前状态: RAG方法成功率52.2%,超时率41.4%,E/T 0.193
+> 目标: 降低超时率至接近Reflection的25.9%
+
+## 与Reflection Baseline的差距分析
+
+| 指标 | RAG (topk5) | Reflection | 差距 |
+|------|-------------|------------|------|
+| 成功率 | 52.2% | 45.2% | +7.0% ✓ 领先 |
+| 超时率 | 41.4% | 25.9% | +15.5% ✗ 落后 |
+| E/T | 0.193 | 0.162 | +0.031 ✗ 落后 |
+
+**核心问题**: 超时率高,agent未能在max_turns内满足用户偏好
+
+---
+
+## A. 检索质量优化 (Retrieval)
+
+### A1. Query Expansion ✅ 已实现
+- **状态**: 已实现,enable_query_transform=True
+- **当前方案**: 检测任务类型(math/coding/writing/explanation),添加前缀 "user preferences for {type} tasks"
+- **Bug修复**: 2026-02-07 修复了词边界匹配问题("api"误匹配"capital")
+- **待验证**: 需要实验验证效果
+
+### A2. Preference Embedding优化
+- **问题**: 当前直接embed "When X, do Y" 格式的完整句子
+- **改进方案**:
+ - 同时embed多个变体: action-only, condition-only, paraphrased
+ - 存储时创建多个embedding,检索时取最高分
+- **实现难度**: 中
+- **预期收益**: 提高检索召回率
+
+### A3. 动态TopK
+- **问题**: 固定topk可能过多(引入噪声)或过少(遗漏重要偏好)
+- **实验结果**:
+ - topk=3: 成功率42.2%, 超时率57.7% ❌ 更差
+ - topk=5: 成功率52.2%, 超时率41.4% (基线)
+ - topk=8: 实验中...
+- **改进方案**: 基于rerank分数动态决定
+ - 如果top-1分数 > 0.8,只取top-3
+ - 如果top-1分数 < 0.5,取top-8
+- **实现难度**: 低
+- **预期收益**: 中
+
+### A4. Negative Filtering
+- **问题**: reranker可能给不相关偏好较高分数
+- **改进方案**:
+ - 添加分数阈值,过滤低于阈值的偏好
+ - 或训练一个二分类器判断相关性
+- **实现难度**: 低-中
+- **预期收益**: 减少噪声干扰
+
+---
+
+## B. Prompt Engineering
+
+### B1. 偏好优先级标注 ⭐ 高优先级
+- **问题**: 所有偏好平等列出,模型不知道哪个更相关
+- **改进方案**:
+ ```
+ ## Highly Relevant Preferences (rerank > 0.7)
+ - [preference 1]
+ - [preference 2]
+
+ ## Possibly Relevant Preferences
+ - [preference 3]
+ ```
+- **实现难度**: 低(只改prompt构建逻辑)
+- **预期收益**: 中-高
+
+### B2. 偏好分类呈现
+- **问题**: 混合不同类型的偏好可能造成混淆
+- **改进方案**:
+ ```
+ ## Format Preferences
+ - Use bullet points
+ - Include code blocks with language
+
+ ## Content Preferences
+ - Show step-by-step derivation
+ - Provide examples
+ ```
+- **实现难度**: 中(需要偏好分类器)
+- **预期收益**: 中
+
+### B3. 显式推理步骤 ⭐ 高优先级
+- **Reflection的优势**: 强制模型输出 `user_preferences_reasoning` 字段
+- **改进方案**:
+ ```
+ Before responding, briefly consider:
+ 1. Which of the above preferences are relevant to this request?
+ 2. How will you satisfy each relevant preference?
+ Then provide your response.
+ ```
+- **实现难度**: 低(只改prompt)
+- **预期收益**: 高
+
+### B4. 偏好Checklist验证 ⭐ 高优先级
+- **问题**: 模型可能忘记某些偏好
+- **改进方案**:
+ ```
+ # Response Checklist
+ Before finalizing your response, verify:
+ □ [preference 1 - brief description]
+ □ [preference 2 - brief description]
+ ```
+- **实现难度**: 低
+- **预期收益**: 中-高
+
+### B5. Few-shot示例
+- **改进方案**: 在prompt中添加一个"正确遵循偏好"的示例
+- **实现难度**: 低
+- **预期收益**: 中
+- **风险**: 增加context长度
+
+---
+
+## C. 偏好提取优化 (Extraction)
+
+### C1. 更细粒度的偏好
+- **问题**: 当前偏好可能太粗略 "When coding, use Python"
+- **改进方案**: 分解为多个具体偏好
+ - 编程语言: Python
+ - 代码格式: 单个可复制块
+ - 注释风格: 内联注释
+- **实现难度**: 中(需要改extractor prompt)
+- **预期收益**: 提高检索精度
+
+### C2. 偏好置信度利用
+- **问题**: 低置信度偏好可能是噪声
+- **改进方案**:
+ - 存储时记录置信度
+ - 检索时作为额外权重
+- **实现难度**: 低
+- **预期收益**: 低-中
+
+### C3. 冲突检测
+- **问题**: 用户可能有矛盾的偏好(如"简洁" vs "详细")
+- **改进方案**:
+ - 检测语义矛盾
+ - 保留更新的偏好
+ - 或在prompt中明确指出冲突
+- **实现难度**: 高
+- **预期收益**: 中
+
+---
+
+## D. 反馈循环优化 (Feedback Loop)
+
+### D1. 违规偏好标记
+- **问题**: 不知道哪个偏好导致用户enforce
+- **改进方案**:
+ - 当用户enforce时,用小模型分析是哪个偏好被违反
+ - 下次检索时boost该偏好权重
+- **实现难度**: 中-高
+- **预期收益**: 高
+
+### D2. 会话内Correction记忆 ⭐ 中优先级
+- **问题**: 同一session内用户的correction可能被忽略
+- **改进方案**:
+ - 记录用户的每次correction
+ - 在后续turn中作为高优先级偏好
+ - 临时存储,session结束后清除
+- **实现难度**: 中
+- **预期收益**: 中-高
+
+### D3. 偏好验证 (Self-Critique)
+- **问题**: 模型可能生成不符合偏好的响应
+- **改进方案**:
+ - 生成后用小模型/规则检查是否符合偏好
+ - 不符合则重新生成或修正
+- **实现难度**: 高
+- **预期收益**: 高
+- **风险**: 增加延迟
+
+---
+
+## E. 架构改进
+
+### E1. 两阶段生成
+- **方案**:
+ 1. 阶段1: 生成内容大纲/要点
+ 2. 阶段2: 根据偏好润色格式
+- **实现难度**: 高
+- **预期收益**: 未知
+
+### E2. 混合方法 (Reflection + RAG)
+- **方案**:
+ - 使用Reflection的session-end notes作为长期记忆
+ - 使用RAG检索相关偏好作为短期记忆
+ - 两者结合注入prompt
+- **实现难度**: 高
+- **预期收益**: 未知(可能是最优解)
+
+---
+
+## 实验记录
+
+### 已完成实验
+
+| 实验名 | 配置 | 成功率 | 超时率 | E/T | 备注 |
+|--------|------|--------|--------|-----|------|
+| rag_prompt_priority | topk=5, prompt改进 | 52.2% | 41.4% | 0.193 | 基线 |
+| rag_topk3_test | topk=3 | 42.2% | 57.7% | 0.191 | ❌ 更差 |
+
+### 进行中实验
+
+| 实验名 | 配置 | 状态 |
+|--------|------|------|
+| rag_topk8_test | topk=8 | 运行中 |
+
+---
+
+## 快速实验建议
+
+按实现难度和预期收益排序:
+
+1. **[B3] 显式推理步骤** - 只改prompt,高收益
+2. **[B4] 偏好Checklist** - 只改prompt,中-高收益
+3. **[B1] 偏好优先级标注** - 小改动,中-高收益
+4. **[D2] 会话内correction记忆** - 中等改动,中-高收益
+5. **[A3] 动态TopK** - 小改动,中收益
+
+---
+
+## 参考: Reflection vs RAG 对比
+
+| 特性 | Reflection | RAG (我们的) |
+|------|------------|-------------|
+| 偏好呈现 | 自然语言notes | 结构化bullet list |
+| 推理步骤 | ✓ 显式 user_preferences_reasoning | ✗ 无 |
+| 输出格式 | JSON with reasoning | 纯文本 |
+| 反馈循环 | session-end reflection | 实时extraction |
+| 检索方式 | LLM-based (proper_scaffolding) | Dense + Rerank |
+
+**关键差异**: Reflection强制模型在响应前显式推理如何满足偏好