☰
graphify记忆层完全指南:save-result与reflect如何让知识图谱“越用越聪明“
2026/10/18 6:42:54 网站建设 项目流程

graphify记忆层完全指南:save-result与reflect如何让知识图谱"越用越聪明"

【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify

graphify 是一款把代码库、文档、SQL 模式与配置文件转化为可查询知识图谱的开源工具,也是 Claude Code、Cursor、Codex 和 Gemini CLI 的/graphify技能。它的记忆层由两个命令组成:save-result负责把每次问答归档为带信号的记忆文档,reflect负责把这些记忆确定性地聚合成一份 LESSONS.md 经验清单——无需向量库、无需 LLM,让 AI 助手在下一次会话开始时自动"想起"哪些来源可靠、哪些路是死胡同。🧠

什么是 graphify 的记忆层

graphify 的核心管线是:扫描 → 抽取 → 建图 → 聚类 → 分析 → 报告 → 导出,全部产物落在graphify-out/目录。而记忆层是在此之上的一圈反馈闭环:

  1. 写入侧:每次 AI 回答完问题,用save-result把问答存档到graphify-out/memory/,并打上一个"结果信号";
  2. 读取侧:会话开始时跑一次reflect,把所有记忆文档压缩成一份graphify-out/reflections/LESSONS.md,AI 读它即可快速定向;
  3. 同步侧:可选安装 git post-commit 钩子,提交后自动重新生成经验文件,保持"记忆"与代码同步。

整个机制是确定性的:同样的输入必然产出字节级相同的 LESSONS.md,不依赖任何大模型,所以又快又便宜(实现见 graphify/reflect.py)。

save-result 三步上手:把问答存成记忆

在 agent 工作流中,一条典型的存档命令长这样(命令定义见 graphify/cli.py):

graphify save-result \ --question "支付重试逻辑在哪里?" \ --answer "在 retry_policy() 中,指数退避最多 3 次" \ --type query \ --nodes retry_policy PaymentService \ --outcome useful

它会生成一个形如query_20260830_120000_支付重试逻辑在哪里.md的文件,落在graphify-out/memory/下,内部结构很朴素:YAML frontmatter(问题、日期、结果信号、来源节点)+ Markdown 正文(问答与结论),方便人直接阅读,也方便下一次--update时被抽取进知识图谱(存档逻辑见 graphify/ingest.py)。

三种结果信号:记忆的灵魂

--outcome参数只有三个取值(OUTCOMES = ("useful", "dead_end", "corrected"),见 graphify/ingest.py):

信号含义对图谱的作用
useful这个答案确实有用相关来源节点加分
dead_end此路不通,别再试相关来源节点减分,列入"已知死胡同"
corrected答案被用户纠正过减分,并把正确版本写入 Corrections 区

答错了也没关系——--correction "正确答案是…"可以把纠正内容一并存档,这正是记忆层最宝贵的数据。

reflect 一键聚合:LESSONS.md 是怎么生成的

graphify reflect # 默认读 memory/,输出 reflections/LESSONS.md graphify reflect --if-stale # LESSONS.md 已是最新则直接跳过(几乎零开销)

reflect会扫描graphify-out/memory/下所有记忆文档(带 frontmatter 的才会被解析,外来 .md 会被自动跳过),按结果信号对每个来源节点做带时间衰减的加减分,最后渲染出五类经验(渲染逻辑见 graphify/reflect.py):

  • Preferred sources(首选来源):被 ≥2 次不同useful结果印证的节点——下次优先从这里查起;
  • Tentative(待验证):只被用过一次且有效的节点——可用,但先核实;
  • Contested(有争议):既有正面又有负面信号的节点——按"最近一次"的胜负判定;
  • Known dead ends(已知死胡同):被标记dead_end的问题——别再重复推导;
  • Corrections(纠正记录):用户纠正过的答案,附正确版本。

两个关键参数:时间衰减与互相印证

  • --half-life-days(默认 30):每条信号的权重每 30 天减半。三个月前的"有用"抵不过最近一次"此路不通"——新鲜的失败比陈旧的成功更有分量(衰减公式见 graphify/reflect.py);
  • --min-corroboration(默认 2):一个节点必须被至少 2 次不同的useful结果印证才能晋升为"首选"。一次存档无法凭空制造一条可信经验——这是防止记忆"自我吹嘘"的设计。

另外两点很贴心:若旁边存在graph.json,经验会按社区(主题)分组展示,同时自动剔除代码中已不存在的节点(经验不会指向已删除的函数);LESSONS.md 被刻意放在reflections/而非 wiki 目录,因为graphify export wiki每次运行都会清空wiki/*.md,放错地方经验文件就会被覆盖(设计说明见 graphify/reflect.py)。

git 钩子自动保鲜:会话开始只需一条命令

安装钩子后(graphify install),每次 git 提交都会自动重跑一次 reflect,让 LESSONS.md 与代码库保持同步(钩子实现见 graphify/hooks.py)。

因此在会话开始时,agent 只需执行:

graphify reflect --if-stale

--if-stale会对比 LESSONS.md 与所有输入文件的修改时间,如果钩子刚刚刷新过它就直接跳过——所以"每次会话都跑一遍"的额外成本几乎为零。完整用法示例见 README.md。

学习覆盖层:.graphify_learning.json 是什么

当 reflect 同时拿到图谱文件时,还会在graph.json旁边写一个派生覆盖层.graphify_learning.json:为每个优选/待验证/有争议的节点记录状态、得分、来源轨迹(最近 5 条问答),并用源码文件的内容哈希做"新鲜度指纹"——文件一改,对应经验自动标记为stale,提示"代码变了,请重新验证"(覆盖层实现见 graphify/reflect.py)。

注意它只是只读投影:graph.json本身这份"结构事实"永远不被写入学习字段,经验与结构严格分离,删除覆盖层即可完全回退。

相关源码与文档清单

文件作用
graphify/reflect.pyreflect 核心:解析、计分、渲染 LESSONS.md、学习覆盖层
graphify/ingest.pysave_query_result:记忆文档的写入端
graphify/cli.pysave-result/reflect命令入口
graphify/hooks.pypost-commit 钩子自动刷新经验文件
graphify/skills/claude/references/query.md各平台 agent 的"存档+反思"工作流约定
tests/test_reflect.py完整测试:从 frontmatter 解析到"第二次会话受益于第一次"的端到端用例
docs/how-it-works.md官方工作原理说明

新手常见疑问 💬

Q:不装 git 钩子能用吗?能。手动跑graphify reflect即可,--if-stale只是让重复运行更省。

Q:LESSONS.md 需要人工维护吗?不需要。它是自动生成物,人工想留经验应写入save-result存档,再让 reflect 聚合。

Q:记忆会无限膨胀吗?时间衰减让旧信号自动"褪色",且代码中已删除的节点会从经验中剔除,记忆层随代码演进自然瘦身。

一句话总结:save-result记住每一次问答的成败,reflect把它们蒸馏成一份带时间权重的经验清单——graphify 由此从"静态知识图谱"升级为"会自我修正的知识图谱"。

【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询