Skip to content
🔗 分享本题
查看我的学习进度 →

Agent 工作、情节、语义和程序四类记忆的存储检索及沉淀流程

🧠 记忆锚点:当前任务进工作记忆,经历进情节,知识进语义,做法进程序。

💡 答案要点

记忆分类(四类):

┌─────────────────────────────────────────────────────┐
│                   Agent 记忆体系                      │
├───────────┬───────────┬───────────┬─────────────────┤
│  工作记忆  │  情节记忆  │  语义记忆  │    程序记忆      │
│  当前对话  │  历史事件  │  知识概念  │   技能/流程      │
│ in-context│  向量DB   │  知识图谱  │  工具调用链      │
│  临时      │  可查询   │  持久化   │   持久化         │
└───────────┴───────────┴───────────┴─────────────────┘

工程实现(分层架构):

展开 Python 代码示例(39 行)
python
class AgentMemory:
    def __init__(self):
        # Layer 1: 工作记忆(当前 context window)
        self.working_memory = []          # 当前对话消息列表
        self.max_working_tokens = 4000    # 工作记忆上限

        # Layer 2: 情节记忆(历史对话向量化)
        self.episodic_memory = VectorDB() # Chroma/Pinecone

        # Layer 3: 语义记忆(持久知识库)
        self.semantic_memory = KnowledgeBase()

    def remember(self, message: dict):
        """写入记忆"""
        self.working_memory.append(message)

        # 超出工作记忆上限 → 压缩 → 写入情节记忆
        if self._count_tokens() > self.max_working_tokens:
            self._compress_to_episodic()

    def recall(self, query: str) -> list:
        """检索相关记忆"""
        # 1. 先查工作记忆(最近对话,直接用)
        recent = self.working_memory[-3:]

        # 2. 再查情节记忆(历史对话中相关的)
        episodic = self.episodic_memory.search(query, top_k=3)

        # 3. 再查语义知识库
        semantic = self.semantic_memory.search(query, top_k=2)

        return recent + episodic + semantic

    def _compress_to_episodic(self):
        """工作记忆 → 情节记忆(摘要后向量化存储)"""
        old_turns = self.working_memory[:-3]  # 保留最近3轮
        summary = llm_summarize(old_turns)
        self.episodic_memory.add(summary, metadata={"timestamp": now()})
        self.working_memory = self.working_memory[-3:]  # 裁剪

实际项目中的记忆策略选择:

场景推荐策略原因
简单客服机器人工作记忆(最近5轮)简单够用,成本低
个人助手工作记忆 + 情节记忆需要记住用户偏好
知识库问答工作记忆 + 语义记忆需要检索外部知识
复杂多轮Agent四层全用复杂任务需要全局记忆

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "我把 Agent 记忆分四层:工作记忆(当前 context,4K token 上限)、情节记忆(历史对话压缩后存向量DB)、语义记忆(知识库 RAG)、程序记忆(工具调用链缓存)。超出工作记忆上限时,自动压缩老对话写入情节记忆,下次 recall 时语义搜索取回。实测减少 token 消耗 60%,响应速度提升40%。"