开放API

调接口时 AI 记不住上一句?多轮对话的历史要自己拼进 messages

2026-10-29 约 1 分钟 22802 次阅读

调接口时 AI 记不住上一句?多轮对话的历史要自己拼进 messages 关键参数

接口特性无状态,历史需自行拼装
messages 结构system + user/assistant 交替
截断策略保 system + 近 N 轮 / 摘要替换
窗口查询模型页「上下文长度」

为什么记不住

对话接口是无状态的:服务端不会替你记住上一轮说了什么。要延续上下文,必须在每一轮请求里把完整的对话历史放进 messages。

怎么拼

messages 是一个数组,按时间顺序放:系统提示、用户、助手交替出现。

[
  { "role": "system", "content": "你是有帮助的助手" },
  { "role": "user", "content": "我叫小明" },
  { "role": "assistant", "content": "你好,小明!" },
  { "role": "user", "content": "我刚说我叫什么?" }
]

把上面整个数组随请求发出,模型就能回答「你叫小明」。

截断策略

上下文过长会超出模型窗口:

  • 保留 system 与最近 N 轮;
  • 或对较早内容做摘要后替换;
  • 必要时只保留关键事实。

具体窗口大小看模型页「上下文长度」。

常见问题

调接口时 AI 为什么记不住上一句?
对话接口是无状态的,服务端不会替你保存会话;要延续上下文,必须在每轮请求里把完整对话历史放进 messages。
messages 怎么拼?
数组按时间顺序放:system 开头,user 与 assistant 交替出现,把整个数组随请求发出。
上下文太长怎么办?
保留 system 与最近 N 轮;或对较早内容做摘要后替换;必要时只保留关键事实。
上下文窗口有多大?
看所用模型页的「上下文长度」标注。

相关阅读

相关平台

关于大模型的选型、调用与落地实践,你还可以访问以下平台:

多轮对话APImessages