LLMs Get Lost In Multi-Turn Conversation

1. Motivation(研究动机)

  • 现有评测与真实使用的错位:对话日志研究已表明用户指令经常 underspecified(信息不完整、分多轮逐步澄清),但主流 LLM 评测仍以 single-turn、fully-specified 为主——模型在“实验室式”一次性完整指令下得分很高,却缺少在“真实对话式”逐步披露约束下的系统证据。
  • 本文要回答的问题:在同一批底层任务上,若把完整指令改写成多轮逐步揭示的 sharded 形式,模型从 FULL(单轮完整)SHARDED(多轮欠指定) 的性能变化有多大?性能损失主要来自“能力上限(aptitude)”还是“跨随机种子的波动(unreliability)”?
  • 为何重要:多轮欠指定对话是 Chat 类产品的主形态;若模型在多轮中 过早给出终稿式答案、错误假设后无法纠偏,会直接伤害 用户体验、系统可靠性与产品采纳(论文亦讨论 novice 用户更难一次性给出完整需求)。

2. Idea(核心思想)

  • 核心洞见:用 sharded simulation 把高质量 single-turn benchmark 的完整指令拆成若干 shard,每轮最多揭示一个 shard,从而构造可控的 multi-turn underspecified 对话;在此设定下,multi-turn 相对 single-turn 的平均性能显著下滑(论文报告约 39%),且下滑主要由 unreliability 急剧上升 驱动,而非 aptitude 崩盘——即模型并非“完全不会做”,而是“很容易在错误轨迹上越走越偏、难以恢复”(get lost and don’t recover)。
  • 与常见 multi-turn 评测的差异:许多 prior work 的 multi-turn 更像 episodic 子任务串联(每轮子任务可相对独立打分);本文强调 underspecification:模型必须跨轮 融合尚未一次性给全 的信息才能完成同一生成任务,从而更贴近“用户边聊边补需求”的真实形态。

3. Method(方法)

3.1 实验框架总览(Simulator)

Figure 1 解读:该 teaser 对比了 fully-specified single-turnunderspecified multi-turn 的对话形态,并示意在 Aptitude–Unreliability 平面上,multi-turn 往往伴随 aptitude 适度下降unreliability 大幅上升。它对应论文对 “Lost in Conversation” 现象的总括:同一模型在更真实的对话披露节奏下会系统性变差,且变差不只是“平均变差”,还包含“同样条件下多次采样差异巨大”。

直觉段落(为何会走丢):当用户只给出一部分约束时,模型为“显得有用”往往会 补全缺失细节(assumptions)过早输出接近终稿的答案(premature answer attempt)。一旦这些假设与后续 shard 冲突,后续轮次里模型又倾向于 锚定自己上一轮的长输出,把“用户需求”和“自己编造/推导过的内容”搅在一起,导致 纠错成本高、轨迹发散;再叠加 T=1 的随机性,就会出现“有时很好、有时很差”的 高 unreliability

3.2 Sharding:从 fully-specified 到 sharded instructions

Figure 2 解读:论文用 GSM8K 风格示例说明 shard 1 通常承载 高层意图,后续 shard 逐步补充 背景、约束、关键数值 等;所有 shard 联合起来应与原始 fully-specified instruction 信息等价。该例子帮助读者建立“同一任务、两种输入形态”的对照,是后文 FULL vs SHARDED 对比的基础。

Sharding 流程解读:论文采用 半自动 sharding pipeline(附录 C 细节):先用 GPT-4o 生成/自检候选 shard,再由作者 人工审阅与修订,以保证 shard 集合满足形式化性质(附录 B 定义 valid sharded instruction 的 5 条性质,如信息覆盖、逐步揭示约束等)。每个任务最终约 90–120 条 sharded 指令(与原始 single-turn 指令配对),全量实验共 600 条指令。

3.3 多轮模拟器:User Simulator + Assistant + System(分类/抽取/评测)

Figure 3 解读:每一轮流程可概括为:User Simulator 揭示最多一个 shard(并自然语言改写以贴合对话);Assistant 自由生成回复;System 将 assistant 回复策略分类(clarification / hedging / answer attempt 等),若判定为 answer attemptAnswer Extractor 抽取可评测片段,再由 Task Evaluator 打分;正确则结束,否则继续直到 shard 耗尽或任务完成。User Simulator 在论文主实验中使用 GPT-4o-mini,并可访问完整 shard 集合与对话状态,用于选择“下一轮最自然揭示哪一个 shard”。

3.4 五种 simulation types(FULL / CONCAT / SHARDED / RECAP / SNOWBALL)

Figure 4 解读FULL 用原始完整指令单轮评测;SHARDED 是主设定(多轮逐步揭示);CONCAT 把 shards 以 bullet 形式拼回单轮,用来检验“性能下降是否主要来自 sharding 重述/信息损失”,论文发现 CONCAT 平均约为 FULL 的 95.1%,支持“主因不是 concat 重述本身,而是 multi-turn + underspecification”。RECAP / SNOWBALL 在后续实验中作为“重复/累积回顾用户侧信息”的干预手段(见结果与 Table 2)。

3.5 六个生成任务(Code / Database / Actions / Math / Data-to-text / Summary)

Figure 5 解读:任务覆盖编程与 NL 生成:Code(HumanEval & LiveCodeBench)、Database(Spider text-to-SQL)、Actions(BFCL API 调用)、Math(GSM8K)、Data-to-text(ToTTo)、Summary(Summary of a Haystack,长上下文多文档)。评测指标沿用原 benchmark:Code/DB/Actions/Math 以二元正确性为主并映射到 0–100;Data-to-textBLEUSummary 用论文中的 LLM-as-a-judge Joint Score(覆盖与引用/归因)。

3.6 Aptitude 与 Unreliability(核心度量)

对同一指令在固定 simulation type 下重复模拟 N 次,得到分数集合 (S={S_i}_{i=1}^{N})(每次 (S_i\in[0,100]))。论文定义:

并定义可靠性(与 unreliability 互换使用):

后文简记 AU。直观上:A 近似“最好那一档表现(上尾)”,U 刻画“最好与最差模拟运行之间的落差”。

Figure 6a 解读:论文用箱线图示意:aptitude 对应高分位(上须/上尾),unreliability 对应 90–10 分位间距 所描述的“跨随机种子波动幅度”。这解释了为何平均性能 (P) 的大幅下降可能主要来自“尾部变差 + 波动变大”,而不等于模型完全失去解题能力。

3.7 开源代码与实现映射(microsoft/lost_in_conversation)

Code reference: main @ ba6b9a21 (2025-06-23) — 以下伪代码与文件映射基于该 commit 的仓库状态

Paper 概念源码文件(相对仓库根目录)关键类/函数
主入口:选择 FULL/CONCAT/SHARDED 并并行跑对话run_simulations.pyrun_simulation()ConversationSimulatorFull / ConversationSimulatorSharded
Multi-turn 对话循环(user→assistant→system verify→eval)simulator_sharded.pyConversationSimulatorSharded.run()
Single-turn FULL/CONCAT(拼接 shard bullet)simulator_full.pyConversationSimulatorFull.run()
User Simulator(LLM JSON 输出下一回复 + 揭示 shard_id)user_agent.pyUserAgent.generate_response()prompts/user_agent.txt
System:策略分类 + answer span 抽取system_agent.pySystemAgent.verify_system_response()SystemAgent.extract_answer()
任务评测钩子(per-task evaluator)tasks/tasks.py(注册/分发)get_task()task.evaluator_function()

Simulator(SHARDED)— PyTorch/工程风格伪代码(对应 simulator_sharded.py 结构)

class ConversationSimulatorSharded:
    def run(self) -> tuple[bool, float | None]:
        shards = self.sample["shards"]
        while True:
            revealed = self._revealed_shard_ids()
            if len(revealed) == len(shards):
                break
 
            user_text, shard_id, _ = self.user_agent.generate_response(
                self.trace, self.sample, temperature=self.user_temperature
            )
            self.trace.append({"role": "user", "content": user_text})
            if shard_id != -1:
                self.trace.append({"role": "log", "content": {"type": "shard_revealed", "shard_id": shard_id}})
 
            assistant_msg = generate_chat(
                self.trace, model=self.assistant_model, temperature=self.assistant_temperature
            )
            self.trace.append({"role": "assistant", "content": assistant_msg})
 
            verdict, _ = self.system_agent.verify_system_response(self.trace)
            if verdict["response_type"] != "answer_attempt":
                continue
 
            extracted = self.system_agent.extract_answer(self.trace)
            metrics = self.task.evaluator_function(extracted, self.sample)
            is_correct = metrics.get("is_correct")
            score = metrics.get("score")
 
            if is_correct:
                return True, score

Sharding 数据形态(数据集侧)— 伪代码(对应 data/sharded_instructions_600.json schema)

sample = {
    "task_id": "sharded-...",
    "task": "code|database|actions|math|data2text|summary|translation",
    "shards": [{"shard_id": 1, "shard_text": "..."}, ...],
    # ... task-specific keys: tests, schema, references, etc.
}

Scoring(FULL/CONCAT)— 伪代码(对应 simulator_full.py

def run_full_or_concat(sample, *, concat: bool) -> tuple[bool, float | None]:
    system_msg = task.generate_system_prompt(sample)
    user_msg = (
        task.populate_concat_prompt(sample) if concat else task.populate_fully_specific_prompt(sample)
    )
    assistant_msg = generate_chat(
        [{"role": "system", "content": system_msg}, {"role": "user", "content": user_msg}],
        model=assistant_model,
        temperature=temperature,
    )
    extracted = system_agent.extract_answer(trace_from_messages(system_msg, user_msg, assistant_msg))
    metrics = task.evaluator_function(extracted, sample)
    return bool(metrics.get("is_correct")), metrics.get("score")

3.8 主结果图(FULL→SHARDED 的性能变化可视化)

Figure(性能变化图)解读:该图用于直观展示从 FULLSHARDED 的系统性下滑(论文在 Table 1 中给出逐模型逐任务的 (P) 明细;图中汇总表达“普遍受损”)。阅读时建议把它与 CONCAT≈0.951×FULL 的结论一起理解:下滑主要来自 多轮欠指定交互,而非单纯的“shard 文本改写”。

4. Experimental Setup(实验设置)

  • 数据与规模:6 个任务各 90–120 条 sharded 指令,共 600 条;主实验对 FULL / CONCAT / SHARDED 三种 simulation type,在 15 个模型上对每个 (model, instruction, simulation type) 重复 N=10 次采样,总计 >200,000 simulated conversations(论文摘要/正文)。温度默认 T=1(另附温度扫描实验,见 Table 3)。
  • Baseline 模型(15 个,论文列举):OpenAI:GPT-4o-mini, GPT-4o, o3, GPT-4.1;Anthropic:Claude 3 Haiku, Claude 3.7 Sonnet;Google:Gemini 2.5 Flash, Gemini 2.5 Pro;Meta:Llama 3.1-8B-Instruct, Llama 3.3-70B-Instruct, Llama 4 Scout;AI2:OLMo-2-13B;Microsoft:Phi-4;DeepSeek:Deepseek-R1;Cohere:Command-A。版本与接入细节见 Appendix H
  • 指标:平均表现 (P)、aptitude (A_{90})、unreliability (U^{90}_{10})(定义见 §3.6);并报告 RECAP/SNOWBALLTranslation 附加实验。
  • 成本:论文估计实验总成本约 $5,000(API 调用)。

5. Experimental Results(实验结果)

5.1 平均性能:Lost in Conversation((P))

  • FULL→SHARDED:论文指出比较 FULLSHARDED 时,每个模型在每个任务上都出现性能下降,跨任务平均降幅为 39%(“average degradation of -39%”)。
  • CONCAT 对照CONCAT 平均为 FULL95.1%,用于支持“主要损失来自 multi-turn underspecification,而非 sharding 重写本身”。较小模型在 CONCAT 上相对 FULL 的退化更明显(论文给出约 86–92% 量级的相对表现区间,用于说明其对 paraphrase/bullet 拼接更敏感)。
  • 补充:Translation(第 7 个任务,主表外)GPT-4o-miniFULL/CONCAT/SHARDED 的 BLEU 为 41.7 / 43.4 / 42.1GPT-4o35.9 / 38.5 / 40.9Table 4)。论文解释该任务的 multi-turn 形态更接近 episodic(逐句可局部完成),因此不呈现“走丢”模式。

说明:Table 1 给出每个模型在 6 个任务上 FULL/CONCAT/SHARDED 的 (P) 明细,并给出相对 FULL 的两列跨任务平均降幅;笔记不再逐格抄表以避免 OCR/排版顺序引入误差,建议以 PDF 原表为准做精确引用。

5.2 Aptitude vs Unreliability 分解((A) 与 (U))

Figure 6b 解读:在 single-turn 设定下,更高 aptitude 的模型往往 unreliability 更低;但在 SHARDED 设定下,aptitude 从 FULL 到 SHARDED 的平均下降约 16%,而 unreliability 平均上升约 112%(more than doubling),且强模型在 multi-turn 下也会进入“高 unreliability 平台”。这与论文对现象的定义一致:大幅 (P) 下滑主要来自 unreliability 飙升,而不是“模型完全不会做”。

5.3 Gradual sharding:从 2 个 shard 开始就“开始走丢”

Figure 6c 解读:在 31 条指令上把 shard 数从 2 扩到 8GPT-4oGPT-4o-mini),结果显示 只要进入 2-shard(两轮及以上) 的欠指定对话,就会出现“aptitude 小幅受损 + unreliability 大幅上升”的模式;论文据此强调:把信息一次性给全(1-shard / FULL) 对可靠性最关键。

5.4 机制与附加实验(论文归纳)

Figure(回答长度/冗长度相关图)解读Appendix F 将根因归纳为:(1) 过早给出完整答案尝试(2) 过度依赖先前错误尝试导致答案膨胀(3) 中间轮次信息利用不足(loss-of-middle)(4) 过度冗长引入更多假设;并指出 reasoning 模型 平均回复更长(约 +33%),可能放大假设与混淆。Figure 用于支撑“verbosity / bloated answer”与行为退化相关的讨论(以论文附录细节为准)。

RECAP / SNOWBALL(Table 2,四个任务子集均值)

ModelFULLCONCATSHARDEDRECAPSNOWBALL
GPT-4o-mini86.884.450.466.561.8
GPT-4o93.090.959.176.665.3

温度扫描(Table 3,(U^{90}_{10})):在 FULL/CONCAT 下降低 assistant temperature 可显著降低 U;但在 SHARDEDGPT-4o-mini 几乎不随 assistant temperature 改善可靠性,GPT-4o 也仅有 约 15–20% 量级的温和改善;即便 AT=0, UT=0U 仍可能维持在大约 30% 左右(论文讨论现代 LLM 在 T=0 仍非完全确定性)。

5.5 Limitations(作者自述,Section 9)

  • 自动化模拟不等于真实人类对话:对话结构偏理想化(例如每轮揭示信息、最终总会给全任务所需信息),且缺少真实对话中的挫折退出、术语误解、目标不可行等;作者认为观测到的退化可能是 低估
  • 任务范围:聚焦 analytical generation(编程/SQL/API/数学/表格描述/引用式摘要),未覆盖开放域创意写作等;创意评测本身仍不成熟。
  • 语言/模态:主要覆盖 英文文本;多语言与多模态对话外推需进一步研究。

5.6 结论(Conclusion)

在固定任务集上,multi-turn underspecified 对话会系统性拉低表现;现象核心是 可靠性崩溃式变差错误轨迹难以恢复,常见中介行为包括 早承诺终稿答案、错误假设、过度依赖历史错误输出。论文呼吁 LLM buildersmulti-turn reliability 与 aptitude 并列优化,并指出 仅靠降温度/简单 agent 式拼接 不足以解决 SHARDED 下的高 U