你问 ChatGPT 一道开放题,它为什么总给"长得几乎一样"的三个答案?
- 关联论文:2602.00238
你有没有发现——
问 ChatGPT 一个没有标准答案的问题,比如"新手适合跑哪些越野路线"、"家庭聚会去哪好"、"怎么看 X 政策",你让它一次给三个不同建议,三条答得几乎一模一样?换几个 prompt、加几个 emoji、用不同的语言再问,答案还是那个味道?
你以为是模型"个性化做得好"。其实恰恰相反——它在做 RAG(检索增强生成)的时候,系统性地把多样性按下去了。
arXiv 2602.00238 提出的 DIVERGE 把这件事拆开看清楚了:
- 标准 RAG 在多解任务上,多样性只有理想值的 ~50%
- 加上 DIVERGE 之后,多样性提升约 2 倍,质量几乎不掉
- 它不碰模型权重、不依赖 logit、不依赖重训练——一个 prompt + agent 层的即插即用补丁
——一句话:用反思驱动的视角生成 + 视角条件化检索,把"答得不同"这件事从生成侧的随机性变成了检索侧的工程目标。
为什么 RAG 会"答得都像"
绝大多数 RAG 系统的训练目标都是:
"给用户最像 ground-truth 的那一个答案"。
这个目标在事实型问答("爱因斯坦哪年出生")、抽取式 QA("这段话里某某实体是谁")里没问题。但在真正开放的问题里——
- "新手适合跑哪些越野路线" → 答案空间本身是发散的,用户偏好、文化背景、体能状况完全不同;
- "家庭聚会去哪好" → 周末近郊 vs 长途旅行 vs 室内游乐场,都是合理答案;
- "怎么看 X 政策的不同声音" → 单一答案会系统性放大主流视角,边缘声音被压掉。
可当前 RAG 的现实是:就算检索回来的文档是多样的,生成出来的答案依然高度同质化。论文用一张非常直观的图演示了这个悖论:
| 输入 | 标准 RAG 输出 |
|---|---|
| 用户提问"几个不同视角的问题" | 三条几乎一模一样的回答 |
| 检索器返回的多份不同证据 | 生成端只取其中一份 |
作者把这个失败模式拆成三块,叫 C1 / C2 / C3:
- C1 单次生成偏差(Single-Answer Bias):单次生成层面,RAG 被训练成"给最确定的那一个",其他可能性被压制。
- C2 多样性未保留(Missing Diversity Preservation):多次生成层面,模型没有"我之前已经答过哪些视角"的记忆,每次都从同一池子里挑,结果是三条都像。
- C3 工程兼容性(Practical Compatibility):很多"提升多样性"的方法——解码温度、token-level logit 操作、DivPO 这种对齐训练——要么在 GPT-5 这类闭源模型上不可用,要么会显著拉低答案质量。
DIVERGE 要做的就是同时治这三块。
DIVERGE 怎么解决:用"视角"作为一等公民
DIVERGE 的方法可以用一句话概括:
用一个轻量级的"视角—证据—答案"记忆结构,把多轮 RAG 串成一个迭代循环,每一轮都基于"还没答过的视角"去生成新答案。
1) 反思驱动的视角生成(治 C1)
每轮生成前,让 LLM 先"反思"——根据历史已生成的视角集合 M 和当前问题 q,显式列出还没答过的潜在视角:
M = {"入门级山地路线", "城市周边自然系路线"}
new_viewpoints = Reflect(q, M)
= ["夜间城市骑行", "家庭亲子越野"] ← 新视角
这一步把"我应该回答什么"从隐式行为变成了显式可监督的中间产物。
2) 视角条件化 RAG(治 C2 + 让多样性真正落到检索层)
对每个候选新视角 v,构造视角条件化查询 q_v 去检索,得到证据 E_v;再用 LLM 基于 q_v + E_v 生成对应回答 a_v:
q_v = construct_query(q, v) # 把"夜间骑行"拼进去
E_v = retrieve(q_v) # 检索带"夜间骑行"语义的文档
a_v = generate(q, v, E_v) # 强制 evidence-grounded
这跟传统 RAG 把所有证据塞进同一个 prompt 让 LLM "自取"不一样——多样性来自检索的多样化,而不是生成时的随机性。这是论文最核心的工程洞察:把多样性问题从 LLM 的"软约束"提到检索器的"硬约束"。
3) 轻量级记忆 + 证据约束生成(治 C3)
DIVERGE 的状态只有 (M, A)——M 是已覆盖视角集合,A 是已生成回答集合。生成过程强制要求每条新回答都能在 E_v 里找到对应证据,避免"为了多样而瞎编"。
好处:不依赖 token-level logits、不依赖对齐训练,能在 GPT-5 这类不暴露 logit 的闭源模型上直接跑。这是 DIVERGE 区别于之前工作的最大工程优势。
算法骨架(简化)
def diverge(query, k=5, max_iters=K):
M = set() # 已覆盖视角
A = [] # 已生成回答
for t in range(max_iters):
# C1: 反思还没答过的视角
new_viewpoints = reflect(query, M)
if not new_viewpoints: break
# C2: 对每个新视角做 viewpoint-conditioned RAG
candidates = []
for v in new_viewpoints:
q_v = construct_query(query, v)
E_v = retrieve(q_v)
a_v = generate(query, v, E_v) # evidence-grounded
candidates.append((v, a_v, E_v))
# C3: 选与 M 差异最大、质量仍合格的回答
chosen = select_diverse_quality(candidates, M, A)
M.add(chosen.viewpoint)
A.append(chosen.answer)
if len(A) >= k: break
return A
实验结果:~2 倍多样性,质量几乎不掉
论文在两个真实世界开放域 benchmark 上做了对比:
- Infinity-Chat:开放对话场景
- IssueBench:争议性议题
| 方法 | Semantic diversity | Coverage diversity | Quality |
|---|---|---|---|
| 直接 prompting | 1.00×(基线) | 1.00×(基线) | 1.00(基线) |
| 标准 RAG | ~1.10× | ~1.15× | 1.02 |
| Prompt-based diversity SOTA | ~1.40× | ~1.45× | 0.93 ⚠️ |
| DIVERGE | ~2.00× | ~2.05× | 0.99 |
关键发现:
- 仅提高检索多样性(top-k 拉大、MMR)不能换来生成多样性——RAG 多样化必须发生在生成侧而非检索侧。
- 之前的 prompt-based 多样性 SOTA 能拉一点多样性,但代价是质量明显下降;DIVERGE 在两者之间画出了更好的 Pareto 曲线。
- 移除反思机制后多样性下降最显著——Reflection 是多样性提升的核心驱动。
跟之前的工作到底差在哪
| 维度 | 解码温度/top-p | 对齐方法(DivPO 等) | 检索多样化(MMR 等) | DIVERGE |
|---|---|---|---|---|
| 多样性提升 | 弱 | 中 | 很弱 | 强 |
| 质量损失 | 中 | 中 | 无 | 极小 |
| 闭源模型兼容 | 部分 | ❌ | ✅ | ✅ |
| 需要重训练 | 否 | 是 | 否 | 否 |
| 工程门槛 | 低 | 高 | 低 | 低 |
DIVERGE 不替换这些方法,而是作为生成侧的插件和它们互补。在你已经有标准 RAG 的情况下,插一个 diversity controller 就能拿到约 2 倍多样性。
几个上手就要面对的工程坑
论文没明说,但落地会碰到:
- Token 成本约 11×。每条查询 = 1 次 reflection + K 次 viewpoint-conditioned retrieval + K 次 generation。K=5 时,token 消耗约 11×。生产部署前必须做完整的 token 成本测算——尤其是高 QPS 系统。建议设 max_k=5,reflection 结果可缓存。
- Reflection 质量的不确定性。Reflection 是整个 pipeline 的"多样性驱动核心",但它由 LLM 自己生成——如果底座模型本身就有 diversity collapse,反思出来的"新视角"也会趋同。上线前必须做 Reflection 输出多样性的专项评测(用 Semantic diversity 指标)。
- Viewpoint-conditioned 查询构造的 Prompt 工程。
construct_query(query, v)怎么把原始问题 + 视角 v 拼成检索 query,这个 prompt 的质量直接决定检索召回率。论文未披露具体模板——这是工程复现的主要黑箱。先在自有语料上做 A/B 找最佳。 - Evidence-grounded 约束的边界。强制每条回答都能在 E_v 里找到证据,能防幻觉,但也会导致当某视角缺乏文档支撑时该视角被丢弃——尤其是小众观点、边缘话题。需要 fallback:低置信度生成 + uncertainty flag。
- 评测 pipeline 的隐性预算。Semantic diversity 和 Coverage diversity 需要额外 embedding 模型 + atomic viewpoint 抽取 LLM 调用,这部分成本不体现在 K 条回答里。建议异步离线跑,避免拖慢主请求链路。
- 多轮对话的持久化。M(已覆盖视角)和 A(已生成回答)需要持久化才能跨轮复用——Redis 或 PostgreSQL JSON 列都可以,并发写入要自己处理一致性。
工程优先级:Token 成本测算 > Reflection 多样性验证 > Prompt 模板优化 > 评测 pipeline 解耦 > 多轮持久化。
为什么这件事重要——AI 公平性就在这 2 倍里
你可能觉得"多样性"是个产品体验小事。但其实它是AI 公平性的具体表现:
- 主流视角的强化:当 RAG 检索端只命中主流媒体的报道、Wikipedia 主流词条、热门论坛帖子,生成端再怎么做"多样性 prompt" 都救不回来——多样性要从检索开始。
- 边缘声音的消音:少数族裔、女性、小众兴趣群体、非英语母语者的观点——当 RAG pipeline 把它们当作"该忽略的异常",你得到的就是一个看似中立的偏见放大器。
- 创造性工作的同质化:内容创作者、营销文案、剧本策划——当生成内容过早收敛,人类的创意也会被同质化输出拉平。
DIVERGE 把"epistemic collapse"(认知坍缩)这些理论担忧落到可观测指标上——Semantic diversity + Coverage diversity + Quality 三件套,可以在内部评测流水线里常态化跑,更早发现"上线后大家都答得差不多"的隐性退化。
谁该读这篇
- RAG 系统架构师:作为 diversity controller 的即插即用候选方案,思路可直接复用。
- AI 产品经理:理解"标准 RAG 答得都像"是产品差异化的具体抓手——用户能感知到的"AI 是不是真的懂我",多样性是关键一环。
- 关注 AI 公平性、文化多样性的研究者:把 DIVERGE 作为"在生成端实现多样性"的工程化样本。
- 开放域 / 对话系统研究者:复用它的 Semantic + Coverage + Quality 三角评估指标体系。
- 不适合:纯做事实型 QA、抽取式 QA、封闭式 RAG 评测的研究者——这个方法对他们价值有限。
一句话总结
RAG 不应该是"答得最像 ground-truth 的那一个",而应该是"把还没被答过的视角挨个答一遍"——而 DIVERGE 让你不需要碰 logit、不需要重训练、不损失质量就能做到这件事。
三个标题变体
- 你问 ChatGPT 一道开放题,它为什么总给"长得几乎一样"的三个答案?
- AI 答得都差不多不是你的错觉——RAG 系统性地把多样性按下去了,这篇论文给出 2 倍补救
- GPT-5 跑 RAG 也救不了"答得都像"——这篇论文用一个 prompt 层补丁把多样性拉到 2 倍
小红书风格卡片文案(可直接发布)
🤖 你问 ChatGPT 一道开放题,它为什么总给"长得几乎一样"的三个答案?
很多人以为是模型"个性化做得好"——其实恰恰相反,它在做 RAG(检索增强生成)的时候,系统性地把多样性按下去了 ⬇️
arXiv 2602.00238 的 DIVERGE 把这件事拆开看清楚了:
📌 标准 RAG 在多解任务上,多样性只有理想值的 ~50% 📌 加上 DIVERGE 之后,多样性提升约 2 倍,质量几乎不掉 📌 不碰模型权重、不依赖 logit、不需要重训练——一个 prompt + agent 层的即插即用补丁 ✨
🧠 为什么 RAG 会"答得都像":
绝大多数 RAG 系统的训练目标都是"给用户最像 ground-truth 的那一个答案"。这个目标在事实型问答没问题,但在真正开放的问题里——
- "新手适合跑哪些越野路线" → 答案空间本身是发散的
- "家庭聚会去哪好" → 周末近郊 / 长途旅行 / 室内游乐场都是合理答案
- "怎么看 X 政策的不同声音" → 单一答案会系统性放大主流视角,边缘声音被压掉
作者把这个失败模式拆成三块,叫 C1 / C2 / C3:
- C1 单次生成偏差:模型被训练成"给最确定的那一个"
- C2 多样性未保留:模型没有"我之前已经答过哪些视角"的记忆,每次都从同一池子里挑
- C3 工程兼容性:很多多样性方法(解码温度、logit 操作、DivPO 对齐训练)在 GPT-5 这类闭源模型上不可用
🔧 DIVERGE 怎么解决:用"视角"作为一等公民,三个机制:
1️⃣ 反思驱动的视角生成(治 C1): 每轮生成前,让 LLM 先"反思"——根据历史已生成的视角集合 M 和当前问题 q,显式列出还没答过的潜在视角。把"我应该回答什么"从隐式行为变成显式可监督的中间产物 🎯
2️⃣ 视角条件化 RAG(治 C2 + 让多样性真正落到检索层): 对每个候选新视角 v,构造视角条件化查询 q_v 去检索,得到证据 E_v;再用 LLM 基于 q_v + E_v 生成对应回答 a_v
q_v = construct_query(q, v) # 把视角拼进去
E_v = retrieve(q_v) # 检索带该语义的文档
a_v = generate(q, v, E_v) # 强制 evidence-grounded
多样性来自检索的多样化,而不是生成时的随机性——这是论文最核心的工程洞察 🚀
3️⃣ 轻量级记忆 + 证据约束生成(治 C3):
状态只有 (M, A)——M 是已覆盖视角集合,A 是已生成回答集合。强制每条新回答都能在 E_v 里找到证据,不依赖 token-level logits,能在 GPT-5 这类不暴露 logit 的闭源模型上直接跑 ✅
📊 实验结果:~2 倍多样性,质量几乎不掉
| 方法 | Semantic diversity | Coverage diversity | Quality |
|---|---|---|---|
| 直接 prompting | 1.00×(基线) | 1.00×(基线) | 1.00(基线) |
| 标准 RAG | ~1.10× | ~1.15× | 1.02 |
| Prompt-based diversity SOTA | ~1.40× | ~1.45× | 0.93 ⚠️ |
| DIVERGE | ~2.00× | ~2.05× | 0.99 |
📌 关键发现: - 仅提高检索多样性(top-k 拉大、MMR)不能换来生成多样性——RAG 多样化必须发生在生成侧而非检索侧 - 之前的 prompt-based 多样性 SOTA 能拉一点多样性,但代价是质量明显下降 - DIVERGE 在两者之间画出了更好的 Pareto 曲线
⚠️ 几个上手就要面对的工程坑:
- Token 成本约 11×。K=5 时 token 消耗约 11×。生产部署前必须做完整成本测算,设 max_k=5
- Reflection 质量的不确定性。如果底座模型本身就有 diversity collapse,反思出来的"新视角"也会趋同
- Prompt 工程是黑箱。论文未披露具体模板,先在自有语料上做 A/B 找最佳
- Evidence-grounded 边界。某视角缺乏文档支撑时该视角被丢弃——小众观点 / 边缘话题尤其
- 评测 pipeline 的隐性预算。Semantic diversity 和 Coverage diversity 需要额外 embedding + LLM 调用
- 多轮对话持久化。M 和 A 需要持久化才能跨轮复用(Redis / PG JSON 列)
💡 为什么这件事重要——AI 公平性就在这 2 倍里:
- 主流视角的强化:检索端只命中主流媒体 / Wikipedia / 热门帖子,生成端再怎么 prompt 都救不回来
- 边缘声音的消音:少数族裔 / 女性 / 小众兴趣群体 / 非英语母语者的观点被当作"该忽略的异常"
- 创造性工作的同质化:当生成内容过早收敛,人类的创意也会被同质化输出拉平
DIVERGE 把"epistemic collapse"这些理论担忧落到可观测指标上——更早发现"上线后大家都答得差不多"的隐性退化 👀
📎 论文 ID:2602.00238 💬 评论区:你用 AI 答开放题时,有没有碰到"三条都像"的尴尬?