Skip to content

全量聊天记录

很多人第一次做 chatbot,最疑惑的不是模型怎么回,而是为什么每次请求都要把前面的对话重新带上。


这节课解决什么问题

  • 为什么模型接口通常是无状态的
  • chatbot 的短期记忆到底是怎么来的
  • 为什么全量聊天记录会自然带出上下文问题

模型默认不会替你记住上次聊了什么

大多数模型接口,本质上都是“本次请求看本次输入”。

这意味着:

  • 你不传历史
  • 模型就看不到历史

所以 chatbot 的短期记忆,不是模型自己记住了,而是程序替它保存了消息历史,并在下一轮请求里重新发给它。


一个最直接的例子

如果上一轮是:

ts
{ role: 'user', content: '解释一下什么是闭包' }

下一轮你只传:

ts
{ role: 'user', content: '那它和普通函数有什么区别?' }

模型其实不知道这里的“它”指什么。

只有把前面的 system、user、assistant 都一起带上,模型才知道你在继续同一段对话。


这就是短期记忆的来源

chatbot 的短期记忆,本质上就是:

  1. 程序保存消息历史
  2. 下一轮请求时整段回填
  3. 模型基于这段历史继续回答

所以后面你会看到一个很现实的问题:

历史越长,输入越大;输入越大,越慢、越贵,也越容易被无关内容污染。


本节产物

  • 一份最小 messages 历史样例
  • 一份“带历史 / 不带历史”效果对比
  • 一份短期记忆工作原理说明

课堂实作

  • 同一个追问分别在“带历史”和“不带历史”下测试一次
  • 手写一段三轮对话的 messages
  • 观察哪一部分属于 system,哪一部分属于短期记忆

并入项目

这一课会直接变成后面所有多轮对话和 Agent Loop 的输入基础。

面试会怎么问

  • 为什么 chatbot 每次都要传全量聊天记录
  • 模型的短期记忆是怎么实现的

大齐 AI 课堂 · 程序员的 Agent 开发课