Memory 记忆系统
4.6K字·12分钟·
短期/中期/长期记忆、知识沉淀、跨会话记忆
引言
CodeBuddy 的 Memory 记忆系统是其区别于普通 AI 助手的核心能力之一。它让智能体能够"记住"你的偏好、项目规范、历史决策,在跨会话间复用知识,真正成为你的长期开发伙伴。
想象一下:你花了半小时向 AI 解释项目的认证架构和编码规范,结果新会话又要重新说明——这就是没有记忆系统的痛点。CodeBuddy 的三层记忆架构彻底解决了这个问题。
一、三层记忆架构详解
1.1 架构总览
| 记忆层级 | 生命周期 | 存储范围 | 优先级 | 典型内容 |
|---|---|---|---|---|
| 短期 Session | 当前会话 | 单次对话 | 最高 | 当前任务上下文、临时变量 |
| 中期 Project | 项目级持久 | 项目目录 | 高 | 编码规范、架构决策、API 约定 |
| 长期 Organizational | 跨项目共享 | 全局配置 | 中 | 通用最佳实践、团队偏好 |
1.2 短期 Session 记忆
Session 记忆存在于当前会话的上下文窗口中,会话结束即消散。它负责维护当前对话的连贯性。
# Session 记忆工作原理:
# 用户:"帮我创建一个用户注册接口"
# AI 记住了:正在创建注册接口,使用 Express + TypeScript
# 用户:"再加上邮箱验证"
# AI 知道"加上"是指给注册接口加,而不是其他东西
特点:
- 作用范围:单次对话
- 存储方式:上下文窗口
- 生命周期:会话结束自动清除
- 无需手动管理
1.3 中期 Project 记忆
Project 记忆是 CodeBuddy 最核心的记忆层。它将项目的关键信息持久化存储,跨会话保持可用。
# 存储位置:.codebuddy/memory/project.md
## 项目架构
- 前端:React 18 + TypeScript + Vite
- 后端:Express + Prisma + PostgreSQL
- 部署:CloudBase Serverless
## 编码规范
- 使用 camelCase 命名变量和函数
- 使用 PascalCase 命名组件和类
- 所有 API 返回统一格式:{ code, data, message }
## 架构决策记录
- 2024-01-15: 选择 JWT 而非 Session 认证,因为需要支持移动端
- 2024-01-20: 使用 Zod 做请求参数校验
管理命令:
# 查看当前项目记忆
/memory show
# 添加项目记忆
/memory add "数据库使用 PostgreSQL,连接池大小为 20"
# 清除过时记忆
/memory clear --expired
1.4 长期 Organizational 记忆
Organizational 记忆存储在用户全局配置目录中,适用于跨项目的通用知识。
# 存储位置:~/.codebuddy/memory/global.md
## 通用偏好
- 代码风格:简洁优先,避免过度抽象
- 注释风格:只在复杂逻辑处添加注释
- 测试偏好:Jest + React Testing Library
## 常用技术栈
- 包管理器:pnpm
- 状态管理:Zustand
- CSS 方案:Tailwind CSS
二、记忆存储位置与格式
2.1 文件结构
项目根目录/
├── .codebuddy/
│ ├── memory/
│ │ ├── project.md # 项目级记忆
│ │ ├── conversations/ # 历史对话摘要
│ │ │ ├── 2024-01-15.md
│ │ │ └── 2024-01-16.md
│ │ └── index.md # 记忆索引
│ └── config.json
用户目录/
└── .codebuddy/
└── memory/
└── global.md # 全局记忆
2.2 记忆格式规范
记忆文件使用 Markdown 格式,便于人类阅读和编辑:
# 项目记忆
## 上下文
- 项目类型:全栈 Web 应用
- 团队规模:5 人
- 开发阶段:中期开发
## 关键决策
| 日期 | 决策 | 原因 | 影响范围 |
|------|------|------|----------|
| 2024-01-15 | 使用 JWT | 支持移动端 | 全局认证模块 |
| 2024-01-20 | 使用 Zod | 类型安全 | 所有 API 接口 |
## 常见问题
- 数据库连接超时:检查连接池配置,当前设置为 20
- CORS 跨域错误:确保前端域名已添加到白名单
三、记忆管理命令详解
3.1 查看记忆
# 查看所有记忆概览
/memory
# 查看项目记忆详情
/memory show --project
# 查看全局记忆
/memory show --global
# 搜索记忆内容
/memory search "认证方案"
3.2 添加记忆
# 添加项目记忆
/memory add "API 接口版本号为 v1,所有接口以 /api/v1/ 开头"
# 添加带标签的记忆
/memory add --tag "database" "主从复制延迟阈值为 5 秒"
# 从对话中自动提取记忆
/memory extract
3.3 清除记忆
# 清除过时记忆
/memory clear --expired
# 清除特定标签的记忆
/memory clear --tag "temp"
# 重置项目记忆(谨慎使用)
/memory reset --project
四、跨会话知识复用案例
案例一:多人协作项目
会话 1 - 项目初始化(周一):
/memory add "本项目使用 Next.js 14 App Router"
/memory add "数据库 ORM 使用 Prisma,数据库为 PostgreSQL"
/memory add "API 设计遵循 RESTful 规范"
/memory add "错误处理使用统一的 ErrorHandler 中间件"
会话 2 - 新功能开发(周三新会话):
用户:帮我创建一个文章列表接口
CodeBuddy:(自动读取 Project Memory)
好的,基于项目的 Prisma + PostgreSQL 技术栈和 RESTful 规范,
我将创建 GET /api/v1/articles 接口,包含分页和筛选功能。
案例二:编码规范传承
# 第一次会话中建立规范
/memory add "组件文件使用 PascalCase 命名:UserProfile.tsx"
/memory add "工具函数使用 camelCase 命名:formatDate.ts"
/memory add "常量使用 UPPER_SNAKE_CASE:MAX_RETRY_COUNT"
# 后续会话中 CodeBuddy 自动遵循这些规范
# 用户:"帮我创建一个日期选择器组件"
# AI 会自动命名为 DatePicker.tsx(而非 date-picker.tsx)
五、Memory 与 Rules 的关系
对比表格
| 特性 | Memory | Rules |
|---|---|---|
| 主要用途 | 记录事实和上下文 | 定义行为规范 |
| 内容类型 | 项目信息、决策记录、偏好 | 编码规范、工作流程 |
| 修改频率 | 频繁更新 | 相对稳定 |
| 格式 | 自由 Markdown | 结构化规则 |
| 示例 | "数据库用 PostgreSQL" | "所有函数必须有错误处理" |
| 触发方式 | 手动添加或自动提取 | 每次对话自动加载 |
协同工作模式
# Memory 记录事实
/memory add "项目使用 Tailwind CSS v3"
/memory add "设计系统定义在 src/design-tokens/ 目录"
# Rules 定义规范
/rules add "使用 Tailwind 时优先使用语义化类名"
/rules add "颜色值必须引用 design-tokens 中的变量"
最佳实践:Memory 存储"是什么"(What),Rules 定义"怎么做"(How)。两者互补,形成完整的项目知识体系。
六、常见陷阱与最佳实践
常见错误
- 记忆过时未清理:项目重构后旧的记忆仍存在,导致建议不准确
- 记忆过于笼统:写"代码要规范"不如写"函数不超过 50 行,圈复杂度不超过 10"
- 敏感信息写入:不要在记忆中存储密码、密钥等敏感信息
- 记忆冲突:不同会话添加了矛盾的记忆,导致 AI 困惑
最佳实践
- 定期维护:每月审查一次 Project Memory,清理过时内容
- 具体明确:记忆内容越具体,CodeBuddy 的建议越准确
- 分层管理:项目特有信息放 Project Memory,通用偏好放 Global Memory
- 配合 Rules:记忆记录事实,规则定义行为
- 使用标签:给记忆打标签便于分类管理和检索
总结
CodeBuddy 的三层记忆架构让智能体真正成为你的"长期搭档":
- Session 记忆:维护当前对话连贯性,无需手动管理
- Project 记忆:持久化项目关键信息,跨会话复用
- Organizational 记忆:存储跨项目的通用偏好
- 协同工作:Memory 记录事实,Rules 定义规范,两者互补
- 定期维护:保持记忆的准确性和时效性
下一章我们将深入探索 Plan 模式,了解 CodeBuddy 如何通过苏格拉底式提问帮助你理清复杂需求。