多轮上下文:对话记忆管理
多轮对话中,模型本身无状态,需由应用把历史消息传回上下文才能「记住」前文。受上下文窗口与成本限制,记忆管理是必须设计的一环。
是什么
常见三种策略:全量拼接(每次都把历史原样发送)、摘要压缩(把旧对话归纳成简短摘要)、显式状态(只保留关键槽位如订单号)。OpenAI 的对话接口即采用消息数组形式维护历史。
为什么重要
无记忆的模型会重复询问、前后矛盾;但无脑堆历史又会超出窗口并增加费用,还可能让模型被早期无关内容干扰。需要在连贯性与成本间取舍。
怎么做
用消息数组维护轮次:
[
{"role": "system", "content": "你是订票助手"},
{"role": "user", "content": "我要去北京"},
{"role": "assistant", "content": "好的,几号出发?"},
{"role": "user", "content": "下周一"}
]
注意点
- 长对话应定期摘要旧轮次,控制 token 用量。
- 只保留任务必需状态,减少噪声。
- 注意上下文窗口上限,超出会被截断丢信息。
小结
多轮上下文靠应用侧维护历史,通过全量、摘要或显式状态三种记忆策略在连贯性与成本间平衡,是会话类应用的基础工程。
参考与延伸阅读
- OpenAI 对话消息格式文档。已核验。https://platform.openai.com/docs/api-reference/chat/create
- Anthropic 提示工程:上下文管理。已核验。https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview
本文累计阅读 — 次