入门篇 · 第 4 天 / 共 7 天
会聊天的机器人(多轮记忆)
昨天你学会了"指挥"AI。但你可能已经发现一个怪事:你告诉它"我叫小明",下一句问"我叫啥",它居然不知道!今天我们就治好这个毛病,做出一个能连续对话、记得住上文的聊天机器人 🤖。
1234567
你在第 4 天
①
痛点:AI 是"金鱼记忆"
你调用 API 时,每一次 create(...) 都是完全独立的一通电话。这通电话挂了,AI 就把你忘得一干二净——下通电话它根本不知道你上通说过啥。
🐟 AI 的记忆像金鱼(只有 7 秒)
传说金鱼记忆只有 7 秒。大模型比金鱼还狠:每次调用之间,它 0 秒记忆。你这次说的话、它这次的回答,下次调用时它压根不记得发生过。所以你说"我叫小明",下一次问"我叫啥",它当然懵。
👶 那我平时用的 ChatGPT/DeepSeek 网页版,明明能记住聊天上文啊?
🧑🏫 好问题!其实模型本身还是金鱼记忆,是那个网页/App 帮你偷偷把之前的对话又发了一遍。今天我们就学它这一手——记忆不是模型给的,是我们自己维护、每次一起带上的。
②
本质:把对话历史一起发回去
解决办法出奇地简单:既然它不记得,那每次提问,我就把之前所有的对话都再发一遍给它。它一看这一大串上文,自然就"想起来"了。
📜 像给健忘的同事递上"聊天记录截图"
你有个超健忘的同事,每次找他都得先把之前的聊天记录截图给他看一遍,他扫一眼就接得上。
messages 这个列表就是那份聊天记录:里面按顺序装着"用户说的、AI 说的、用户说的、AI 说的……"每聊一轮,它就变长一点,你每次都把整份发过去。所以关键动作就两个:每轮把用户的话塞进 messages,也把AI 的回答塞回 messages。这个列表越滚越长,记忆就一直在。
⚠️ 小提醒历史越长,每次发的字越多,花的钱也越多;发得太长还会超上限。入门阶段不用管,等真做产品了再学"只保留最近几轮"的技巧。
③
动手:一个命令行聊天机器人
新建 chatbot.py,抄下面这段。核心就一句话:用一个 messages 列表当记忆,每轮往里塞两条(你的话 + AI 的话)。
from openai import OpenAI
client = OpenAI(api_key="你的钥匙", base_url="https://api.deepseek.com")
# messages 就是"记忆本",先放一条 system 定人设
messages = [{"role": "system", "content": "你是一个友善的聊天助手"}]
while True: # 一直循环,实现连续对话
user_input = input("你:") # 等你打字
if user_input == "退出": # 打"退出"就结束
break
messages.append({"role": "user", "content": user_input}) # 把你的话记下来
resp = client.chat.completions.create(model="deepseek-chat", messages=messages)
answer = resp.choices[0].message.content
print("AI:" + answer)
messages.append({"role": "assistant", "content": answer}) # 把 AI 的话也记下来
运行它:
python chatbot.py
试试这段对话,验证它真的记住了:先打 我叫小明,再打 我叫什么名字?——这次它答得出来了!
🎉 见证时刻
你做出了一个能连续聊天、记得住上文的机器人!它和你天天用的 ChatGPT 网页版,骨架是一模一样的——都是"把对话历史攒起来,每次一起发过去"。你已经摸到了聊天应用的核心。
你做出了一个能连续聊天、记得住上文的机器人!它和你天天用的 ChatGPT 网页版,骨架是一模一样的——都是"把对话历史攒起来,每次一起发过去"。你已经摸到了聊天应用的核心。
👶 assistant 是啥角色?前面只见过 system 和 user。
🧑🏫 一共就三个角色:system(人设)、user(你说的)、assistant(AI 说的)。把 AI 的回答用 assistant 存回列表,它下次才知道"这句是我自己之前说的",对话才连得上。
④
小结
今天的道理一句话就能记住:
💡 记忆 = 你自己攒的一个列表
模型永远是金鱼记忆,"记忆"是你用一个
messages 列表攒出来的:每轮 append 两条(user + assistant),每次把整份发过去。就这么简单。🎯 今天你收获了什么
✅ 搞懂了 AI 为什么"健忘"——每次调用之间零记忆;
✅ 学会了让它"记住"的办法——把对话历史一起发回去;
✅ 用一个
✅ 搞懂了 AI 为什么"健忘"——每次调用之间零记忆;
✅ 学会了让它"记住"的办法——把对话历史一起发回去;
✅ 用一个
while True 循环 + messages 列表,做出了能连续对话的聊天机器人!