构建AI长期记忆系统:基于优先级与向量检索的智能上下文管理
2026/5/14 8:55:21 网站建设 项目流程

1. 项目概述:为你的AI大脑构建一个永不遗忘的“外置硬盘”

如果你和我一样,每天的工作已经离不开Claude、ChatGPT这类AI助手,那你一定经历过这种令人抓狂的对话:“等等,这个项目的部署流程我上周不是刚告诉过你吗?”或者“关于代码风格,我们之前已经讨论过,要优先使用TypeScript。”每次开启一个新的会话,AI就像患上了严重的“数字健忘症”,之前所有精心交代的规则、项目背景、个人偏好,统统清零。我们不得不像个复读机一样,一遍又一遍地重复基础信息,宝贵的对话上下文被大量冗余的“背景介绍”所挤占。

这正是我决定深入研究和部署Open Brain Template的核心动因。它不是一个简单的笔记应用,而是一个专为AI时代的工作流设计的可视化记忆中枢。你可以把它理解为AI的“外置大脑”或“长期记忆硬盘”。它的核心使命非常明确:停止让你的AI遗忘你的规则。通过一套基于优先级的记忆加载系统、一个直观的“大脑地图”仪表盘,以及原生的MCP协议支持,它能让你的AI助手在每次会话开始时,都像一个经验丰富的资深同事一样,带着所有必要的上下文“上岗”,而不是一张白纸。

这个项目特别适合两类人:一是像我这样的AI重度使用者,每天与Claude Code、Cursor、ChatGPT Desktop等工具为伴,受够了重复劳动;二是正在构建AI应用的开发者,需要一个稳定、可扩展的记忆层来为你的智能体提供持久化、结构化的知识。它解决了传统文档工具(如Notion、Obsidian)的致命缺陷:文档是扁平的,AI不知道在什么场景下该读取哪一部分,也不知道哪些信息是必须每次加载的“宪法级”规则,哪些只是偶尔查阅的参考资料。

2. 核心设计哲学:从“扁平文档”到“智能上下文”

在深入技术细节之前,理解Open Brain背后的设计哲学至关重要。这决定了它为何有效,以及你应该如何规划你的记忆库。

2.1 传统方法的局限:为什么笔记软件不管用?

我们习惯把重要信息记在笔记软件里,然后在需要时复制粘贴给AI。这种方法存在几个根本性问题:

  1. 无状态性:AI无法自动感知会话状态的变化。你无法告诉它:“这是我们的第三次会议,请记住前两次的结论。”
  2. 无优先级:所有笔记在AI看来权重相同。它无法区分“绝对不能触碰的生产数据库密码”和“某次头脑风暴的随意想法”哪个更重要。
  3. 检索噪声大:即使使用基于嵌入向量的语义搜索,当你问“我们的部署流程是什么?”时,返回的可能是五篇相关度在0.6到0.8之间的文档,其中混着过时的流程、某个特定环境的特殊说明以及一篇讨论部署哲学的文章。AI需要额外消耗大量上下文来阅读理解并筛选,效率极低。
  4. 工具割裂:你在Claude Desktop上设置的规则,无法自动同步到你在VS Code里使用的Cursor AI,更别提手机上的ChatGPT。每个工具都是一个独立的“失忆”个体。

Open Brain的解决方案正是针对这些痛点设计的。它引入了一个四级优先级系统,这是整个架构的基石。这个系统模拟了人类处理信息的模式:有些知识是本能(P1),有些是专业技能(P2/P3),有些则是特定情境下的知识(P4)。

2.2 四级优先级系统详解

这套系统是我在实际使用中调整了无数次后才固定下来的,它直接决定了AI的“开机自检”流程。

  • P1:始终加载(宪法规则)这是你AI大脑的“操作系统内核”。每次会话,毫无例外,必须首先加载。这里存放的是最高级别的约束、偏好和红线。例如:

    • 安全规则:“绝对不要执行任何未经我明确确认的、会修改生产环境的命令。”
    • 核心工作流:“在开始任何编码任务前,请先询问本次任务的最终目标和验收标准。”
    • 个人偏好:“我的代码风格是:使用TypeScript,函数和变量名用camelCase,类名用PascalCase,优先使用async/await而非Promise.then。”
    • 项目红线:“本项目使用PNPM作为包管理器,禁止使用npm install或yarn。” 这些规则通常简短、绝对,是AI一切行为的出发点。在我的配置中,P1规则被控制在5-10条内,确保每次加载的上下文开销最小。
  • P2:参考资料(技能库)这类记忆在会话初期不会加载,但当AI检测到对话进入相关领域时,会被动态加载。它包含了你的技术栈、通用工作流程、团队规范等。例如:

    • “本项目的后端技术栈:Next.js 15 (App Router), Prisma ORM, PostgreSQL, Redis缓存。”
    • “我们的代码提交流程:feat/前缀为新功能,fix/前缀为修复,提交信息需遵循Conventional Commits格式。”
    • “API设计规范:RESTful风格,使用JSON:API标准格式返回数据。”
  • P3:操作手册(运行指南)这是更具体的“如何做”指南。在AI即将执行某个特定、复杂的操作前,需要加载对应的P3记忆。例如:

    • “生产环境部署检查清单:1. 运行所有单元测试 2. 检查环境变量配置 3. 执行数据库迁移脚本 4. 通知运维团队...”
    • “如何为本项目添加一个新的数据模型:步骤1-5,包括Prisma schema修改、生成迁移、更新类型等。”
    • “调试内存泄漏的标准流程:使用Chrome DevTools的Memory面板,创建堆快照对比...”
  • P4:集成文档(外部知识)这类信息只在极少数特定场景下需要,比如配置一个第三方服务、解决某个罕见错误。它们通常不会被主动加载,只有在用户明确提及或AI识别出极端相关时,才通过搜索召回。例如:

    • “AWS S3跨区域复制配置详情。”
    • “Elasticsearch某个特定版本升级的已知问题及规避方法。”

通过这套系统,AI的“启动”过程变得高度结构化:先加载宪法(P1),了解全局有什么(读取目录),然后根据你的任务目标,按需加载技能包(P2/P3/P4)。这极大地提升了上下文的利用效率和对话的针对性。

3. 架构拆解与核心组件部署

Open Brain的架构清晰且模块化,理解每个部分的作用,能帮助你在部署和故障排查时游刃有余。整个系统可以看作一个分层的数据流管道。

3.1 基础层:Supabase作为记忆的“源数据库”

这是整个系统的基石。Open Brain选择Supabase,不仅仅因为它提供了开箱即用的PostgreSQL数据库和身份验证,更关键的是它内置了对pgvector扩展的支持。pgvector允许你在PostgreSQL中直接存储和查询向量嵌入,这是实现语义搜索的核心。

部署要点与避坑经验:

  1. 项目创建:在Supabase控制台创建一个新项目。我建议选择离你主要工作区域最近的数据中心区域,这能显著降低后续查询的延迟。对于亚太用户,新加坡(ap-southeast-1)是个不错的选择。
  2. 启用扩展:项目创建后,进入SQL编辑器,执行以下命令来启用必需的扩展:
    -- 启用pgvector以支持向量搜索 CREATE EXTENSION IF NOT EXISTS vector; -- 启用UUID生成 CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
  3. 获取连接信息:在项目设置 -> API页面,找到你的Project URL(即SUPABASE_URL)和anon/public密钥(即SUPABASE_ANON_KEY)。这两个值将用于前端和MCP服务器的配置。
  4. 表结构:Open Brain的模板已经包含了初始化SQL(通常在supabase/migrations目录下)。你需要运行这些SQL来创建memories表。这个表的核心字段包括:
    • id: 主键UUID。
    • content: 记忆的文本内容。
    • embedding: 由文本内容生成的向量(1536维,对应OpenAI的text-embedding-3-small模型)。
    • priority: 整数,存储P1-P4的优先级。
    • metadata: JSONB字段,用于存储标签、分类、关联项目等额外信息。
    • created_at: 创建时间戳。

注意:Supabase的免费 tier 对于个人使用完全足够,但要注意pgvector索引会占用额外存储空间。定期清理低价值或重复的记忆是个好习惯。

3.2 呈现层:Open Brain Dashboard(前端仪表盘)

这是一个用纯HTML/CSS/JS构建的单页应用,没有复杂的构建步骤。它的价值在于提供了一个可视化界面来管理你的记忆库。

核心功能与操作:

  • 大脑地图:以节点图的形式展示所有记忆,并根据优先级(P1-P4)用不同颜色高亮。你可以一目了然地看到知识结构,并通过点击节点快速编辑。
  • 记忆编辑器:添加或编辑记忆时,你需要填写内容、选择优先级(P1-P4)、并可以添加标签(如#project-alpha#deployment)。标签有助于后续更精细的检索。
  • 语义搜索栏:输入自然语言问题,如“如何重置用户密码”,仪表盘会调用后端接口,执行向量相似度搜索,返回相关记忆。

部署到Vercel:

  1. 克隆Open Brain模板仓库。
  2. 在项目根目录找到index.html,用文本编辑器打开。
  3. 搜索并替换YOUR_SUPABASE_URLYOUR_SUPABASE_ANON_KEY为你在Supabase获取的真实值。
  4. (可选但推荐)在index.html或配套的JS文件中,找到ALLOWED_EMAILS配置,添加你的谷歌邮箱地址,以限制仪表盘的访问权限。
  5. 将整个项目文件夹推送到你的GitHub仓库。
  6. 登录Vercel,点击“New Project”,导入你的GitHub仓库,Vercel会自动检测并部署这个静态站点。部署完成后,你会获得一个https://your-project.vercel.app的链接。

现在,你可以通过这个链接访问你的私人记忆仪表盘了。所有数据都通过Supabase的Row Level Security与你的账户绑定,确保隐私。

3.3 协议层:MCP服务器与AI工具集成

这是让AI“活”起来的关键。Model Context Protocol是一个新兴标准,旨在让AI工具能以标准化的方式访问外部资源和工具。Open Brain提供了一个MCP服务器(通常命名为personal-memory)。

工作原理:当你启动Claude Desktop、Cursor或任何支持MCP的AI工具时,它会加载你配置的MCP服务器。Open Brain的MCP服务器会暴露几个标准工具给AI,例如:

  • remember(content, priority, tags): 保存一条新记忆。
  • recall(query, limit): 根据查询语义搜索并返回相关记忆列表。
  • recent_memories(limit): 获取最近创建的记忆。
  • forget(memory_id): 删除一条记忆。

配置示例(以Claude Desktop为例):在你的Claude Desktop配置文件中(通常是~/.claude/desktop-config.json),添加MCP服务器配置:

{ "mcpServers": { "personal-memory": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-personal-memory", "--supabase-url", "YOUR_SUPABASE_URL", "--supabase-key", "YOUR_SUPABASE_ANON_KEY" ] } } }

配置完成后,重启Claude Desktop。现在,你的Claude就具备了“记忆”能力。你可以直接对它说:“记住,我更喜欢在晚上进行代码审查”,或者“回忆一下我们昨天讨论的API设计规范”。

3.4 智能增强层(可选):Mem0与Memory Steward

这是将系统从“好用”推向“智能”的关键。

Mem0:记忆的“整理大师”Mem0是一个独立的智能层,可以集成在Open Brain和Supabase之间。它不做存储,而是做处理

  • 去重:当你试图保存一条语义上已存在的记忆时,Mem0会识别并建议合并,而不是创建重复条目。
  • 压缩:从冗长的对话记录中,提取出核心事实和指令,保存为简洁的记忆。
  • 增强检索:通过更复杂的算法对检索结果进行重排序,让最相关的结果排在最前面。 集成Mem0通常需要部署其服务,并在MCP服务器配置中指向Mem0的API端点,而不是直接指向Supabase。这能显著提升记忆库的整洁度和检索质量。

Memory Steward:专属的“记忆管家”智能体这是2026年4月更新中引入的革命性功能。你可以将其理解为一个专为你记忆库服务的、常驻的Claude智能体(基于Anthropic Managed Agents)。

  • 它解决了什么?原始向量搜索的“噪声”问题。当你问“部署命令”,原始搜索可能返回一堆包含“命令”、“部署”字眼的片段。而Memory Steward会理解你的意图,将查询重写为“寻找关于生产环境前端部署的完整流程,特别是需要避免的危险命令”,然后并行执行多个不同侧重点的搜索,最后综合所有结果,生成一个精炼、准确、附带引用来源的答案
  • 如何工作?它作为一个独立的Managed Agent运行,暴露一个新的MCP工具memory_query。当AI调用这个工具时,请求会被发送给Memory Steward智能体,由它来完成复杂的查询、分析、合成工作,整个过程可能需要10-40秒,但结果质量远超原始搜索。
  • 部署:这需要你拥有Anthropic API的Managed Agents访问权限。按照项目docs/memory-steward.md的指南,你需要创建一个Managed Agent,并部署一个轻量的“协调器”服务,来处理智能体与你的Supabase数据库之间的通信。

4. 实战:构建并优化你的第一个AI记忆系统

理论说再多,不如动手做一遍。下面是我从零搭建并优化一套个人AI记忆系统的完整流程和心得。

4.1 初始化部署与基础记忆录入

  1. 一键部署基础架构: 我强烈建议按照“Quick Start”的步骤,先快速把核心系统跑起来。用Vercel部署前端,配置好Supabase。这个过程通常在15分钟内可以完成。部署成功后,立即通过仪表盘添加你的前5条P1规则。这就像给新电脑安装操作系统,是第一步。

  2. P1规则撰写技巧

    • 正向陈述:用“请始终…”、“应该…”代替“不要…”。例如,“请始终在给出代码示例前,先解释其背后的逻辑”比“不要直接贴代码”更清晰。
    • 具体化:“代码注释率应达到20%以上”比“多写注释”更可执行。
    • 分场景:可以针对不同场景设规则。例如,通用规则、代码审查规则、写作润色规则等。 我的前5条P1规则包括:安全确认规则、需求澄清规则、代码风格规则、输出格式规则(优先用列表和代码块)、以及一个“元规则”——“如果你不确定,请主动提问”。
  3. 填充P2/P3知识库: 接下来,花1-2小时,系统地录入你的“工作知识”。这就像往新硬盘里迁移数据。

    • P2(参考资料):整理你的技术栈文档、团队通讯录、常用命令速查表、项目背景介绍。
    • P3(操作手册):记录那些你经常需要、但步骤固定的流程。例如:“如何为本项目启动本地开发环境”、“如何运行完整的测试套件并生成报告”、“如何构建和推送Docker镜像”。
    • 善用标签:给每条记忆打上标签,如#project-x,#backend,#devops,#bug-fix-process。标签是后续进行过滤和聚合查询的利器。

4.2 深度集成:让记忆在会话中自动生效

系统跑起来后,下一个目标是实现“无感”记忆加载。

  1. 配置SessionStart Hook(会话自动加载): 这是提升体验最显著的一步。按照docs/session-start-hook.md的指南,创建一个简单的shell脚本(例如session-start-memory.sh),其核心逻辑是调用MCP的recent_memories工具,获取最近N条(比如20条)记忆。 然后,修改Claude Desktop的settings.json,添加SessionStart钩子配置,指向这个脚本。这样,每次你打开Claude Code开始新会话时,它会自动执行这个脚本,将你最近的工作记忆(可能是昨天未完成的讨论、新发现的bug等)作为初始上下文注入。这模拟了人类“接着上次继续”的工作状态。

  2. 掌握/refresh命令模式: AI的上下文窗口就像工作记忆(RAM),长时间对话后,最早加载的规则可能会被“挤出”或弱化。这时,你需要一个“刷新”机制。 我定义了一个简单的约定:当我觉得AI的行为开始偏离既定规则时,我就在聊天框中输入/refresh。 在我的MCP服务器配置中,我实际上将/refresh映射为调用recall工具,并搜索所有P1优先级的记忆。AI收到这个命令和返回的P1规则后,会重新将这些核心规则置于注意力中心。这比手动复制粘贴或开启新会话高效得多。

4.3 高级优化与记忆维护

系统运行一段时间后,维护和优化变得重要。

  1. 记忆去重与合并: 定期使用仪表盘的搜索功能,查看相似主题的记忆。例如,搜索“docker”,可能会发现多条关于Docker构建的P3记忆,其中一些可能已经过时或重复。手动将它们合并成一条更全面、更准确的记忆,并删除旧的。如果集成了Mem0,这个过程会半自动化。

  2. 优先级动态调整: 随着项目发展,一些P3的操作手册可能因为流程固化而变得像P2参考资料一样常用。反之,一些临时性的P4集成文档可能再无用处。每个季度回顾一下你的记忆库,调整优先级,清理无用记忆,保持库的“健康度”。

  3. 利用Memory Steward进行复杂查询: 当你遇到一个复杂、模糊的问题时,就是Memory Steward的用武之地。不要用简单的recall,而是指导AI使用memory_query工具。例如,你可以对AI说:“请使用memory_query工具,帮我找出所有与‘提高应用启动性能’相关的、且涉及前端资源加载优化的历史讨论和解决方案。” Memory Steward会进行多轮搜索、比对和总结,给你一个结构化的答案。

5. 常见问题、故障排查与效能提升

在实际使用中,你肯定会遇到各种问题。以下是我踩过坑后总结的排查清单和提升技巧。

5.1 部署与连接问题

问题现象可能原因解决方案
仪表盘无法加载,控制台报错Failed to fetch1. Supabase URL或Key填写错误。
2. Supabase项目未正确配置CORS。
3. 网络策略限制。
1. 仔细核对index.html中的配置,确保无多余空格。
2. 进入Supabase控制台:Project Settings -> API,在“CORS”设置中添加你的Vercel部署域名(如https://your-project.vercel.app)和本地开发地址(如http://localhost:3000)。
3. 检查本地防火墙或代理设置。
AI工具(Claude/Cursor)提示无法连接MCP服务器1. MCP服务器命令路径或参数错误。
2. 所需Node.js模块未全局安装。
3. 配置文件位置或格式错误。
1. 检查desktop-config.jsoncommandargs是否正确。确保npx可用,或使用绝对路径。
2. 尝试在终端直接运行MCP服务器的启动命令,看是否报错(如模块缺失)。
3. 确认配置文件位于Claude Desktop的正确路径下,且JSON格式正确(无尾随逗号)。
记忆搜索返回结果不相关1. 嵌入模型不一致。
2. 向量索引未创建或创建不当。
1. 确保记忆存入和查询时使用的文本嵌入模型是同一个(通常是OpenAI的text-embedding-3-small)。不同模型生成的向量空间不同,无法直接比较。
2. 在Supabase中为memories表的embedding字段创建HNSW索引:CREATE INDEX ON memories USING hnsw (embedding vector_cosine_ops);这能大幅提升搜索速度和精度。

5.2 使用效能与最佳实践

  1. 记忆内容的质量远大于数量

    • 原子化:一条记忆尽量只讲清楚一件事。例如,“如何配置ESLint”和“如何配置Prettier”分成两条P3记忆,而不是合并成一条“前端代码规范配置”。
    • 结构化:对于流程类记忆,使用编号列表或Markdown表格。AI更容易解析结构化的信息。
    • 包含上下文:在记忆内容中,可以简要说明这条信息的适用场景和边界。例如:“此部署流程仅适用于staging环境。生产环境部署需额外经过安全扫描。”
  2. 会话启动钩子(SessionStart Hook)的优化

    • 默认获取最近20条记忆可能过多。你可以根据你的工作节奏调整。我设置为最近10条,这通常能覆盖过去1-2天的工作上下文,又不会过度占用初始上下文窗口。
    • 可以在钩子脚本中加入简单的逻辑,优先获取带特定标签(如#active)的记忆,或者排除某些低优先级的记忆。
  3. 当记忆库庞大后,如何快速找到所需?

    • 强化标签系统:建立一套你自己的标签体系。例如,按领域分#frontend/#backend,按类型分#bug/#feature/#refactor,按状态分#active/#archived
    • 使用memory_query进行聚合查询:Memory Steward的优势就在于处理复杂查询。你可以让它“找出所有P3级别、且标签包含#deployment#aws的记忆,并按创建时间倒序排列”。
    • 定期维护“目录”或“索引”记忆:创建一条特殊的P2记忆,名为“记忆库导航”,里面用列表形式列出所有主要项目、领域和对应的关键记忆ID或标签。这为AI提供了一个手动“地图”。
  4. 安全与隐私考量

    • Supabase RLS(行级安全):确保你的memories表启用了RLS,并且策略只允许认证用户访问自己的数据。模板通常已包含基础策略,但部署后务必检查。
    • 敏感信息绝对不要将密码、API密钥、私钥等明文存入记忆库。对于必须提及的配置,使用占位符,如DATABASE_URL=postgresql://user:***@host/db,并另有一条私密的P1记忆说明“真实的数据库凭证存储在1Password的‘项目X’条目下”。
    • 仪表盘访问控制:利用ALLOWED_EMAILS或Supabase Auth的更多功能,严格限制谁能访问你的记忆仪表盘。

这个系统运行几个月后,最大的感受是,我和AI的协作从“每回合制”变成了“持续合作”。它记住了我的习惯、项目的细节、我们共同做出的决策。我不再是它的指挥官,更像是它的项目经理,负责制定战略(P1规则)和提供资源(P2/P3知识),而它则能更自主、更精准地执行战术任务。那种无需重复背景、直接切入核心问题的对话流畅感,是任何简单的提示词工程都无法替代的。它真正开始像一个拥有“工作经验”的伙伴。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询