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用户输入、assistantLLM 输出、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(messagesmemory.get_context())