摘要
本文从 Anthropic 新增的 Auto Dream(/dream)功能出发,系统解析大模型"跨会话记忆一致性"这一核心难题,剖析 Auto Memory + Auto Dream 组合背后的技术逻辑,并给出如何在自己项目里实现"类 Auto Dream 记忆管理"的实战方案(含完整 Python 代码,基于 xuedingmao.com 的 Claude Sonnet 4.6 API)。适合正在做 AI 助手、AI 编码伴侣、Agent 平台的开发者阅读和落地。
一、背景介绍:大模型的"记忆失真"问题
1.1 传统对话式大模型的结构性缺陷
经典 ChatGPT / Claude / Gemini 等对话式大模型,本质上是一个无状态推理引擎 + 临时上下文窗口:
- 会话内:依赖上下文窗口(context window)维持短期记忆
- 会话间:默认无记忆,需要用户重复提供关键信息
- 工具层解决方案:
- 向量数据库(RAG)做"检索式记忆"
- 用户 Profile / 项目配置做"静态记忆"
这导致两个痛点:
-
跨会话记忆碎片化:
- 每次对话都像在不同"平行宇宙"
- 同一项目会被重复重新理解多次
-
长期使用后记忆污染:
- 记忆条目不断累积且互相矛盾
- "昨天""之前那次"这种模糊时间戳完全失效
- 旧调试路径、废弃方案仍被当成"当前状态"
这在"Claude Code / AI Coding Assistant"场景中特别致命:
项目演进越久,AI 的建议反而越不可靠,幻觉率上升。
1.2 Anthropic 的第一步:Auto Memory
Anthropic 几个月前推出了 Auto Memory:
- 背景:让 Claude 能自动给用户/项目做"长记忆笔记"
- 行为:
- 自动提取"长期有价值"的信息(项目结构、开发栈、偏好设置等)
- 存储为持久化记忆,在后续会话中自动加载
但使用一段时间后会出现:
- 记忆条目冗余、重复甚至互相冲突
- 旧的调试步骤/架构决策没有被标记为"过时"
- 时间语义失效(原本的"昨天",现在已经是几周前)
本质上,Auto Memory 只解决了"写入记忆"问题,没有解决"记忆管理"问题。
二、核心原理:Auto Dream = AI 的 REM 睡眠
2.1 Auto Dream 做了什么?
视频中提到的 Auto Dream(/dream),可以理解为:
对长时记忆进行周期性"整理、去噪、重构"的后台任务。
其能力大致包括:
- 遍历所有记忆条目(memory files)
- 删除:过时/错误/不再相关的信息
- 合并:内容重复、格式不统一的笔记
- 消解矛盾:旧架构 vs 新架构、旧框架 vs 新框架
- 重组:按项目、领域、技术栈形成结构化记忆文件(如 project.md)
所以:
- Auto Memory = 白天不停记(采集数据)
- Auto Dream = 夜里集中整理(数据清洗 + 结构化 + 聚合)
2.2 类比人脑:短期记忆 → 长期记忆
视频的类比非常贴切:
- 白天:大脑不断收集信息,形成短期记忆,杂乱且冗余
- REM 睡眠:
- 重放关键经历
- 强化重要信息
- 弱化甚至清除无关噪音
- 重构为长期记忆
Auto Dream 就是在模拟这一过程:
- 不再"无脑 append 记忆条目"
- 而是将项目信息抽象为稳定的心智模型(mental model)
效果表现为:
- 不再重复旧方案 / 过时架构
- 同一项目的回答跨会话保持逻辑一致
- 幻觉明显减少(因为矛盾记忆被清理)
- 能够理解项目演进:从 Express 迁到 Fastify 时更新全局记忆
2.3 对 AI Agent / Coding Assistant 的启示
从系统设计角度看:
- 记忆系统必须是动态的,而不是只增不减的日志堆
- 需要一个"周期性整理任务 ",确保:
- 冗余压缩
- 冲突消解
- 知识结构化(project index / global index)
- 这个任务可以由大模型自身完成:
- 输入:历史记忆 + 当前项目状态 + 新对话
- 输出:干净、结构化的新记忆快照
Auto Dream 的核心价值其实是:
让 LLM 不再是"无状态函数",而是拥有可演化的项目级心智模型。
三、实战演示:在自己项目中实现"类 Auto Dream"记忆系统
下面用一个实战 Demo,演示如何利用 薛定猫AI(xuedingmao.com)+ Claude Sonnet 4.6 实现简化版 Auto Memory + Auto Dream。
3.1 场景设定
目标:实现一个"有记忆的编码助手",支持:
- 持久化项目记忆(Auto Memory)
- 按需触发"记忆整理"(类似 /dream),形成结构化 project.md
- 使用统一的 OpenAI 兼容 API(便于在 GPT / Claude / Gemini 间切换)
3.2 平台选型:为什么选择(xuedingmao.com)
从技术选型角度,做这种"记忆+推理"混合系统时,关键是:
- 能否快速切换/组合不同模型(有的擅长代码、有的擅长摘要)
- API 是否稳定、兼容主流 SDK
- 新模型上线速度是否够快(保证能力上限)
薛定猫AI 的几个技术优势:
- 聚合 500+ 主流大模型:GPT-5.4、Claude 4.6、Gemini 3 Pro 等
- 统一 OpenAI 兼容接口:只需要替换 base_url 和 api_key 即可
- 新模型实时首发:适合做前沿特性尝鲜和 AB 测试
- 对于"记忆整理"这类任务,可以方便地切换到更擅长 long-context 的模型
下面代码全部基于薛定猫的 OpenAI 兼容模式,默认模型使用:claude-sonnet-4-6。
3.3 完整 Python 示例:简化版 Auto Dream
代码功能
MemoryStore:简单的 JSON 文件型记忆存储add_memory:追加记忆条目(模拟 Auto Memory)dream_consolidate:调用 Claude 对所有记忆进行整理(模拟 Auto Dream)chat_with_memory:在对话时自动加载整理后的项目记忆
代码示例
python
import json
import os
from typing import List, Dict, Any
from openai import OpenAI
# =========================
# 1. 初始化薛定猫 AI 客户端
# =========================
# 将 YOUR_API_KEY 替换为在 xuedingmao.com 后台获取的 key
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://xuedingmao.com/v1" # 薛定猫 OpenAI 兼容接口
)
MODEL_NAME = "claude-sonnet-4-6"
# =========================
# 2. 简单的本地记忆存储实现
# =========================
class MemoryStore:
"""基于 JSON 文件的简易项目记忆存储"""
def __init__(self, path: str = "project_memory.json"):
self.path = path
if not os.path.exists(self.path):
self._init_empty()
def _init_empty(self):
data = {
"raw_entries": [], # 原始记忆条目(Auto Memory)
"consolidated_note": "" # Auto Dream 整理后的结构化记忆
}
self._save(data)
def _load(self) -> Dict[str, Any]:
with open(self.path, "r", encoding="utf-8") as f:
return json.load(f)
def _save(self, data: Dict[str, Any]):
with open(self.path, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
def add_memory(self, entry: str):
"""追加一条原始记忆(类似 Auto Memory 的笔记)"""
data = self._load()
data["raw_entries"].append(entry)
self._save(data)
def get_raw_entries(self) -> List[str]:
return self._load()["raw_entries"]
def get_consolidated_note(self) -> str:
return self._load()["consolidated_note"]
def update_consolidated_note(self, note: str):
data = self._load()
data["consolidated_note"] = note
self._save(data)
memory = MemoryStore()
# =========================
# 3. 调用 Claude 实现 "Dream" 整理记忆
# =========================
def dream_consolidate(project_name: str):
"""
调用 claude-sonnet-4-6,对当前项目的原始记忆进行整理:
- 合并重复信息
- 删除过时/冲突内容
- 以结构化 Markdown 输出(类似 project.md)
"""
raw_entries = memory.get_raw_entries()
if not raw_entries:
print("当前没有任何原始记忆条目,无需整理。")
return
system_prompt = f"""
你是一个 AI 记忆管理器,负责为项目构建稳定、干净的"长期记忆"。
当前项目:{project_name}
任务要求:
1. 输入是该项目的历史记忆片段(raw_entries),其中可能包含:
- 过时的架构/依赖信息
- 已废弃的调试手段
- 新旧方案混杂、甚至互相冲突的内容
2. 你需要:
- 删除已明显过时或被新信息取代的内容
- 在存在冲突时,以"最新方案"为准
- 合并重复信息,抽象为更高层级的描述
- 对项目进行结构化建模,输出 Markdown 文档
输出格式(必须是 Markdown)建议包含:
- # Project Overview
- # Tech Stack
- # Architecture
- # Key Decisions
- # Current Constraints / TODO
注意:你输出的内容将被作为"项目长期记忆"持久保存,请保证:
- 不包含明显临时性的对话细节(如"昨天我刚试了 xxx")
- 使用稳定、与时间解耦的描述
"""
user_prompt = (
"以下是该项目至今为止的所有原始记忆条目,请进行 Auto Dream 风格的整理:\n\n"
+ "\n\n---\n\n".join(f"- {e}" for e in raw_entries)
)
resp = client.chat.completions.create(
model=MODEL_NAME,
messages=[
{"role": "system", "content": system_prompt.strip()},
{"role": "user", "content": user_prompt}
],
temperature=0.2
)
consolidated = resp.choices[0].message.content
memory.update_consolidated_note(consolidated)
print("✅ Dream 完成,已更新项目结构化记忆(consolidated_note)。")
# =========================
# 4. 带记忆的对话接口
# =========================
def chat_with_memory(user_input: str, project_name: str) -> str:
"""
在对话时自动加载整理后的项目记忆,让模型基于"项目心智模型"回答。
"""
consolidated_note = memory.get_consolidated_note()
system_prompt = f"""
你是一个持续参与同一项目的 AI 编码助手。
项目名称:{project_name}
下面是当前为止的"项目长期记忆"(由 Auto Dream 整理得到):
----------------
{consolidated_note or "(当前暂无整理后的项目记忆,可以根据后续对话逐步补全)"}
----------------
要求:
1. 回答时要充分利用上述"项目记忆",保持跨会话的一致性。
2. 若你发现记忆中存在明显过时的内容,可以在回答结尾提醒:
- 建议触发一次 'dream_consolidate' 来更新项目记忆。
"""
resp = client.chat.completions.create(
model=MODEL_NAME,
messages=[
{"role": "system", "content": system_prompt.strip()},
{"role": "user", "content": user_input}
],
temperature=0.3
)
return resp.choices[0].message.content
# =========================
# 5. 简单使用示例
# =========================
if __name__ == "__main__":
project = "订单系统重构(Express -> Fastify)"
# 1)模拟 Auto Memory:在日常开发中持续写入记忆
memory.add_memory("最开始后端使用 Express + MongoDB。")
memory.add_memory("准备迁移到 Fastify,并逐步引入 TypeScript。")
memory.add_memory("之前尝试在 Express 中做中间件链路埋点,方案已废弃。")
memory.add_memory("当前决定:统一在 Fastify 层做请求日志与指标采集。")
# 2)在关键阶段(例如框架迁移完成后)触发 Dream 整理记忆
dream_consolidate(project)
# 3)带记忆对话:模型会基于整理后的 project.md 风格记忆回答
answer = chat_with_memory(
"现在我想在 Fastify 里设计一个可扩展的监控中间件,你结合当前项目架构给一个实现思路。",
project
)
print("\n[AI 回答]\n", answer)
这段代码虽然是简化版,但体现了 Auto Dream 的核心思路:
- AI 不只是"回答问题",还参与设计和维护"自己的记忆结构"
- 记忆不是简单堆积,而是周期性重建一个项目知识图谱
你可以很容易扩展它:
- 把
MemoryStore换成数据库 / 向量库 - 区分"用户个人偏好记忆"和"项目技术记忆"
- 针对不同项目使用不同模型组合(例如代码问题用 GPT-5.4,整理记忆用 Claude 4.6)
四、实战使用与注意事项
4.1 何时触发 Dream?
结合视频中作者的实践经验,比较适合触发记忆整理的时机:
-
项目发生关键演进时:
- 框架迁移:Express → Fastify
- 架构升级:单体 → 微服务 / 模块化
- 核心依赖大版本升级
-
大量试错/调试之后:
- 你尝试过多条路径,最终只保留了一条
- 很多旧的调试步骤已经没有价值
-
感到"上下文开始混乱"时:
- 模型重复给过时方案
- 对项目状态描述和你的认知不一致
在自己的系统里,可以:
- 做一个 "整理记忆" 按钮(手动触发)
- 或在达到 N 条 raw_entries 时自动触发一次
4.2 提示词设计注意事项
实现类 Auto Dream 时,system prompt 至少要包含:
-
记忆分类与优先级规则:
- "当出现冲突时,以最新为准"
- "临时性对话细节不要进长期记忆"
-
输出格式约束:
- 推荐统一用 Markdown,方便后续被用户/前端直接展示
- 结构化章节便于后续增量更新
-
时间语义去耦:
- 明确禁止使用"昨天""之前一次"这类描述
- 用"在早期版本中""旧方案是..."来替代
4.3 安全与隐私
项目记忆中经常会包含:
- 业务规则、架构设计
- 潜在敏感的调试日志、账号信息(不该出现,但实际经常被贴)
务必:
- 在写入
raw_entries前做敏感信息过滤/脱敏 - 对存储介质(数据库/文件)进行访问控制
- 区分"本地 dev 助手"和"在线云端助手"的数据边界
技术资源
- (xuedingmao.com) :
对于需要同时使用 Claude / GPT / Gemini 等多家模型,并且希望尝试最新版本(例如 Claude 4.6 系列、GPT-5.4、Gemini 3 Pro)的开发者,统一的 OpenAI 兼容接口能显著简化接入成本。
在本文示例中,我们只改了base_url和api_key就完成了从"单模型"到"多模型聚合平台"的迁移,这对于构建有记忆、可演化的 AI 助手尤其重要------你可以根据任务特性(代码、摘要、规划)灵活选择最适合的模型,而无需重写调用逻辑。
结语
Claude 的 Auto Dream 本质上是在回答一个问题:
"如何让大模型对一个长期演进的项目,形成清晰、稳定、可演化的心智模型?"
对做 AI 应用的开发者来说,关键不在于"抄一个 /dream 命令",而是理解其记忆系统设计模式------并用自己手中的工具(如薛定猫聚合的各类模型)在业务场景中复现甚至优化这个模式。
#AI #大模型 #Python #机器学习 #技术实战