大模型如何"记住"你说过的话:多轮对话机制与 Go 实操
大模型如何"记住"你说过的话:多轮对话机制与 Go 实操 大家好,我是极客老墨。 我刚开始做 AI 应用的时候,有个直觉假设:“模型后台应该有个数据库,记住了我的聊天记录。“后来才发现完全不是这么回事。 主流大模型 API 都是"无状态”(Stateless)的。 每一次你发请求过去,它都完全不记得你之前说过什么。之所以它能接住你的话茬,是因为开发者每次都把之前的聊天记录打包发给了它。 这篇就来聊聊,怎么在 Go 代码里实现这种"人工记忆”。 一、多轮对话的本质:以存储换记忆 在 API 调用层面,模型并不负责存储对话历史。实现多轮对话的公式其实很简单: $$新请求 = 对话历史 + 当前问题$$ 每次你提问,你的程序都要从内存(或数据库)里把之前的对话翻出来,拼成一个数组发过去。模型读完这一长串,才能理解你说的"它"是指谁,或者"接着说"是要说什么。 1sequenceDiagram 2 participant User as 用户 3 participant App as 你的 Go 应用 4 participant LLM as 大模型 (DeepSeek) 5 6 User->>App: 1. "你好,我是老墨" 7 App->>LLM: POST [User: 你好,我是老墨] 8 LLM-->>App: "你好,老墨!" 9 App-->>User: "你好,老墨!" 10 11 Note over App: 内存存储: [User: 你好, Assistant: 你好老墨] 12 13 User->>App: 2. "我刚才说我叫什么?" 14 App->>LLM: POST [User: 你好, Assistant: 你好, User: 我刚才说我叫什么?] 15 LLM-->>App: "你刚才说你叫老墨。" 16 App-->>User: "你刚才说你叫老墨。" 二、Messages 数组的三大角色 在标准的 chat/completions 接口中,messages 数组是唯一的上下文载体。它由三种角色组成: ...