Appearance
全量聊天记录
很多人第一次做 chatbot,最疑惑的不是模型怎么回,而是为什么每次请求都要把前面的对话重新带上。
这节课解决什么问题
- 为什么模型接口通常是无状态的
- chatbot 的短期记忆到底是怎么来的
- 为什么全量聊天记录会自然带出上下文问题
模型默认不会替你记住上次聊了什么
大多数模型接口,本质上都是“本次请求看本次输入”。
这意味着:
- 你不传历史
- 模型就看不到历史
所以 chatbot 的短期记忆,不是模型自己记住了,而是程序替它保存了消息历史,并在下一轮请求里重新发给它。
一个最直接的例子
如果上一轮是:
ts
{ role: 'user', content: '解释一下什么是闭包' }下一轮你只传:
ts
{ role: 'user', content: '那它和普通函数有什么区别?' }模型其实不知道这里的“它”指什么。
只有把前面的 system、user、assistant 都一起带上,模型才知道你在继续同一段对话。
这就是短期记忆的来源
chatbot 的短期记忆,本质上就是:
- 程序保存消息历史
- 下一轮请求时整段回填
- 模型基于这段历史继续回答
所以后面你会看到一个很现实的问题:
历史越长,输入越大;输入越大,越慢、越贵,也越容易被无关内容污染。
本节产物
- 一份最小 messages 历史样例
- 一份“带历史 / 不带历史”效果对比
- 一份短期记忆工作原理说明
课堂实作
- 同一个追问分别在“带历史”和“不带历史”下测试一次
- 手写一段三轮对话的 messages
- 观察哪一部分属于 system,哪一部分属于短期记忆
并入项目
这一课会直接变成后面所有多轮对话和 Agent Loop 的输入基础。
面试会怎么问
- 为什么 chatbot 每次都要传全量聊天记录
- 模型的短期记忆是怎么实现的
