summaryrefslogtreecommitdiff
path: root/docs/rag_improvement_ideas.md
blob: f49a6b3fd9138724e551c89e3774090ae3f46862 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
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强制模型在响应前显式推理如何满足偏好