news 2026/4/22 10:58:24

【Cradle 源码解析五】记忆的艺术:向量存储与长短期记忆管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Cradle 源码解析五】记忆的艺术:向量存储与长短期记忆管理

前言

在前几篇中,我们的 Agent 已经具备了身体(架构)、眼睛(视觉)、大脑(推理)和双手(执行)。但如果它记不住 5 分钟前刚做过什么,或者忘记了最初的任务目标,那么它在《荒野大镖客 2》里永远走不出新手村。

LLM 本质上是无状态 (Stateless)的。为了让 Agent 拥有连贯的行为,Cradle 设计了一套完善的 Memory 系统,模拟了人类的短期记忆 (Short-term)长期记忆 (Long-term)机制。

本篇将深入cradle/memory/模块,剖析它是如何利用向量数据库RAG (检索增强生成)技术,让 Agent 真正“拥有过去”。

1. 记忆的分层架构

在阅读源码时,你会发现 Cradle 的记忆不是一锅粥,而是分层的。这与认知心理学中的模型非常相似:

  1. 短期记忆 (Short-term Memory)

    • 作用:存储最近 N 步的操作历史。

    • 位置:直接存在 LLM 的 Context Window (Prompt) 中。

    • 形式[(Obs_t-1, Action_t-1), (Obs_t, Action_t), ...]

  2. 长期记忆 (Long-term Memory)

    • 作用:存储过去的成功经验、游戏知识、地图信息。

    • 位置:外部向量数据库 (Vector Database)。

    • 形式Embedding(Text Description)->Vector Index

2. 短期记忆:滑动窗口与 Context 管理

由于 GPT-4 的 Context Window 是昂贵且有限的,Cradle 不能把几个小时的游戏日志全塞进去。

cradle/agent/agent.py的主循环中,Cradle 维护了一个有限长度的队列(通常是最近 5-10 步)。

Python

# 伪代码示意:短期记忆管理 class Agent: def __init__(self, history_len=10): self.short_term_memory = collections.deque(maxlen=history_len) def update_history(self, reasoning, action, result): # 将这一步的“思考-行动-结果”三元组存入 entry = { "step": self.current_step, "reasoning": reasoning, "action": action, "feedback": result # 比如 action 是否执行成功的 flag } self.short_term_memory.append(entry) def construct_prompt(self): # 组装 Prompt 时,只把这 10 步历史转成文本 history_text = format_history(self.short_term_memory) return f"Recent History:\n{history_text}"

关键点:防止循环死锁 (Loop Deadlock)。如果 Agent 发现自己在最近 5 步一直在重复“撞墙 -> 后退 -> 撞墙”,短期记忆会立刻暴露这个问题,触发 LLM 进行Self-Reflection(反思)并改变策略。

3. 长期记忆与 RAG:向量检索的魔法

这是 Cradle 能够越玩越聪明的核心。随着游戏时间的增加,数据量会爆炸。Cradle 使用Embedding (嵌入)技术将文本转化为向量,并利用RAG技术按需检索。

cradle/memory/vector_store.py中,我们可以看到类似 ChromaDB 或 FAISS 的封装。

3.1 技能与知识检索 (Skill & Knowledge Retrieval)

当 Agent 接到任务“去商店买枪”时,它不需要把所有游戏的攻略都加载进内存。

检索流程:

  1. Query: "How to buy a gun in RDR2?" / "Current Task: Buy Gun"

  2. Embedding: 将 Query 转化为向量。

  3. Search: 在数据库中查找与该向量余弦相似度最高的 K 条记录。

  4. Result: 检索到相关技能说明(比如“与店主对话按右键”)。

  5. Inject: 将这 K 条技能说明插入 Prompt 的Context部分。

3.2 情景记忆 (Episodic Memory)

如果 Agent 以前来过这个场景并成功完成过任务,它会把当时的成功路径存入长期记忆。

当它再次遇到相似场景(比如又是这个 UI 界面)时,RAG 机制会告诉它:“嘿,上次你在这种界面下,点击了右下角的按钮就成功了。”

4. 避免“目标遗忘”:Goal Drift 的克星

在长达数小时的任务中,LLM 很容易出现Goal Drift (目标漂移)——做着做着就忘了最初是要干嘛,开始被路边的野花吸引。

Cradle 在源码层面做了两层锚定:

  1. Global Goal (全局目标):

    在 config 或 agent 初始化时设定,作为一个常量 (Constant),在每一轮 Prompt 的最顶端(System Prompt)强制重复。

    "无论发生什么,你的终极目标都是:完成主线任务‘第二章:美国田园诗’。"

  2. Sub-goal Stack (子目标栈):

    Cradle 往往维护一个简单的栈结构。

    • Global: 买枪

    • Current Sub: 骑马去镇上

    • Current Atomic: 按 W 上马

    只有当子目标完成后,才会 Pop 出栈,Agent 永远聚焦于栈顶任务,从而保证执行逻辑的线性与收敛。

5. 源码实战:Memory 接口定义

cradle/memory/base.py中,我们通常能看到这样的抽象接口定义,方便开发者替换不同的后端(比如从本地 JSON 换成云端的 Pinecone):

Python

class MemoryProvider(ABC): @abstractmethod def add(self, content: str, metadata: dict): """Embedding content and store it.""" pass @abstractmethod def search(self, query: str, top_k: int = 3): """Retrieve relevant memories based on similarity.""" pass @abstractmethod def load(self, path: str): """Load memory from disk (Persistence).""" pass

6. 总结

Cradle 的 Memory 模块展示了 AI Agent 是如何克服“健忘症”的:

  • 短期记忆:利用 Sliding Window 保持对话连贯,检测重复错误。

  • 长期记忆 (RAG):利用 Vector Store 扩展知识边界,实现经验的复用。

  • 目标管理:利用 Prompt 强化与栈结构,防止行为发散。

正是这些机制,让 Cradle 不再是一个只会条件反射的脚本,而是一个随着时间推移,经验越来越丰富、操作越来越熟练的“老玩家”。

下一篇预告 (大结局):

所有的模块都已经拆解完毕。在最后一篇 【Cradle 源码解析六】实战复盘:从《荒野大镖客2》看 Agent 的实际运行流 中,我们将把之前的拼图全部拼起来,通过一次完整的游戏任务流程(Trace Log),从头到尾复盘数据是如何在这些模块间流转的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:24:28

Qt5 QWebEngine 调试最佳实践指南

公众号:cpp手艺人 Qt5 QWebEngine 调试最佳实践指南 最近在项目中遇到很多关于QWebEngine的疑难杂症,越发的发现调试手段的重要性。所以我这里做了一次总结。 总结来说三种:日志输出信息和自带的dev tools,以及远程调试。 1、开启…

作者头像 李华
网站建设 2026/4/18 11:49:38

探索级联H桥SVG高频阻抗模型

级联H桥svg高频阻抗模型 最近一直在研究级联H桥SVG(静止无功发生器),今天来和大家分享一下其中的高频阻抗模型。 一、什么是级联H桥SVG 级联H桥SVG是一种用于电力系统无功补偿和谐波治理的重要装置。它由多个H桥级联而成,通过控…

作者头像 李华
网站建设 2026/4/22 3:14:30

三菱PLC音乐喷泉灯光秀编程手记

音乐喷泉,三菱plc程序音乐喷泉。 功能:启动开关SB1为ON时,LED指示灯依次循环显示1→2→3...→8→1、2→3、4→5、6-7、8→1、2、3→4、5、6→7、8→1→2....,模拟流水状态。 SB1为OFF,LED灯关闭。 提供学习使用,008。最近在车间折腾一个音乐喷…

作者头像 李华
网站建设 2026/4/18 14:14:38

潭州软件测试工程师精英培训班零基础就业课

潭州软件测试工程师精英培训班:开启职业进阶的“质量护航”之旅 在数字化浪潮席卷全球的2025年,相关示例软件质量已成为企业竞争力的核心要素。潭州教育推出的“软件测试工程师精英培训班”,以“培养全链路测试专家”为目标,通过…

作者头像 李华