AI Agent 工程实践(25):Memory Service

发布时间:2026/8/12 17:45:19
AI Agent 工程实践(25):Memory Service 系列AI Agent 工程实践上一篇第 24 篇《Tool Registry》下一篇第 26 篇《Prompt Management》一、开场重启一次记忆全没一个客服 Agent记住了老客户的偏好和历史工单聊得越来越顺。某天服务重启部署、崩溃、扩容记忆全在进程内存里restart 后变成失忆新人老客户一上来就炸毛你昨天不是都知道吗问题Memory 被当成了 Agent 的内部状态而不是独立服务。上篇24讲了工具收口这篇讲记忆收口——Memory Service。二、问题背景内联记忆 vs 独立服务内联版Democlass Agent: def __init__(self): self.memory [] # 进程内存重启即丢 def chat(self, msg): self.memory.append(msg) return llm(self.memory)独立版生产from memory.service import MemoryService mem MemoryService() # 背后是 Redis/Qdrant/... mem.remember(session_id, msg) # 落外部存储 history mem.recall(session_id) # 重启也不丢差别记忆活在服务里不在进程里。Agent 挂了记忆还在。三、错误尝试三种记忆翻车错误 1记忆存在进程内存如开场。重启 / 扩容 / 崩溃 全员失忆且每次扩容新实例都没有历史。错误 2记忆和 Agent 强耦合# agent.py 里直接写 SQLite 连接 def chat(self, msg): self.db.execute(INSERT ..., msg) # 换存储要改 agentAgent 本该只管推理却背上了存储实现。换 Qdrant 做语义检索得改 Agent——违背22的依赖单向下层反向被上层持有。错误 3不分短期 / 长期把当前对话的临时草稿和用户三年的偏好塞进同一个 list。短期要快、长期要检索混在一起两头的优化都做不了。四、关键观察Memory 属于系统不属于 Agent抽象原则Memory 是独立服务Agent 通过接口读写不碰存储实现。换 backend 不动 Agent。分短期 / 长期短期会话内上下文要低延迟长期跨会话偏好/知识要可检索、可演进。backend 可替换根据规模与需求选 Redis / Qdrant / SQLite / Postgres。记忆是系统的记忆Agent 只是记忆的使用者。这和24工具不属于调用方、而属于 Registry 是同一个思想——能力收口成服务使用方只依赖接口。五、最终方案MemoryService 长什么样memory/ ├── service.py # MemoryServicerecall / remember 接口 ├── backends/ │ ├── redis.py # 短期高速 KV │ ├── qdrant.py # 长期向量语义检索 │ ├── sqlite.py # 轻量本地持久化 │ └── postgres.py # 事务 关系查询 └── types.py # ShortTerm / LongTerm 区分接口class MemoryService: def remember(self, session, msg, scopeshort|long): ... def recall(self, session, queryNone, scopeshort|long) - list: ...backend 选择表存储适合不适合Redis短期高速、会话上下文语义检索、持久关系Qdrant长期语义检索类似过去的投诉简单 KV、事务SQLite单机轻量、原型高并发、分布式Postgres事务关系持久企业标配超大规模向量检索需扩展依赖方向Mermaid六、设计权衡怎么选 backend场景建议理由原型 / 单人SQLite零运维高并发会话上下文Redis短期 Postgres长期速度持久要语义回忆Qdrant 做长期向量检索是强项企业事务一致PostgresACID反过度工程不要一上来就 Qdrant 集群。先用 SQLite/Redis 跑通真有语义检索需求再引向量库。七、总结✅ 记忆在进程内存 重启即失忆真实客诉。✅ 三种翻车进程内存、与 Agent 耦合、不分短期/长期。✅ 原则Memory 是独立服务分短期低延迟/长期可检索backend 可替换。✅ backend 选择Redis 短期、Qdrant 语义长期、SQLite 原型、Postgres 企业。✅ 反过度工程先 SQLite/Redis 跑通有语义需求再上向量库。下一篇钻进提示词治理 —— 为什么 Prompt 不是prompt.txt而是 version / template / variables / A-B Test。26参考资料带用途说明本系列24Tool Registry本文与24同构——能力工具/记忆收口成服务使用方只依赖接口。本系列22AI Agent 项目应该如何分层本文是memory/层的展开。本系列10Memory 不只是聊天记录——长期记忆架构设计本文是10长期记忆的工程化落地独立服务backend 选择。Qdrant 文档qdrant.tech本文向量语义检索 backend 的官方参考。Redis 文档redis.io本文短期高速存储 backend 的官方参考。本文是 AI Agent 工程实践系列的第 25 篇第四阶段第五篇。系列导航上一篇第 24 篇《Tool Registry》下一篇第 26 篇《Prompt Management》