Graph Engineering

把单一 LLM 调用拆分为多个专业化节点(搜索/分类/验证/合成),通过 fan-out、barrier、reduce、router、verifier 等模式控制信息流动的工程范式。2026-08 由三源共同锚定:Karpathy 的理论框架(研究笔记 PDF)、Claude Code 应用版(完全指南)、团队工程版(Harness 让规则落地)。

核心论断

每种架构外化不同瓶颈(Karpathy):

  • loop 外化迭代与评估
  • chain 外化任务顺序
  • swarm 外化并行搜索与角色专门化
  • DAG 外化实验谱系
  • 知识图谱外化共享事实/溯源/跨会话记忆

最深刻洞察:瓶颈往往不是下一个模型调用,而是记忆与评估的放置位置。

三步演进(Karpathy)

Vibe coding(人表达意图模型写)→ Agentic engineering(人指定/编排/验证/对质量负责)→ Graph engineering(agent 通过类型化可查询的工作与知识图共享持久状态)。

钻石图形状(Claude Code 应用版)

扇出(独立工作)→屏障(决策点,检查运行状态/部分失败可见)→归约(准备证据,去重同时保留可追溯性 sourceFindingIds)→综合。

工程原则

  • Graph 工程从账单开始:控制计算发生位置、每决策由哪个模型处理、不确定发现如何移动;二十个智能体并行会得重叠报告+大账单。
  • 节点原则:一个节点做一次决策;一条边携带结构化证据(JSON schema 带 file/lines/dependency/confidence/evidence);有些节点是普通代码(合并/去空/去重/排序用确定性 JS,不浪费 token)。
  • 独立验证:审查者任务不是改进原答案而是搜索它可能不完整或错误的原因;可要求达成一致(votes.filter(approve).length >= 2)。
  • 模型分层:提取/基本分类/窄搜索用快层级,架构审查/对抗验证/最终综合用强模型。
  • Git worktree 隔离并行编码;收敛循环对已看过的项去重(含被拒绝的),dryRounds<2 停止。

图四不变量(Karpathy 知识图谱)

①每 claim 有 source 或标 inference;②每 artifact 有 authoring run 和 version;③每 evaluation 识别 rubric;④每 superseded 对象保持可寻址。

Anthropic 工作流模式映射

2024 五模式(Prompt Chaining/Routing/Parallelization/Orchestrator-Workers/Evaluator-Optimizer)→ 2026 Dynamic Workflows(Claude 写 JS 编排程序,最多 16 并发子 agent,硬上限 1000/workflow;Bun runtime port 案例:约 75 万行 Zig→Rust 用 11 天,99.8% 测试通过)。

关联与张力

  • 与 OpenMontage 的”无编排器”模式()形成对照——Graph 工程用显式 fan-out/barrier/reduce,OpenMontage 用隐式 agent 自主调度。
  • Harness Engineering 互补——Graph 工程是分布式编排侧,Harness 工程是流程约束/门禁侧。

⚠️ autoresearch 的小 harness 之所以有效是因为仓库和指标有界,不证明 agent 能安全自修改生产前沿训练系统;知识图谱不把 claim 转为 truth(只保留 claim/source/relationship 供检视),且反映其语料(偏见语料产偏见图)。

补充:codila 五步课(2026-07-21,使用者视角)[2026-08-06]

来源:codila Graph Engineering 五步课(X Article,250 万阅读;与 Karpathy PDF 互补——PDF 给理论框架,本篇给实操课程与失败模式)。

  • Goodhart 动机:单 loop 只盯自身指标(ticket resolution rate 上升而满意度下降);答案不是更好的 loop,而是”a graph of loops——循环互相监视和纠正”。
  • 边的识别法:对每个”and then”问——下一步真的读上一步输出吗?读→真边保序;不读→并行跑。
  • Dynamic Workflows 实操:需 Claude Code v2.1.154+;单 workflow 上限 1000 agents / 16 并发(Bun 的峰值 64 agents = 约 50 个 workflows 并行,与 16 并发上限可调和);“零 token”应理解为”省的是协调,不是工作量”。
  • 两种失败模式:① 图自我一致(verifier 必须拿干净上下文,查”测试真的过了没”而非”agent 说完成了没”);② agent 互相踩踏(独立 worktree + 禁用不安全命令)。扇出三问:每个 agent 在哪干活?结果怎么合并?意见冲突怎么办?
  • 锚点三件套:真跑过的测试、基于证据的 verifier、agent 无权调整的冻结规则——“图只与其中拒绝移动的部分一样诚实”。四类任务别画图:任务小/需逐步审批/探索期/步骤真串行。

⚠️ 矛盾 [2026-08-06] Bun 移植 Zig 行数两源不一致:codila 文称约 53.5 万行 Zig → 100 万+ 行 Rust;本页与 Karpathy PDF 记录约 75 万行。待以 Simon Willison 原帖(2026-07-08)核对。

补充:Codez 14 步实操手册(Datawhale 整理)[2026-08-10]

来源:Graph Engineering 实操手册:Codez 14 步Datawhale 整理,原作者 Codez,X 博主全网 570w 人看过)。本主题第 5 个源,补上颗粒度最细的代码级操作手册:从”动手前四问”经四核心构件(Nodes/Edges/Shared State/Failure Routing)走完 14 步——分清节点和边 → 定契约 → 扇出/扇入/菱形拓扑 → 路由/验证/隔离 → 循环收敛/模型分层/拓扑选择 → 最后让 Claude 自己画图(Dynamic Workflows)。

  • 动手前四问 + 附加题:① 任务真能拆出清晰角色吗;② 有真正可并行的子任务吗;③ 单个 agent 上下文装得下全部背景吗(装得下就别拆——拆分是为了腾上下文不是为好看);④ 失败后负担得起跳转分支的成本吗。附加题比四问都重要:你已经有一个跑得稳的单体 loop 了吗?没有先别建图——“图是循环的组织方式,不是循环的替代品”
  • 契约化节点:节点 = 输入有边界、输出有边界、只干一件事;workflow 里靠 JSON schema 在工具调用层强制执行(agent() 配 schema,subagent 只能返回校验过的结构化数据,格式不对 Claude 自己重试)。“边也当数据契约”:按数据命名而非按顺序命名,边活在普通 JavaScript 里(压平/去重/过滤)——“很多人花模型 token 做的事,其实就是一条边,而边是免费的”。
  • 屏障经济学:主力形状”派发 → 归约 → 合成”(fan-out → reduce → synthesize);parallel() 是一道屏障(抛错函数解析成 null 而非拖垮批次,记得 .filter(Boolean),并发按核数封顶),归约层零 token。默认用 pipeline()(条目各自独立过各阶段,快的不用等慢的),只有真需要全集同时到齐(跨集合去重、按总数提前退出)才用 parallel()——“代码更干净""阶段感觉是分开的”都不是用屏障的理由。
  • 收敛循环的独有陷阱:必须”跑到干为止”(连续 K 轮无新发现才停),最易踩的坑是拿”已确认结果”而非”见过的一切”去重——被否掉的发现会每轮重新冒出来,变成”专门花钱反复发现同一批死胡同的机器”。
  • 模型分层覆盖:重复性节点(抽字段、工单分类)降到便宜模型,判断力节点(合成、裁定)留高档位——agent() 的 model 选项单点覆盖,不动图的形状就能把账单从贵变便宜。

与 codila 五步课的对照:两篇高度互文、同一论点的两种表述——都警告别把”然后”当边、线性链是退化的图、verifier 要对抗式、worktree 隔离、按 s 保存 workflow。本篇(14 步)独有增量:pipeline() vs parallel() 屏障经济学、模型分层单点覆盖、“对见过的一切去重”陷阱、JSON schema 契约强制;codila 课更偏范式布道与失败模式清单。两篇的门槛判断可合并为”何时不要建图”清单(loop 未跑稳的个人开发者、线性依赖拆不开的任务、瓶颈在协调开销而非单节点能力的团队)。

作为 Loops 的加速器象限:“两年来多 agent 协作的杠杆一直在单个 loop 上(更好的 verifier、更稳的退出条件、更干净的状态文件),而现在,把这些 loop 怎么连起来,成了新的护城河”——Graph 是跑稳 loop 之后的加速器,不是 loop 的替代品。参见 Loop Engineering 2026