林逍遥 AI林逍遥 AI
登录
记忆持久化

记忆系统:跨对话持久记忆

·6 分钟阅读

默认情况下,每次对话都是独立的——Claude 不记得上次聊了什么。Memory 系统改变了这一点,让 Claude 可以跨对话保存和检索信息,构建个性化的长期记忆。

你将学到什么

  • Claude 记忆系统的工作原理
  • Memory Tool 的使用方式
  • 记忆管理策略
  • 构建具有记忆能力的应用

为什么需要记忆

没有记忆的 AI 助手每次对话都是"初次见面"。用户需要反复说明自己的偏好、项目上下文、工作习惯。

有了记忆,AI 可以:

  • 记住用户偏好("我喜欢用 TypeScript")
  • 积累项目知识("这个项目用 Prisma 做 ORM")
  • 追踪长期任务("上周讨论的重构方案")

Claude Code 的记忆机制

Claude Code 使用文件系统实现记忆:

~/.claude/
├── CLAUDE.md              # 全局指令和记忆
└── projects/
    └── <project-hash>/
        └── memory/
            ├── MEMORY.md          # 项目记忆主文件
            ├── architecture.md    # 架构相关记忆
            └── debugging.md       # 调试经验

MEMORY.md 会自动加载到每次对话的上下文中。Claude 在工作过程中会自动更新这些文件。

记忆的类型

1. 事实记忆(Facts)

- 项目使用 pnpm monorepo
- 数据库是 PostgreSQL + Prisma
- 部署在 Vercel

2. 偏好记忆(Preferences)

- 用户偏好简洁的代码风格
- commit message 不需要 Co-Authored-By
- 优先使用 TypeScript

3. 经验记忆(Lessons)

- 这个项目的 ESLint 配置严格,提交前要 lint
- API 路由需要在 middleware 中鉴权
- 模板字面量中的 $ 需要转义

API 层面的记忆实现

如果你在构建自己的 AI 应用,可以这样实现记忆:

import anthropic
import json

client = anthropic.Anthropic()

class MemoryStore:
    def __init__(self, filepath="memory.json"):
        self.filepath = filepath
        self.memories = self._load()

    def _load(self):
        try:
            with open(self.filepath) as f:
                return json.load(f)
        except FileNotFoundError:
            return []

    def save(self, key, value, category="general"):
        self.memories.append({
            "key": key,
            "value": value,
            "category": category,
        })
        with open(self.filepath, "w") as f:
            json.dump(self.memories, f, ensure_ascii=False, indent=2)

    def search(self, query, limit=5):
        """简单的关键词搜索"""
        results = []
        for m in self.memories:
            if query.lower() in m["key"].lower() or query.lower() in m["value"].lower():
                results.append(m)
        return results[:limit]

    def get_context(self):
        """将记忆格式化为 system prompt"""
        if not self.memories:
            return ""
        lines = ["以下是关于用户的记忆信息:"]
        for m in self.memories:
            lines.append(f"- [{m['category']}] {m['key']}: {m['value']}")
        return "\n".join(lines)

# 使用
memory = MemoryStore()
memory.save("技术栈", "TypeScript + Next.js + Prisma", "project")
memory.save("偏好", "简洁代码风格,少注释", "preference")

# 在对话中使用记忆
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=2048,
    system=memory.get_context(),
    messages=[{"role": "user", "content": "帮我创建一个新的 API 路由"}]
)

记忆管理策略

写入策略: 不要什么都记。只保存稳定的、跨对话有价值的信息。

更新策略: 信息可能变化。记忆应该可以覆盖更新,而不是无限追加。

清理策略: 定期清理过时的记忆。设置有效期或手动审查。

实战练习

Tip: 为你的 AI 应用添加记忆能力。

  1. 实现一个简单的 MemoryStore(如上面的示例)
  2. 在 system prompt 中注入记忆上下文
  3. 测试 AI 是否能利用记忆信息给出更好的回答

关键要点

Note: 本文核心总结

  • 记忆让 AI 从"每次初次见面"变成"了解你的助手"
  • Claude Code 用文件系统(MEMORY.md)实现持久记忆
  • API 层面可以通过 system prompt 注入记忆上下文
  • 记忆要有策略地写入、更新和清理
二维码
微信公众号:lingxiaoyao

关注公众号,获取最新 AI 教程和课程更新

加载评论中...