graphify 基准评测全解:确定性知识图谱作为对话长期记忆与代码智能层的开放评测框架
本文以 BENCHMARKS.md 为核心,完整拆解 graphify 的开放评测框架(harness)设计:同模型、同预算、同裁判的公平对比规则,LOCOMO / LongMemEval-S / ERPNext 三大数据集上的检索召回、问答准确率与成本数据,以及可审计的裁判校验方法。读完后你将掌握如何解读一份"可复现、可审计"的检索系统基准报告,并理解 graphify"零 LLM 建图 + 混合检索"在成本与准确率上的取舍逻辑。
一句话结论与评测总览
graphify 的定位在此基准中体现为两点:确定性图 + 混合检索。官方报告(BENCHMARKS.md,最后更新 2026-07-05)的核心结论是:
- graphify 在 LOCOMO 上取得了所有被测系统中最好的检索召回(recall@10 = 0.497),约为 mem0(0.048)的 10 倍,高于 BM25(0.362);
- LOCOMO 问答准确率 45.3%:比 mem0 高 18 个百分点、比 BM25 高 14 个百分点,与 supermemory(49.7%)相差 4.4 个百分点,但摄取(ingest)成本约为对方的十分之一;
- LongMemEval-S 得分 76%,与 dense RAG 并列最佳;
- 构建索引不消耗任何 LLM 额度,摄取成本约 $1.40,约为 supermemory($15.67)的 1/11。
所有系统在同一 harness 内运行:共享同一个模型(Kimi K2.6)、相同的 token 预算、同一个裁判(grader),且裁判经过第二个独立裁判的盲校验(一致率 90.6%,Cohen's kappa 0.81)。
结果速览表(原样继承自 BENCHMARKS.md):
| 套件 | 数据集 (n) | 指标 | graphify | 对照场 | |---|---|---|---| | Memory | LOCOMO (300) | QA 准确率 | 45.3% | supermemory 49.7%(11 倍摄取成本)、bm25 31.3%、mem0 27.3% | | Memory | LOCOMO (300) | recall@10 | 0.497 | bm25 0.362、mem0 0.048 | | Memory | LongMemEval-S (50) | QA 准确率 | 76% | dense RAG 76%、hybrid 74%、mem0 70% | | Cost | LOCOMO 摄取 | 美元 | 约 $1.40 | supermemory $15.67、mem0 $3.48 | | Cost | 建图 | LLM 额度 | $0 | n/a |
评测框架(Harness):让对比真正公平
BENCHMARKS.md 明确:整套 harness 由 graphify 自建,竞争系统(mem0、supermemory)以**适配器(adapter)**形式接入其中,因此每个系统看到的是相同的模型、token 预算与裁判。整条流水线为:
ingest -> index -> search -> answer -> grade
(建索引) (存储) (检索) (Kimi K2.6) (关键事实覆盖率)
harness 分两个套件:
- Memory 套件(
memory/):graphify 的图检索 vs 专用记忆系统(mem0、supermemory)与经典基线(BM25、dense RAG、hybrid RRF)。mem0 和 supermemory 以自托管方式作为适配器运行,并经由代理(proxy)接线,使其内部的 LLM 调用同样走 Kimi K2.6——这是"同模型"规则能落到 LLM 内部环节的关键。 - Code 套件(
crosstool/):一个固定的编码智能体(Claude Opus 4.8,最多 14 轮,保底配备 grep/read/list 加一个代码智能工具)在 ERPNext(frappe/erpnext,约 100 万行生产级 Python 代码库)上回答带评分的问题;另有一个时间序列子套件,包含 2011 至 2026 年间 689 个每周 AST 快照(checkpoint)。
适用前提说明:
memory/与crosstool/属于评测 harness 自身,当前仓库快照中不包含这两个目录;数据集文件(locomo10.json等)也不随仓库分发,harness 文档中约定了预期的本地布局。本文所有数据均以 BENCHMARKS.md 的官方报告为准。
公平性规则(Fairness rules)
这是这份基准报告最值得借鉴的方法论部分,原文四条规则:
- 所有 LLM 角色只用一个模型:Kimi K2.6(经 Moonshot 接入);
- 系统允许时使用同一本地嵌入模型:BGE-m3(1024 维、多语言);
- token 预算完全一致:每次运行都写出一本消费账本(spend ledger),并遵守
--max-spend上限; - 图构建纯 AST、无 LLM(未设置 API key 时产生零额度消耗);嵌入使用本地确定性模型。
其中第 4 条在仓库源码中可以直接找到佐证:pyproject.toml 声明了约 40 个 tree-sitter-* 语法包(Python、JS/TS、Go、Rust、Java、C/C++、Ruby、C#、Kotlin、Scala、PHP、Swift 等),代码解析完全依赖本地 tree-sitter AST——这正是"建图零 LLM 额度"的实现基础。抽取引擎 graphify/extractors/engine.py 中,每条边都携带 confidence 字段,取值 EXTRACTED(源码中显式存在)或 INFERRED(由 graphify 解析推断得出),这种逐边置信标注贯穿整个代码库(如 graphify/extract.py 中出现 40 余处),也是评测可审计性的底层来源。
数据集
- LOCOMO(
locomo10.json,n=300):多会话对话式 QA; - LongMemEval-S(n=50,英文子集):长程对话记忆;
- ERPNext:大型真实 Python 代码库,用于代码智能评测。
LOCOMO 与 LongMemEval 是其他记忆系统公开发布结果所用的同一学术数据集,因此报告中的数据可以横向对照引用。数据集不分发;harness 文档约定了本地目录布局,复现者自行下载后放入该布局即可。
裁判与评分:让分数可审计而非黑箱
评分不采用"整体打分",而是基于关键事实覆盖率(key-fact coverage):
coverage = (covered + 0.5 * partial) / total
即把每道题的正确答案拆成一组"必须包含的原子关键事实"(gold set),由 Kimi K2.6 逐条判断模型答案覆盖了多少;每条判定都引用答案中的原文片段作为依据,因此分数可以逐条复核。
裁判本身也经过验证:在抽样集上对一个独立的第二裁判做盲校验,一致率 90.6%,Cohen's kappa 0.81("实质性一致")。原文对此有一句尖锐的行业对比——"大多数已发表的记忆基准根本不披露裁判校验;我们公开我们的,以便评分本身可被审计"。这一点值得所有做 LLM 评测的团队参考:裁判质量不披露,等于把最大的误差源藏起来。
结果解读:对话记忆套件
LOCOMO(n=300),按 recall@10 排序
| 系统 | QA 准确率 | recall@10 | 摄取成本 |
|---|---|---|---|
| graphify(graph-expand) | 45.3% | 0.497 | 约 $1.40 |
| hybrid RRF | 43.3% | 0.493 | $0(共享索引) |
| graphify(SurrealDB engine) | 43.3% | 0.485 | $0(共享索引) |
| dense RAG | 41.3% | 0.439 | $0(共享索引) |
| BM25 | 31.3% | 0.362 | $0(共享索引) |
| supermemory | 49.7% | 0.149* | $15.67 |
| mem0 | 27.3% | 0.048 | $3.48 |
两个细节决定了这张表该怎么读:
- 加粗行是 graphify 的主配置(graph-expand),不是列最大值——supermemory 的 QA 准确率(49.7%)确实是列最大。
- 基线(BM25/dense RAG/hybrid RRF/SurrealDB 引擎)从 harness 建好的同一索引中检索,因此不再产生独立摄取成本($0)。
*号脚注(嵌入模型混淆项):supermemory 自托管版本锁死其自带的 768 维纯英文嵌入模型,无法换用共享的 BGE-m3,因此它的 recall 列与其他系统不可直接比较;QA 准确率轴(共享 Kimi 读者 + 裁判,只换各系统自己的检索命中结果)才是干净的可比维度。
原文给出的解读:supermemory 原始 QA 高几个点,但摄取成本约 11 倍($15.67 vs $1.40)、检索召回差约 3 倍;graphify 在共享嵌入器的系统里 QA 最佳、检索召回全场最佳,成本约为 supermemory 的十分之一;相比 mem0,graphify 找到正确记忆的频率高约 10 倍,且答案准确率 +18 个百分点。另有一个消融实验:去掉图扩展(seed-only)在同样 $1.40 摄取成本下仍得 42.7%,说明大部分准确率在最便宜配置下就成立了,图扩展是增量收益而非前提。
LongMemEval-S(n=50)
| 系统 | QA 准确率 | recall@10 |
|---|---|---|
| graphify(graph-expand) | 76% | 0.844 |
| dense RAG | 76% | 0.848 |
| graphify(SurrealDB engine) | 74% | 0.833 |
| hybrid RRF | 74% | 0.822 |
| BM25 | 70% | 0.710 |
| mem0 | 70% | 0.344 |
graphify 与 dense RAG 并列 QA 最佳(76%),dense RAG 在召回上以 0.848 对 0.844 略微领先;两者召回都远高于 mem0(0.344)。
结果解读:代码智能与时间序列
ERPNext 代码智能(n=6)
在约 100 万行的 ERPNext 生产库上,给一个固定编码智能体增加一个 graphify 工具(其 grep/read/list 保底能力不变),带评分问题集的关键事实覆盖率从 70.8%(grep + read 基线)提升到 82.0%,每次查询约 140K token。
原文还点出了反模式:把整个仓库塞进每轮上下文(context-stuffing)大约要花 20 倍 token,覆盖率反而更低——这正是 README.md 中"query the graph instead of grepping"的产品主张在评测侧的量化版本。仓库内另有一个轻量级、可直接运行的同方向基准:graphify/benchmark.py 的 token 缩减基准,它从 graph.json 加载图,对每个问题做最多 3 跳的 BFS 子图展开,按每 4 字符约 1 token 估算查询 token 数,与朴素全语料 token 数相比输出缩减倍数——可视为 harness 代码套件"每查询约 140K token"这一结论的仓库内缩小版验证。
时间序列子套件(ERPNext 的 15 年)
689 个每周 AST 快照,2011 至 2026,全部确定性构建、无 LLM:
| 快照 | 节点 | 边 | 文件数 |
|---|---|---|---|
| 2011-06-08 | 3,069 | 2,900 | 1,032 |
| 2026-06-24 | 22,620 | 48,710 | 3,758 |
整个跨度内节点增长约 7 倍、边增长约 17 倍。原文结论:随着代码库膨胀,纯词法检索能找到的答案占比下降,而图检索与语义检索随规模扩展;AST 抽取本身保持稳定。
成本与 token 经济学
BENCHMARKS.md 给出的三条成本结论:
- 建图零 LLM 额度:graphify 用 tree-sitter(确定性,约 40 种语言)加本地嵌入器抽取,建索引不花任何 API token;大多数记忆/语义检索系统则按文档收取 LLM 摄取费。源码佐证即前文所述 pyproject.toml 的 tree-sitter 依赖集与 graphify/extractors/ 下按语言组织的确定性解析器;
- 记忆摄取便宜约 11 倍:LOCOMO 摄取约 $1.40 vs supermemory 的 $15.67;
- 每个数字都有逐次运行的消费账本(per-run spend ledger)支撑,账本写在 harness 输出中,并受
--max-spend约束。
复现方式
按 BENCHMARKS.md 的官方说明:设置 MOONSHOT_API_KEY,将数据集下载到 harness 文档约定的本地布局;每次运行遵守 --max-spend 并写出消费账本。
# Memory(LOCOMO)。这条命令跑的是 SurrealDB-engine 一行(43.3%);
# graph-expand 头条数字(45.3%)是同一 harness 里的另一个适配器。
python memory/runner.py --phase 3 --split locomo --n 300 \
--adapters graphify_v1_surreal --cn natural --workers 6 --max-spend 15
# Code cross-tool(ERPNext)
python crosstool/run.py --repo erpnext --max-spend <budget>
两条需要注意的适用边界:其一,原文特别标注第一条命令复现的是 SurrealDB 引擎配置(43.3%),而非头条的 graph-expand 配置(45.3%),两者是同一 harness 内的不同适配器,复现时要选对 --adapters;其二,memory/、crosstool/ 两个目录及数据集均不在当前仓库快照内分发(数据集也不随仓库再分发),因此本文所有数字的引用依据是 BENCHMARKS.md 的官方报告本身,复现需以 harness 的本地文档布局为准。
延伸阅读:仓库内的对照材料
- README.md 中的 Benchmarks 小节收录了同一组 headline 数字(LOCOMO recall@10 0.497、QA 45.3%、LongMemEval-S 76%、建图 0 额度)并链接回本文核心文档,适合对外引用;
worked/目录(如 worked/example/、worked/httpx/)展示了 graphify 在小型代码库上产出graph.json与GRAPH_REPORT.md的完整示例,可与本文的"图检索"结论对照理解;- graphify/benchmark.py 提供仓库内可运行的 token 缩减测量,是"图查询替代全语料塞上下文"这一经济学论点的本地验证入口。
小结
这份基准报告的价值在于方法论而非单一分数:单一模型贯穿全部 LLM 角色(含竞争系统内部的 LLM 调用)、共享嵌入器消除检索端混淆、--max-spend + 消费账本约束成本、关键事实覆盖率 + 逐条引文的裁判设计、以及公开的第二裁判盲校验(90.6% / kappa 0.81)——五者叠加使"graphify 召回最好、成本最低、建图零额度"这一结论链每一环都可独立复核。对照仓库源码可见其技术底座与报告声明一致:约 40 种语言的 tree-sitter 确定性抽取、逐边 EXTRACTED/INFERRED 置信标注、本地嵌入,这正是其摄取成本能低一个数量级、且"无 API key 即零额度"成立的实现原因。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00