乐于分享
好东西不私藏

给Agent装上"记忆"——让你的AI助手真正认识你

给Agent装上"记忆"——让你的AI助手真正认识你

先说结论:上一期的Agent是个"金鱼脑",聊完就忘。今天改几行代码,让它记住你说过的每一句话。

上期回顾

上一期我们搭了一个能对话的Agent20行代码跑起来,体验不错。但用着用着你会发现一个尴尬的问题——

你跟它说"我叫小明",下一句问"我叫什么名字?"

它一脸茫然:抱歉,我不知道你的名字。

为什么?因为每次你提问,Agent都把之前的对话忘得一干二净。对它来说,每次都是"初次见面"

这就是今天要解决的问题。

什么是Agent"记忆"

一句话讲清楚:把聊天记录存下来,每次提问时一起发给模型。

ChatGPT为什么能记住你说过的话?不是它真的"记得",而是每次对话时,系统自动把之前的聊天记录打包发给模型。模型读到完整上下文,自然就能"接上话"了。

我们的Agent也要做同样的事。原理就这么简单——不需要数据库,不需要向量检索,一个列表就够了。

动手改造:3处改动装上记忆

打开上一期的 first_agent.py,我们在原代码基础上改3个地方。

改动一:新建对话历史列表

在代码开头加一个列表,用来存所有对话:

新增:对话历史,记住你说过的话

conversation_history = [

{"role": "system", "content": system_prompt}

]

这个列表一开始就放好了Agent"人设"system_prompt),后面每说一句话,就往里追加一条。

改动二:每次提问前,把你的话存进历史

把你说的话存进历史

conversation_history.append({"role": "user", "content": user_input})

改动三:发送完整历史,并把回复也存进去

response = client.chat.completions.create(

model="deepseek-chat",

messages=conversation_history 关键:从单条消息变成完整历史

)

reply = response.choices[0].message.content

AI的回答也存进历史

conversation_history.append({"role": "assistant", "content": reply})

就这3处改动,Agent就从"金鱼脑"变成了"记性好"

完整代码

把改好的代码另存为 agent_with_memory.py

from openai import OpenAI

client = OpenAI(

api_key="你的API密钥", 替换成你自己的Key

base_url="https://api.deepseek.com"

)

agent_name = "小白学习助手"

system_prompt = "你是一个温柔耐心的AI学习助手,用通俗易懂的语言回答问题"

新增:对话历史,用来记住你说过的话

conversation_history = [

{"role": "system", "content": system_prompt}

]

print(f"{agent_name} 已启动!输入「退出」结束对话\n")

while True:

user_input = input("我:")

if user_input.lower() in ["退出", "exit", "quit"]:

print("再见~")

break

把你说的话存进历史

conversation_history.append({"role": "user", "content": user_input})

把完整对话历史发给模型

response = client.chat.completions.create(

model="deepseek-chat",

messages=conversation_history

)

reply = response.choices[0].message.content

AI的回答也存进历史

conversation_history.append({"role": "assistant", "content": reply})

print(f"{agent_name}{reply}\n")

运行后试试这样对话:

我:我叫小明,今年大二,数学专业

小白学习助手:你好小明!大二数学专业,很厉害呀~

我:我之前学过一点Python,能帮我规划一下Agent学习路线吗?

小白学习助手:好的小明!既然你有Python基础,我建议这样安排……

我:对了,我叫什么名字来着?

小白学习助手:你叫小明呀,你刚才告诉我的~

它记住了!因为你说的每一句话、它回的每一句,都存在 conversation_history 里,每次提问时整个列表一起发给了模型。

代码解读:到底发生了什么?

对比上一期,核心变化就3处:

对比项

上一期

本期

对话存储

没有,每次只发当前一条消息

用列表存所有对话记录

发送内容

messages = system + 当前消息

messages = conversation_history(完整历史)

回复处理

打印完就丢

打印后存进历史列表

conversation_history 这个列表是整个"记忆"功能的核心:

1. 初始化时:放入system设定(Agent人设)

2. 你说话时:追加 role: user 到列表

3. AI回复后:追加 role: assistant 到列表

4. 下次提问时:整个列表一起发给模型

就这么一个列表,存取追加,Agent就有了"记忆"。所有AI对话产品的记忆功能,底层都是这个逻辑——不是什么高科技,就是存个聊天记录。

一个要提前知道的问题:聊太多会"撑爆"

你可能会想到:聊100轮,历史不就越来越长?

没错。对话历史越长,每次发送的数据量越大,带来两个后果:

1. 费用增加:模型按token计费,历史越长,每次花的钱越多

2. 超限报错:超过模型的上下文窗口上限会报错

不过别担心,日常学习场景几十轮对话完全够用。等系列后面讲到"长期记忆"时,我们会解决这个问题——只记住重要的内容,忘掉无关的闲聊。

本期小结

知识点

一句话总结

Agent记忆的本质

把聊天记录存成列表,每次一起发给模型

role字段

system=人设,user=你的话,assistant=AI回复

实现方式

追加到列表→ 发送完整列表 → 回复也追加

局限性

历史太长会超限,后续用"长期记忆"解决

下期预告

有了记忆,Agent已经像个"能聊天的朋友"了。但它还只会说,不会做。

下一期,我们给Agent加上工具调用能力——让它能联网搜索信息、读取本地文件、甚至帮你写代码。从"聊天机器人"正式升级为"能干活的Agent"

如果这篇对你有帮助,欢迎关注「慕亭的AI笔记」,我们下期见。