ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

当Cursor和Claude code拥有了记忆!用Graphiti MCP Server搭建时序知识图谱,代码规范与Bug修复历史永久保存

当Cursor和Claude code拥有了记忆!用Graphiti MCP Server搭建时序知识图谱,代码规范与Bug修复历史永久保存 1. 为什么你的 AI 编程助手总是“失忆”用 Cursor 或者 Claude Code 写代码的人大概率都经历过这种循环今天跟它讲清楚“这个项目统一用 zod 做运行时校验不要用 yup”明天开个新会话它又给你生成一堆 yup 的 schema。上周刚修完的那个“Next.js 图片组件在 Safari 下不显示”的坑这周换个页面又踩一遍。你不得不把同样的规范、同样的背景、同样的历史决策一遍又一遍地重新喂给它。这不是模型笨是它没有跨会话的长期记忆。每次对话对它来说都是全新的开始上下文窗口一关之前聊过的全部归零。传统的做法是把项目规范写进.cursorrules或者CLAUDE.md但这类文件是静态的、手写的、不会自己生长的。你修了一个 bug它不会自动记住“这个坑踩过、原因是这个、解法是那个”。下次遇到相似问题AI 依然从零推理。Graphiti MCP Server 想解决的就是这件事。它是一个基于时序知识图谱的记忆服务通过 MCP 协议接入 Cursor 和 Claude Code把你们的交互、代码规范、Bug 修复历史存成“episode”自动抽取实体和关系构建一张会随时间增长的知识图谱。之后 AI 在动手之前可以先查这张图有没有相关的偏好、程序、历史事实。有就照着来没有再推理。适合谁用长期维护同一批项目、有明确团队规范、Bug 修复经验需要沉淀的开发者。如果你只是偶尔写个脚本可能感知不强但如果你每天和 Cursor 泡在一起这套东西的价值会随着使用时间线性上升。下面我把从零到跑通的完整流程拆开讲包括 Neo4j 起库、Graphiti MCP Server 配置、Cursor 和 Claude Code 两端的接入、以及验证记忆是否真的生效的动作。2. 前置准备Neo4j、Python 环境与 TaoToken 接入Graphiti 的存储后端是 Neo4j一个图数据库。你可以理解成普通数据库存的是表格Neo4j 存的是“节点”和“边”。Graphiti 把每次交互抽成实体节点和关系边时间戳挂在边上所以它能回答“三个月前我定的规范是什么”这种带时间维度的问题。环境要求不复杂Python 3.10 以上、Docker、Docker Compose、Neo4j 5.26 以上。包管理推荐用 uv比 pip 快很多。# 安装 uv curl -LsSf https://astral.sh/uv/install.sh | sh # 克隆 Graphiti 仓库 git clone https://github.com/getzep/graphiti.git cd graphiti/mcp_server uv syncNeo4j 直接用 Docker 起最省事避免本地装一堆依赖docker run -d \ --name graphiti-neo4j \ -p 7474:7474 -p 7687:7687 \ -e NEO4J_AUTHneo4j/graphiti123! \ neo4j:5.26起来之后浏览器打开http://localhost:7474用neo4j / graphiti123!登录能看到 Neo4j Browser 就说明库正常。7474 是 HTTP 管理端口7687 是 Bolt 协议端口MCP Server 连的是 7687。接下来是模型 API。Graphiti 在抽取实体和关系时需要调用 LLM所以你得给它一个可用的 API Key 和模型名。这里我用 TaoToken 的接口它兼容 OpenAI 的调用格式配置起来不用改代码只换 base_url 和 key 就行。先去控制台拿一个 API Key控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content拿到 key 之后在graphiti/mcp_server目录下复制环境变量文件cp .env.example .env编辑.env填入 Neo4j 连接信息和模型配置NEO4J_URIbolt://localhost:7687 NEO4J_USERneo4j NEO4J_PASSWORDgraphiti123! OPENAI_API_KEY你的TaoToken密钥 OPENAI_BASE_URLhttps://taotoken.net/api MODEL_NAMEgpt-4.1-mini注意OPENAI_BASE_URL指向 TaoToken 的 API 地址末尾不要带斜杠。模型名按你实际可用的填gpt-4.1-mini这类小模型在实体抽取任务上够用成本也低。3. 可复制的 MCP Server 配置骨架Graphiti MCP Server 支持两种传输方式stdio 和 SSE。stdio 适合本地单机Cursor 和 Claude Code 都能直接拉起进程SSE 适合你想让多个客户端共享一个常驻服务的情况。我先把两种配置都给出来你按需选。3.1 stdio 方式Cursor 配置在 Cursor 里MCP 配置放在~/.cursor/mcp.json全局或项目下的.cursor/mcp.json。stdio 方式的关键是command指向 uv 的绝对路径args里指定工作目录和启动脚本。{ mcpServers: { graphiti-memory: { transport: stdio, command: /Users/你的用户名/.local/bin/uv, args: [ run, --isolated, --directory, /Users/你的用户名/graphiti/mcp_server, --project, ., graphiti_mcp_server.py, --transport, stdio ], env: { NEO4J_URI: bolt://localhost:7687, NEO4J_USER: neo4j, NEO4J_PASSWORD: graphiti123!, OPENAI_API_KEY: 你的TaoToken密钥, OPENAI_BASE_URL: https://taotoken.net/api, MODEL_NAME: gpt-4.1-mini } } } }两个路径要改成你自己的command里的 uv 路径用which uv查--directory用pwd在graphiti/mcp_server目录下查。路径写错是 stdio 方式最常见的失败原因Cursor 不会给你友好提示只会静默连不上。3.2 stdio 方式Claude Code 配置Claude Code 用命令行添加 MCP一条命令搞定claude mcp add-json graphiti-memory { type: stdio, command: /Users/你的用户名/.local/bin/uv, args: [ run, --isolated, --directory, /Users/你的用户名/graphiti/mcp_server, --project, ., graphiti_mcp_server.py, --transport, stdio ], env: { NEO4J_URI: bolt://localhost:7687, NEO4J_USER: neo4j, NEO4J_PASSWORD: graphiti123!, OPENAI_API_KEY: 你的TaoToken密钥, OPENAI_BASE_URL: https://taotoken.net/api, MODEL_NAME: gpt-4.1-mini } }加完之后用claude mcp list确认graphiti-memory在列表里。3.3 SSE 方式常驻服务 多客户端共享如果你想让 Cursor 和 Claude Code 同时连同一个记忆库SSE 更合适。先手动起服务cd graphiti/mcp_server uv run graphiti_mcp_server.py --model gpt-4.1-mini --transport sse服务默认监听 8000 端口SSE 端点是http://localhost:8000/sse。然后 Cursor 配置改成{ mcpServers: { graphiti-memory: { transport: sse, url: http://localhost:8000/sse } } }Claude Code 对应命令claude mcp add --transport sse --scope user graphiti-memory http://localhost:8000/sse--scope user表示对所有项目生效不加则只对当前项目生效。4. 验证请求让记忆真的跑起来配置写完不代表能用得验证。分三步先确认 MCP 工具被识别再写入一条记忆最后跨会话读出来。4.1 确认工具列表在 Cursor 里打开设置找到 MCP 面板看graphiti-memory是否显示为绿色已连接。点开应该能看到它暴露的工具包括add_episode、search_nodes、search_facts等。如果显示红色或灰色先去看第 5 节的排查。Claude Code 里用claude mcp list看到graphiti-memory后面是 connected 即可。4.2 写入第一条记忆在 Cursor 的对话里直接说请帮我记住这个项目统一使用 zod 做运行时校验禁止使用 yup。AI 应该会调用add_episode工具把这条信息存进图谱。你可以去 Neo4j Browser 里跑一句 Cypher 确认MATCH (n) RETURN n LIMIT 25应该能看到新生成的节点类型可能是Preference或Procedure具体取决于 Graphiti 的抽取结果。4.3 跨会话读取关掉当前对话新开一个会话问这个项目用什么做运行时校验如果配置正确AI 会先调用search_nodes或search_facts然后回答“zod”。这一步是整个方案的核心价值验证——它证明记忆真的跨会话持久化了而不是靠当前上下文窗口撑着。4.4 用 Cursor Rules 强化行为光有工具还不够你得告诉 AI 什么时候该查、什么时候该存。在项目根目录建.cursor/rules/graphiti.mdc写入行为指令--- description: Graphiti 记忆使用规范 globs: alwaysApply: true --- ## 开始任务前 - 先用 search_nodes 查找相关偏好和程序 - 用 search_facts 查找相关事实关系 - 按实体类型过滤优先看 Preference 和 Procedure ## 发现新信息时 - 用户表达偏好或需求立即用 add_episode 存储 - 长需求拆成短逻辑块分别存 - 更新已有知识时明确标注是更新 ## 工作过程中 - 遵循检索到的偏好 - 严格按检索到的程序执行 - 与历史事实保持一致这段规则的作用是让 AI 形成“先查后做、边做边存”的习惯。没有它AI 可能整场对话都不碰记忆工具。5. 本篇常见错排查配置过程中最容易卡住的几个点我按出现频率排一下。MCP 显示未连接日志里报command not found。九成是command里的 uv 路径写错了。stdio 方式下 Cursor 不会继承你 shell 的 PATH必须写绝对路径。用which uv查出来填进去。同理--directory也必须是绝对路径。Neo4j 连接被拒。检查三件事容器是否在跑docker ps、端口是否映射正确7687 是 Bolt不是 7474、密码是否和NEO4J_AUTH一致。如果之前用别的密码起过容器得删掉重建Neo4j 的密码只在首次初始化时生效。调用工具时报模型相关错误。多半是OPENAI_BASE_URL或OPENAI_API_KEY的问题。确认 base_url 是https://taotoken.net/api末尾无斜杠确认 key 没有多余空格。如果模型名填错也会报 404 之类的错误换成你账号下确实可用的模型。记忆写进去了但搜不出来。Graphiti 的检索是语义 关键词混合的刚写入的 episode 需要一点时间做索引。如果立刻搜不到等十几秒再试。另外确认group_id是否一致——如果你在多项目间切换不同 group_id 的数据是隔离的搜不到可能是搜错了分组。SSE 方式下 Cursor 连不上。确认服务确实在跑且监听的是 8000 端口。如果 8000 被占用启动时加--port换一个同时改 Cursor 配置里的 url。SSE 方式下服务必须先起再开 Cursor顺序反了会连不上。Claude Code 里工具不出现。用claude mcp list看状态。如果是 failed用claude mcp get graphiti-memory看详细错误。常见原因是 JSON 格式在 shell 里被转义搞坏了建议把 JSON 写进文件再用claude mcp add-json graphiti-memory $(cat config.json)的方式加。6. 把记忆变成习惯接入文档与长期编码方案跑通之后真正决定这套东西价值的不是配置而是你愿不愿意持续往里存、持续从里查。我的做法是把它嵌进日常节奏每次修完一个非平凡的 bug顺手让 AI 存一条“问题—原因—解法”的 episode每次定下一个新规范立刻存成 Preference每次开始新任务前先让它搜一遍相关记忆。如果你还在选模型和配 key 的阶段可以先去模型对话页面试试接口通不通模型对话https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content需要管理多个项目的 key、或者给团队分配额度在控制台的 API Keys 页面操作API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content如果你打算把 Cursor、Claude Code 这类工具长期用于编码和 Agent 任务Coding Plan 比按量计费更划算适合高频调用Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content接入过程中遇到协议或参数问题文档里有完整的接口说明接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentClaude Code 用户如果走 Anthropic 兼容通道参考这个页面ClaudeCodeAnthropichttps://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content最后说一个我自己的使用细节Graphiti 的add_episode支持把长文本拆成短块存我一般会把一次完整的 bug 修复拆成三条——现象、根因、解法。这样后续检索时命中率更高因为每条 episode 的语义更聚焦。存的时候带上项目名和模块名作为标签搜的时候用center_node_uuid围绕某个核心节点扩散能快速拉出一整片相关记忆。这套习惯坚持两周左右你会明显感觉到 AI 开始“记得住事”了。
返回列表