1. 项目概述:为AI编码工具构建持久记忆层
如果你和我一样,每天都在和Claude、Cursor、Copilot这些AI编码助手打交道,那你一定对下面这个场景深恶痛绝:每次打开一个新的对话窗口,AI助手都像一张白纸,对你正在构建的项目一无所知。你得重新解释一遍技术栈,重新粘贴一遍上下文,重新踩一遍上周已经踩过的坑。这种重复劳动不仅浪费时间,更打断了你的心流状态,让AI助手从一个“智能伙伴”退化成了一个需要你不断填鸭的“健忘实习生”。
这就是Memex要解决的核心痛点。Memex不是一个全新的AI助手,而是一个“记忆层”——一个为所有AI编码工具提供持久化项目记忆的基础设施。你可以把它想象成项目专属的“第二大脑”,它独立于任何具体的AI模型或工具,忠实地记录下你在项目开发过程中的所有决策、进展、待办事项和踩过的坑。无论你今天是使用Claude CLI,明天换到Cursor,后天又用本地的Ollama模型,Memex都能确保你的AI助手“记得”之前发生的一切,让你每一次对话都能无缝衔接。
我最初接触Memex是因为一个持续了数周的微服务重构项目。在第三周,当我试图向Claude解释我们为什么选择GraphQL而不是REST,以及之前某个API版本兼容性问题的具体修复方案时,我意识到,我花在“给AI补课”上的时间,可能比实际编码的时间还多。Memex的出现,彻底改变了这种低效的协作模式。
2. Memex的核心工作原理与架构设计
2.1 记忆是如何产生、存储与调用的
Memex的工作流程可以概括为一个清晰的闭环:记录 -> 压缩 -> 存储 -> 检索。理解这个闭环,是高效使用Memex的关键。
当你运行memex start claude时,Memex会启动一个经过包装的Claude CLI会话。这个包装器会做两件事:第一,它会以非侵入式的方式记录下整个会话的完整内容,包括你的每一条指令和AI的每一次回复;第二,它会通过MCP(Model Context Protocol)为Claude动态挂载一系列“记忆工具”。这些工具让Claude在会话过程中,能够实时查询Memex数据库中的历史信息。
会话记录被以两种格式保存:一份是结构化的JSONL文件,便于程序解析;另一份是原始的文本文件,供人工查阅。所有记录都存储在项目根目录下的.memex/sessions/文件夹中,完全本地化。
当你结束会话(无论是输入exit、按Ctrl+C还是直接关闭终端窗口),Memex会触发最重要的环节:记忆压缩。它会将本次冗长的会话记录,通过一次AI API调用,压缩成结构化的、高信息密度的“记忆元数据”。这个过程不是简单的文本摘要,而是有目的地提取以下几类关键信息:
- 项目摘要与技术栈:项目是做什么的?用了哪些主要技术?
- 当前聚焦点:本次会话主要在处理哪个模块或功能?
- 待办任务:达成了哪些共识?还有哪些事情没做完?
- 关键决策及其理由:我们为什么选择方案A而不是方案B?
- 需要避开的坑:在实现过程中遇到了哪些陷阱?如何解决的?
- 重要文件:本次会话涉及或修改了哪些核心文件?
这些结构化的记忆被存入一个SQLite数据库(.memex/memex.db)。当下次你运行memex resume claude时,Claude在启动的瞬间就能获得一个关于项目状态的精炼摘要。更重要的是,在整个新的会话中,Claude可以通过MCP工具按需查询详细的记忆,比如“给我看看关于用户认证模块的所有决策”或者“搜索一下历史上我们是如何处理支付超时问题的”。这种按需检索的方式,完美避开了将所有历史上下文一股脑塞进提示词导致token爆炸的问题。
注意:Memex的“压缩”调用是唯一需要联网的环节。如果你使用Ollama等本地模型,这个环节也可以完全离线进行。所有原始会话记录和压缩后的数据库都只存在于你的本地磁盘,Memex本身没有云端服务器,你的代码和对话记录不会上传到任何第三方。
2.2 基于MCP的开放性与工具生态
Memex的强大,很大程度上得益于它对MCP(模型上下文协议)的深度集成。MCP是Anthropic推出的一种标准协议,旨在让AI模型能够安全、可控地访问外部工具、数据和计算资源。你可以把MCP理解为AI模型的“USB接口”标准。
Memex将自己实现为一个MCP服务器,对外提供了一系列标准化的工具接口(如get_context,get_tasks,search_sessions)。任何兼容MCP协议的客户端(如Claude CLI、Cursor Agent、VS Code Copilot)都可以连接到这个服务器,并调用这些工具。这就实现了Memex的核心设计目标:记忆与工具解耦。
这种架构带来了巨大的灵活性:
- 工具无关性:你的记忆不绑定于Claude。你可以用Claude CLI开始一个功能,用Cursor实现细节,再用本地的CodeLlama模型调试,所有工具访问的是同一份记忆。
- 按需取用:AI助手不需要在每次对话开始时加载全部记忆,而是在需要时通过工具调用获取特定信息,极大节省了上下文窗口。
- 生态兼容:随着更多开发工具接入MCP标准,Memex的适用场景会越来越广,未来可能直接与你的IDE调试器、数据库客户端或日志系统联动。
我自己的工作流是:在项目架构设计阶段使用Claude CLI进行高频、自由的对话;在具体编码时切换到Cursor,利用其强大的代码库感知能力;在需要快速验证某个想法时,则用memex start ollama调用一个轻量级本地模型。整个过程中,我的项目背景、技术决策和未解决的问题始终在线。
3. 从零开始:Memex的安装与多配置方案详解
3.1 基础环境准备与安装
Memex本身是一个Node.js工具,因此安装过程非常 straightforward。首先确保你的系统满足以下条件:
- 操作系统:macOS(目前主要支持,Linux和WSL理论上也可运行,但可能需要处理一些路径差异)。
- Node.js:版本18或更高。你可以通过
node -v命令检查。 - 包管理器:npm、pnpm或yarn均可。
全局安装Memex:
# 使用 npm npm install -g @patravishek/memex # 使用 pnpm pnpm add -g @patravishek/memex # 使用 yarn yarn global add @patravishek/memex安装完成后,在终端输入memex --help,如果看到命令列表,说明安装成功。
安装AI助手客户端: Memex需要与你选择的AI助手CLI配合工作。以最常用的Claude CLI为例:
- 访问 Anthropic 官方文档安装 Claude CLI。
- 完成安装后,在终端运行
claude并进行一次初始认证配置。 - 确保
claude命令可以独立运行。
至此,Memex的核心程序就准备好了。接下来最关键的一步,是配置AI模型提供商,这决定了Memex在“压缩”记忆时使用哪个AI。
3.2 模型提供商配置:从免费本地到付费云端
Memex支持从完全免费离线的本地模型到各种云端API,你可以根据预算、网络环境和性能需求灵活选择。所有配置都通过环境变量完成,无需配置文件。
方案一:完全免费 & 离线 - Ollama这是隐私性最好、成本为零的方案,适合网络环境受限或对数据安全要求极高的场景。
- 从 ollama.com 下载并安装Ollama。
- 在终端拉取一个适合代码总结的模型,
llama3.1或deepseek-coder都是不错的选择:ollama pull llama3.1 - 在你的Shell配置文件(
~/.zshrc或~/.bashrc)中添加以下环境变量:export OLLAMA_BASE_URL=http://localhost:11434 # 告诉Memex通过LiteLLM兼容层调用Ollama export LITELLM_MODEL=ollama/llama3.1 - 运行
source ~/.zshrc使配置生效。
实操心得:在Apple Silicon Mac上,Ollama运行效率很高。虽然模型在代码生成上可能不如Claude-3.5-Sonnet精准,但对于“会话总结压缩”这个任务来说完全够用。压缩一段30分钟的对话,通常只需要几秒钟。
方案二:免费 & 高速 - Groq如果你追求极快的响应速度且不介意联网,Groq的免费API是目前性价比极高的选择。
- 访问 console.groq.com 注册并获取API Key。
- 在Shell配置文件中设置:
export LITELLM_BASE_URL=https://api.groq.com/openai/v1 export LITELLM_API_KEY=gsk_你的密钥 export LITELLM_MODEL=groq/llama-3.1-8b-instant # 或其他Groq支持的模型
Groq的API速度极快,免费额度也足够个人日常使用,是平衡速度、效果和成本的优选。
方案三:免费 & 大上下文 - Google GeminiGoogle AI Studio 提供的Gemini 1.5 Flash模型拥有巨大的上下文窗口(百万token级别),且免费额度充足。
- 访问 aistudio.google.com 获取API Key。
- 在Shell配置文件中设置:
export LITELLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta export LITELLM_API_KEY=AIza你的密钥 export LITELLM_MODEL=gemini/gemini-1.5-flash
如果你的会话非常长,Gemini的大上下文能力能更好地进行全局理解和压缩。
方案四:付费 & 高性能 - Anthropic Claude 或 OpenAI如果你已经订阅了Claude或OpenAI的API,并且追求最优质的压缩总结效果,可以直接使用。
- Claude:
export ANTHROPIC_API_KEY=sk-ant-你的密钥 # 可选,指定模型,默认使用性价比高的haiku export ANTHROPIC_MODEL=claude-3-haiku-20240307 - OpenAI:
export OPENAI_API_KEY=sk-你的密钥 export OPENAI_MODEL=gpt-4o-mini # 可选
方案五:企业级 - LiteLLM代理如果你的公司部署了统一的LiteLLM代理网关,可以通过它来路由所有请求,便于监控和管理。
export LITELLM_API_KEY=企业密钥 export LITELLM_BASE_URL=https://litellm.your-company.com export LITELLM_MODEL=claude-3-haiku # 指定代理后端的模型 export LITELLM_TEAM_ID=你的团队ID # 可选,用于成本分摊配置优先级与自动检测: Memex会按照以下顺序自动检测你使用的提供商:
- LiteLLM/第三方:如果同时设置了
LITELLM_API_KEY和LITELLM_BASE_URL。 - Anthropic:如果设置了
ANTHROPIC_API_KEY。 - OpenAI:如果设置了
OPENAI_API_KEY。 - Ollama:如果设置了
OLLAMA_BASE_URL(并通过LiteLLM_MODEL指定)。
这意味着你可以在不同项目甚至不同终端窗口中,通过临时覆盖环境变量来切换不同的模型提供商,非常灵活。
4. 核心工作流与命令实战指南
4.1 初始化项目与启动首个记忆会话
假设你正在开始一个新项目my-awesome-app。第一步是让Memex为这个项目创建独立的记忆空间。
cd ~/projects/my-awesome-app memex init这个命令会在当前目录下创建.memex/文件夹和其中的memex.db数据库文件。同时,它会自动将.memex/和.mcp.json添加到项目的.gitignore中,确保你的会话记录和记忆不会意外提交到代码仓库。这是一个非常贴心的设计。
接下来,开始你的第一个有记忆的AI编码会话:
memex start claude你会看到熟悉的Claude CLI界面启动,但仔细观察启动信息,会发现多了一行提示,表明MCP工具已连接。现在,你可以像平常一样与Claude对话了。例如:“帮我在这个Next.js项目中初始化一个TypeScript配置,并安装Tailwind CSS。”
整个工作过程:
- 你与Claude讨论技术选型、编写代码、遇到错误并解决。
- Memex在后台安静地记录一切。
- 当你结束会话时(输入
exit或 Ctrl+C),Memex会显示:
这表示它已经调用你配置的AI模型,将本次会话压缩并存储到了记忆库中。✔ Memory updated — focus: Project setup and initial configuration Pending tasks: 2, gotchas: 1, conversation turns saved: 18
重要注意事项:第一次运行
memex start时,如果AI模型提供商配置不正确,压缩环节可能会失败。请务必检查终端是否有API错误输出,并回头确认你的环境变量设置是否正确。压缩失败不会丢失原始会话记录,但记忆库不会更新。
4.2 无缝恢复上下文与高效协作
第二天,或者几个小时后,你回到项目。无需回忆昨天做到了哪一步,直接运行:
cd ~/projects/my-awesome-app memex resume claudeClaude启动后的第一句回复就会是类似这样的内容:
Continuing from our last session — we were setting up the Next.js project with TypeScript and Tailwind. Here's what I have in memory: • Project: my-awesome-app (Next.js 15, TypeScript, Tailwind CSS) • Last session: Initialized tsconfig, installed dependencies, configured Tailwind • Pending tasks: Set up ESLint with specific rules, create layout component • Gotcha: Need to use `@types/node` version 20 for compatibility with Next.js 15 • Current focus: Project setup and initial configuration What would you like to work on next?魔法就此发生。Claude不再是那个“健忘的实习生”,它变成了一个记得所有项目细节的“资深搭档”。你可以直接说:“我们继续完成ESLint配置吧。” 对话可以立即进入深度协作状态,省去了大量的重复解释工作。
在这个过程中,Claude并不是一次性加载了所有历史记录。它只是先获取了一个高度浓缩的摘要。当你们在讨论ESLint具体规则时,如果Claude需要参考之前关于代码风格的决定,它会通过MCP工具get_decisions(focus="code style")来动态查询相关记忆。这种按需加载的机制,是Memex能流畅工作的技术保障。
4.3 高级用法:聚焦查询与记忆管理
随着项目推进,记忆库会越来越丰富。Memex提供了一系列命令来帮助你高效管理和利用这些记忆。
memex focus- 引导记忆的注意力你可以手动设置当前的工作焦点,这会影响记忆压缩和检索时的优先级。
# 设置当前聚焦于用户认证模块 memex focus "user authentication refactor" # 查看当前的聚焦主题和历史 memex focus --list # 输出: # memex — focus history # Current: user authentication refactor # Past topics: # 1. project setup and initial configuration # 2. dashboard UI implementation # 清除当前焦点 memex focus --clear设置焦点后,下次memex resume时,AI获得的上下文摘要以及后续通过工具查询的记忆,都会优先返回与“用户认证重构”相关的内容。AI在会话中也会自动更新焦点,比如当你们讨论从认证转向支付时,它可能会在压缩环节将焦点更新为“支付集成”。
memex status与memex history- 洞察项目状态
memex status:给你一个项目记忆的仪表盘视图,快速了解项目概况、待办事项和已知问题。memex history:列出所有历史会话,包括时间、时长和AI生成的一句话总结,方便你回溯工作历程。
memex search- 深度挖掘记忆这是我最常用的功能之一。当你在一个大型项目中忘记了某个具体问题的解决方案时,全文搜索能快速定位。
memex search "TypeError: Cannot read property" memex search "database migration strategy"搜索结果会显示包含关键词的会话ID和摘要,你可以再用memex show <id>查看完整会话记录。
memex prune与memex forget- 记忆管理
memex prune 14:删除14天前的会话记录,释放磁盘空间,但保留压缩后的核心记忆(任务、决策、坑点)。memex forget:谨慎使用。清除当前项目的所有记忆,回到白板状态。可用--keep-sessions参数只清空结构化记忆,保留原始会话日志。
4.4 与IDE智能助手(Cursor, Copilot)集成
Memex不仅限于CLI工具。通过MCP,它可以与VS Code、Cursor等IDE中的AI助手无缝集成。
方法一:使用VS Code扩展安装官方扩展 “Memex for VS Code”。安装后,扩展会自动检测项目中的.memex目录,并在侧边栏添加一个Memex面板,你可以在这里查看项目记忆、搜索历史。
方法二:通过memex setup-mcp手动配置在项目根目录运行:
memex setup-mcp这个命令会在项目或全局配置中创建MCP服务器连接文件(如.cursor/mcp.json或.vscode/settings.json),告诉Cursor Agent或GitHub Copilot如何连接到本项目的Memex记忆服务器。
配置完成后,在Cursor的AI聊天框中,你只需要输入一句启动咒语:
请从memex MCP加载本项目的上下文记忆。或者更简单:
/context memexCursor Agent就会自动调用get_context()工具,获取项目记忆,并基于此与你对话。这意味着你可以在IDE中享受到与CLI中一样的“记忆延续”体验。
实操心得:我通常会在项目开始时用CLI进行宏观设计和讨论,然后用Cursor进行具体的代码编写和修改。Memex确保了上下文在这两个工具间无损传递。有时候我甚至会让Claude CLI和Cursor Agent就同一个技术问题“隔空对话”,因为它们看到的是同一份记忆。
5. 隐私、安全与企业级部署考量
5.1 数据本地化与隐私控制
Memex的设计哲学是将用户数据的控制权完全交给用户自己。
- 所有数据本地存储:原始会话日志(
.memex/sessions/)和SQLite记忆数据库(.memex/memex.db)都存储在项目目录下。除非你主动分享项目目录,否则数据不会离开你的机器。 - 唯一的网络调用:只有“记忆压缩”环节需要调用一次外部AI API。如果你使用Ollama,这个环节也是离线的。
- 敏感信息过滤:Memex提供了
<memex:skip>标签。在会话中,你可以将密码、密钥、内部URL等敏感信息包裹其中。
在压缩时,被包裹的内容会被替换为连接数据库的配置是: <memex:skip> host: internal-db.prod.company.com user: app_user password: SuperSecretPassword123! </memex:skip>[content excluded by <memex:skip>],确保其永远不会进入长期记忆。但请注意,原始会话日志中仍会保留,所以处理极端敏感信息时仍需谨慎。
5.2 企业级部署与团队协作
对于团队环境,Memex同样能发挥巨大价值,但需要一些额外的规划。
共享记忆库:Memex的记忆是项目范围的。如果团队使用共享的代码仓库,可以将.memex/memex.db纳入版本控制(但通常不建议,因为合并冲突很难处理)。更优雅的方式是将其视为一种“派生数据”,每个开发者维护自己的记忆副本,并通过定期同步的“项目知识文档”来对齐关键决策和坑点。
使用LiteLLM代理:这是企业级部署的最佳实践。让所有开发者的Memex都将压缩请求发送到公司内部的LiteLLM代理网关。这样做的好处是:
- 成本管控:统一管理API密钥和用量计费。
- 安全审计:所有对外部AI模型的请求都经过网关,可以进行日志记录和安全审查。
- 模型统一:确保团队使用相同的模型进行记忆压缩,保证总结质量的一致性。
- 网络隔离:即使使用云端API,数据也只在内部网络和受信任的API端点之间传输。
配置团队成员的开发机,只需让他们设置指向公司网关的环境变量即可。
.gitignore策略:Memex会自动将.memex/目录加入.gitignore。但如果项目初始时没有Memex,后来才加入,或者.gitignore规则被覆盖,可能导致记忆库被意外提交。如果发生这种情况,需要从git历史中移除:
git rm -r --cached .memex/ echo ".memex/" >> .gitignore echo ".mcp.json" >> .gitignore git add .gitignore git commit -m “chore: ignore memex data directory”6. 故障排查、性能优化与实战技巧
6.1 常见问题与解决方案
问题一:运行memex start claude时报错或Claude无法启动。
- 检查点1:确认Claude CLI已正确安装且能独立运行。在终端直接输入
claude测试。 - 检查点2:Memex会清理环境变量以避免冲突。但如果你的系统环境变量非常复杂,可以尝试在一个全新的终端窗口中操作。
- 检查点3:查看Memex的详细日志。设置环境变量
DEBUG=memex*后再运行命令,会输出更详细的调试信息。
问题二:会话结束时不显示“Memory updated”提示,或者提示压缩失败。
- 最常见原因:AI模型API配置错误或额度不足。
- 运行
echo $LITELLM_API_KEY或echo $ANTHROPIC_API_KEY检查密钥是否正确设置。 - 如果你使用付费API,检查账户余额或用量限制。
- 如果你使用Ollama,运行
ollama list确认模型已下载,并运行ollama run llama3.1测试模型是否能正常响应。
- 运行
- 网络问题:尝试
curl你的API端点,检查网络连通性。 - 查看原始日志:压缩失败的会话,其原始记录仍保存在
.memex/sessions/下。你可以手动查看*-raw.txt文件,并使用memex compress命令尝试重新压缩。
问题三:memex resume时感觉AI没有获取到正确的上下文。
- 检查记忆库状态:首先运行
memex status,确认记忆库中是否有上一次会话的记录。 - 检查焦点:运行
memex focus --list,看当前焦点是否与你期望的工作内容相关。如果不相关,用memex focus “你的主题”进行设置。 - MCP连接问题:如果使用的是IDE集成,运行
memex setup-mcp确保MCP配置正确。在Cursor中,可以检查MCP服务器状态。
问题四:磁盘空间占用过大。Memex会保存所有原始会话日志。对于长期项目,这可能会占用几个GB的空间。
- 定期清理:使用
memex prune 30命令,只保留最近30天的详细日志。压缩后的核心记忆(任务、决策等)不会被删除。 - 手动清理:你可以安全地删除
.memex/sessions/目录下较老的.jsonl和-raw.txt文件,这不会影响已压缩的结构化记忆。
6.2 性能优化与使用技巧
为记忆压缩选择合适的模型:记忆压缩是一个“总结归纳”任务,对模型的创造性要求不高,但对理解力和一致性要求高。
- 追求性价比:Claude-3-Haiku 或 GPT-4o-mini 是绝佳选择,成本低,效果足够好。
- 完全离线/隐私优先:Ollama上的
llama3.1或mistral模型完全胜任。 - 处理超长会话:如果单次会话轮数非常多(超过50轮),考虑使用支持超长上下文的模型,如Gemini 1.5 Flash,以确保压缩质量。
利用--focus和--max-tokens参数精细化控制上下文:
memex resume claude --focus “API rate limiting” --max-tokens 500这个命令告诉Memex:恢复会话,但上下文的重点放在“API限流”相关记忆上,并且注入的上下文摘要不超过500个token(约375个汉字)。这能确保在处理大型项目记忆时,提示词不会过于臃肿。
鼓励AI在会话中主动保存观察结果:你可以提示你的AI助手,在讨论出重要结论或发现关键问题时,主动调用save_observation工具。例如,你可以对Claude说:“记住,当我们决定使用Redis缓存而不是内存缓存时,调用save_observation把这个决策和理由存下来。” 这样就不必等到会话结束压缩时才保存,信息更及时准确。
建立项目记忆的“启动清单”:对于新加入项目的开发者,可以引导他们先运行memex status和memex history -n 5,快速浏览项目最重要的5个近期会话摘要。这比阅读冗长的设计文档要高效得多。
将Memex融入代码审查流程:在开始审查一个Pull Request之前,先用memex search搜索相关模块的历史讨论和决策。这能帮助你理解代码变更的上下文和初衷,做出更准确的判断。
Memex本质上是一个杠杆工具,它通过将你与AI协作过程中产生的隐性知识显性化、结构化,并使其可持久化、可检索,极大地放大了AI助手的价值。它解决的不仅仅是一个“忘记上下文”的技术问题,更是在推动一种更可持续、更积累性的的人机协作范式。当你不再需要为每一次对话支付“上下文初始化”的认知税时,你与AI才能真正成为长期并肩作战的伙伴。