Skip to content

Chapter 14 · 多轮对话保真度

单轮 prompt 工程已被研究透了,但多轮对话还有大量未解问题:上下文爆炸、指令漂移、记忆遗忘。这一章给出现役方案。

Item 39:每 N 轮重注入关键约束

系统约束会随轮数被冲淡。

核心

Lost in ConversationarXiv:2505.06120)发现 8 轮以后模型对 system prompt 的依从性显著下降。修复方案:每 5-10 轮在用户消息前自动重注入关键约束("你是客服助手,禁止承诺退款")。

Things to Remember

  • 长对话每 N 轮重注入 system prompt 的关键约束。
  • 关键约束 ≠ 完整 system prompt——只重注入业务红线。
  • 监控指标:跨轮约束违反率。

Item 40:用 summary-then-continue 防上下文爆炸

200k 窗口也撑不住一周对话。

引子

随对话进行,上下文要么变长(成本爆炸 + Lost in Middle)要么被截断(关键事实遗忘)。MemGPT(arXiv:2310.08560)提出把 LLM 当 OS:上下文是 RAM,分页换入换出长期记忆。当对话历史超过阈值,用 LLM 总结历史 → 把摘要替换原文 → 长期记忆存入向量库供检索。

MemGPT 把内存分为 main context(高频访问、占 token 预算)和 external context(低频、按需检索)。这是 1970 年代 OS 虚拟内存对 LLM Agent 的直接复刻——模型自己执行 page_in / page_out 函数调用,把"哪些事实重要到该常驻上下文"的决策交给模型。

反例 vs 正例

python
# Bad — 上下文无限增长
messages = [system] + history + [user]  # history 超 100 轮直接爆

# Good — 摘要换入
if total_tokens(history) > 8000:
    summary = llm.summarize(history[:-10])  # 老的部分摘要
    history = [{"role": "system", "content": f"摘要:{summary}"}] + history[-10:]

Things to Remember

  • 对话历史超阈值时摘要替换,关键事实存入向量记忆。
  • 摘要必须保留实体名 / 数字 / 用户偏好等具体事实。
  • 长期记忆按 user_id 分桶——多租户应用必须隔离。

延伸阅读

  • MemGPTarXiv:2310.08560)—— 把 LLM 当 OS 来用:上下文是 RAM、向量库是磁盘,模型自己调用 page_in / page_out 函数管理记忆,突破上下文窗口的硬限制。
  • LongMemEvalarXiv:2410.10813)—— 长期记忆能力评测基准:覆盖信息抽取、多跳推理、时序更新、知识冲突、拒答五类任务,专门检验跨会话场景下的真实记忆表现。

Effective LLM