入门篇 · 第 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 网页版,骨架是一模一样的——都是"把对话历史攒起来,每次一起发过去"。你已经摸到了聊天应用的核心。

👶 assistant 是啥角色?前面只见过 system 和 user。

🧑‍🏫 一共就三个角色:system(人设)、user(你说的)、assistant(AI 说的)。把 AI 的回答用 assistant 存回列表,它下次才知道"这句是我自己之前说的",对话才连得上。

小结

今天的道理一句话就能记住:

💡 记忆 = 你自己攒的一个列表 模型永远是金鱼记忆,"记忆"是你用一个 messages 列表攒出来的:每轮 append 两条(user + assistant),每次把整份发过去。就这么简单。
🎯 今天你收获了什么
✅ 搞懂了 AI 为什么"健忘"——每次调用之间零记忆
✅ 学会了让它"记住"的办法——把对话历史一起发回去
✅ 用一个 while True 循环 + messages 列表,做出了能连续对话的聊天机器人

机器人会聊天了,但它还只会"动嘴"。碰到算数它会算错,问实时信息它抓瞎。明天我们让它会动手用工具——这就是 Agent 的雏形 🛠️

Day 5 · 让 AI 用工具 →
← 回 Day 3