先这样答
结论是:多轮对话不能只靠上下文窗口记忆,要把结构化会话状态外置存库。状态里至少包括槽位、已确认事实和任务进度。模型每轮对话都基于这份状态继续判断,避免状态只存在于不断变长的对话文本里。
百轮对话后,我会采用分层压缩。早期对话不再保留全部原文,而是摘要成事实卡。近期对话保留原文,方便模型理解当前语境。这样既能减少历史内容对上下文的占用,也能保留最近几轮的具体表达。
对金额、账户这类关键信息,我会做关键状态锚定。这些信息永不压缩,只保存为可直接引用的状态。模型需要历史细节时,再按需检索原始轮次。整体策略是状态外置、历史分层、关键字段固定、细节按需回捞。
面试官会怎么追问
-
「为什么不能直接把一百轮对话全部放进上下文窗口?」 上下文窗口不是会话状态的可靠存储位置。结构化状态需要单独存库,不能依赖窗口中的记忆。历史内容可以分层处理,近期保留原文,早期整理成事实卡。
-
「哪些内容可以压缩,哪些内容不能压缩?」 早期对话可以摘要成事实卡,近期对话保留原文。金额、账户类信息属于关键状态,不能压缩,只能固定保存并在需要时引用。
-
「摘要后模型还需要原始细节,怎么处理?」 不把所有细节都塞进当前上下文。模型判断需要哪段历史后,按需检索对应的原始轮次,再补充到当前对话中。
回答的坑
- 只说扩大上下文窗口,不说结构化状态外置,会遗漏槽位、已确认事实和任务进度的管理。
- 只做摘要而不保留关键状态和原始轮次,可能无法准确引用金额、账户类信息和历史细节。
同系列的题
—— 本题完 ——