9. Agent 的长短期记忆系统怎么做的?记忆是怎么存的?粒度是多少?怎么用的?

9. Agent 的长短期记忆系统怎么做的?记忆是怎么存的?粒度是多少?怎么用的?

👔面试官:你们项目里 Agent 的记忆系统是怎么做的,短期记忆和长期记忆分别存在哪?

🙋‍♂️我:短期记忆就是把对话历史存在内存里,长期记忆存数据库,需要的时候查出来用。

👔面试官:长期记忆「存数据库」?那你用的什么数据库,怎么查的,按关键词全文搜索吗?

🙋‍♂️我:也可以用关键词搜索,就是普通的字符串匹配,比如用 SQL 的 LIKE 查询......

👔面试官:你这样搜根本搜不到语义相关的内容。比如用户问的是「代码习惯」,历史里存的是「Python 风格偏好」,关键词不重叠,你怎么匹配?

🙋‍♂️我:那......我把粒度搞细一点,把每句话都拆开存,这样关键词覆盖更全。

👔面试官:拆得越细,检索噪音越大,一个完整的用户偏好被拆成四五条,检索时只命中其中两条,拿到的是碎片化信息,这才是问题所在。你知道长期记忆的正确存法是什么吗?

好,被追问到这里说明这道题的坑不少,咱来系统说一下 Agent 记忆系统的正确做法。

💡-简要回答

我理解记忆系统分两层。

短期记忆就是 context window 里的对话历史,存当前任务的中间状态,任务结束就清掉;长期记忆用向量数据库存,把信息 embedding 后写入,用的时候做语义检索拿回来注入 prompt。

粒度上我通常按「一次完整交互」或「一个关键事件」为单位存,太细碎检索噪音大,太粗糙又丢失细节,这个需要根据业务实际调整。

📝-详细解析

先假设一个没有记忆系统的 Agent,感受一下它会有多不堪用。

复制代码
class ShortTermMemory:
    def __init__(self):
        # messages 列表就是 LLM 的工作台
        # 每条消息有 role(谁说的)和 content(说了什么)
        self.messages = []

    def add(self, role: str, content: str):
        # role 有三种:user(用户输入)、assistant(LLM 输出)、tool(工具返回结果)
        # 每一步的内容都要追加进来,保持完整的任务状态
        self.messages.append({"role": role, "content": content})

    def get_context(self):
        # 调 LLM 时把完整的 messages 传进去
        # LLM 会读取这份完整历史来理解当前状态
        return self.messages

    def clear(self):
        # 任务结束后清空,准备迎接下一个任务
        # 清空意味着这次任务的所有中间状态都消失了
        self.messages = []

 一次任务执行的示例
memory = ShortTermMemory()
memory.add("user", "帮我分析这几家竞品的核心功能差异")
memory.add("assistant", "好的,我先搜索一下竞品 A 的信息")
memory.add("tool", "搜索结果:竞品 A 的核心功能是实时协作编辑,支持最多 50 人同时在线......")
memory.add("assistant", "已拿到竞品 A 的信息,再搜竞品 B")

 每次调 LLM 都传完整历史,它才能知道自己做到哪一步了
response = llm.chat(messages=memory.get_context())
相关推荐
青少儿编程课堂7 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
Pniubi31 分钟前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql
用户956256254291 小时前
五分钟用 E2B SDK 打通沙箱:环境变量只改三行
python·api
数据库小学妹1 小时前
pgbouncer 事务池:prepared statement、临时表与会话状态
数据库·后端·postgresql
用户95179422510291 小时前
最小循环:让 Agent 跑起来(I1)
python·agent
沉默小管1 小时前
上班鼓励器_桌宠版
python
SomeOtherTime1 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
武子康1 小时前
攻击动作做对了,游戏规则就对了吗?H3-World 与三条控制路线的分工
大数据·人工智能·agent
duansamve1 小时前
Flask中视图函数接收请求数据和返回响应实例
python·flask