图工程实战:使用 Claude 从零构建 Agent 图架构的 14 个核心步骤

深入介绍将线性 Agent 工作流重构为并行图架构的 14 步路线图,涵盖节点契约、数据边、并行扇出、屏障扇入、菱形模式、条件路由、对抗性验证节点、资源隔离、环路收敛与模型分层路由等核心工程实践。

本文目录16 个章节

绝大多数人上手搭多步骤 Agent,最后都只画出了一条单向串行的直线:第一步、第二步、第三步——后一步非得礼貌地死等前一步跑完才肯动。

10 个人里有 9 个稍加盘点就会发现:里面至少有一半的步骤压根用不着等待。

不走路由,不做分支,更不搞并发。所有任务全在傻排队——单核脑子、单重上下文、一次只咬一件事,直到把窗口活生生塞爆,Agent 连自己最初要干啥都忘得精光。

这份 14 步路线图,就是要帮你把单排长蛇阵彻底重构成图架构:拉起 Agent 舰队横向并发扇出,自动挑刺校验,最终收敛出单体 Agent 压根吃不下的重磅成果。

TEXT
               Single Line vs. Graph Architecture

  LINEAR (Single-file queue)
  ┌────────┐     ┌────────┐     ┌────────┐
  │ Step 1 │ ──> │ Step 2 │ ──> │ Step 3 │  (Sequential & Slow)
  └────────┘     └────────┘     └────────┘

  GRAPH (Parallel fleet)
                 ┌────────┐
              ┌─>│ Node A │─┐
  ┌────────┐  │  └────────┘ │  ┌────────┐
  │Dispatch│──┼─>│ Node B │─┼─>│ Merge  │  (Concurrent & Fast)
  └────────┘  │  └────────┘ │  └────────┘
              └─>│ Node C │─┘
                 └────────┘
单向串行队列与并行图架构对比

有个硬核转变绝大多数人都没说透:提示词不过是一句话,循环不过是原地转圈,运行底座只是 Agent 脚下的地板。

但任务本身的逻辑形态——谁先谁后、谁能并行、谁非得等全套拿齐——这种形态天生就是一张图。节点负责动脑推演,边负责搬运成果。

Claude Code 刚出的新武器直接把构图能力给到了底层:动态工作流(Dynamic Workflows)。

Claude 亲自写一段纯 JavaScript 编排脚本,接着拉起一整支 Agent 舰队分工去干——而中间的调度协调完全是代码控制,消耗 0 个模型 Token,压根不用浪费对话。

01. 节点管干活,边管流转

一张图归根结底就 2 样东西,把这两样揉碎搞透,大部分伪概念瞬间烟消云散。节点就是独立干活的单元:1 个 Agent,1 项有界任务,1 份明确输入,1 份明确输出。

边只代表纯粹的依赖:无非就是拿这 1 个节点的产出来做那 1 个节点的输入,再无其他。

TEXT
                     Nodes & Edges Anatomy

    ┌─────────────────────────┐           EDGE            ┌─────────┐
    │          NODE           │       (Dependency)        │         │
    │  • One agent            │     Data Flow (JSON)      │ Node B  │
    │  • One bounded job      │ ────────────────────────> │         │
    │  • Validated input/out  │                           └─────────┘
    └─────────────────────────┘                   Node B consumes
                                                  Node A's output
节点与边的基础拓扑结构

最容易掉进去的陷阱,就是把口语里的“然后”硬当成依赖边。“帮我总结文件,然后顺便看下天气”——这两者之间压根没有边,因为查天气又不吃总结出的文本。

这明明是 2 个八竿子打不着的节点,普通脚本却硬把它们串成一串。只有当数据真正从上面流过去,这条边才成立。

养成个习惯,对着工作流里的每一个“然后”砍一刀:下一步非得吃上一步吐出的数据吗?要是不需要,那就压根没边,让你死等纯粹是浪费时间。

TEXT
Draw it as boxes and arrows. A box is an agent() call. 
An arrow is a variable passed from one call’s return into another’s 
prompt. If you can’t draw the arrow - if no variable crosses - the two 
boxes are independent, and independence is the thing you’ll exploit 
for the rest of this course.

02. 你的线性脚本只是退化的图

当你把 Agent 写成“先做 A、再做 B、接着做 C、最后做 D”,你其实是在画一张全天下最拉胯的图:一条没分支的死单链。每个节点只有 1 进 1 出。

能跑通归能跑通,但它又慢又脆。单链没有任何容灾能力:一旦 C 卡壳,D 终生触发不了,前面 A 费劲算出来的成果全烂在上游。

TEXT
                  Redrawing the Linear Chain

  DEGENERATE CHAIN (Fake edges, sequential wait)
  ┌───────────┐    fake edge    ┌───────────┐
  │ Audit A   │ ───────────────>│ Audit B   │ (File B doesn't read A)
  └───────────┘                 └───────────┘

  REFACTORED GRAPH (Cut fake edges, run parallel)
                 ┌───────────┐
              ┌─>│ Audit A   │─┐
  ┌────────┐  │  └───────────┘ │  ┌───────────┐
  │ Input  │──┤                ├──>│ Synthesize│
  └────────┘  │  ┌───────────┐ │  └───────────┘
              └─>│ Audit B   │─┘
                 └───────────┘
重构退化的单向串行链条

图工程的第 1 招,就是重新重构这条长链。把现有的脚本拉出来,对着每个箭头照着 Step 1 的逻辑狠狠问一遍。

绝大部分脚本里都有 2 到 3 个根本不跑数据的伪箭头——无非是你按顺序顺手敲下来的代码次序罢了。

果断剪断这些伪箭头,死链瞬间拉开成宽网:好几个独立节点直接齐头并发,最后把成果一股脑喂给 1 个需要全量数据的汇总节点。

03. 给每一个节点立下硬契约

你拿捏不住边界的节点,就根本没法做并发。

输入必须显式塞进来,绝不瞎猜上下文;输出必须是校验过的固定 Schema 结构,下游节点拿过来就能直接吞,免去一切人工猜度。

TEXT
                   Node Schema Contract

  [ Input JSON ] ─────────> ┌──────────────────┐ ─────────> [ Validated Output ]
  { key: "value" }          │    Subagent      │            { status: "ok",
                            │   (Tool Layer)   │              data: [...] }
                            └──────────────────┘
                              Auto-retry on
                              Schema Mismatch
通过 Schema 强制约束节点契约

在真实工作流里,这份契约全靠 Schema 在工具调用层硬性压制。你调 agent() 传入 JSON schema,子 Agent 就非得吐出校验通过的结构化 JSON 不可;一旦对不上,底层自动触发重试,而不是塞给你一堆自由文本让你凭运气解析。

JAVASCRIPT
// A node with a real contract: bounded in, validated out, one job.
const ITEM = {
  type: 'object', additionalProperties: false,
  properties: {
    title:   { type: 'string' },
    url:     { type: 'string' },
    impact:  { type: 'string', enum: ['high', 'medium', 'low'] },
  },
  required: ['title', 'url', 'impact'],
};

const result = await agent(source.prompt, {
  label:  `research:${source.key}`,
  schema: ITEM,           // forces validated structured output
  agentType: 'general-purpose',
});
// result is now a shape the next node can trust — not free text.

04. 把边当成严肃的数据契约

边绝不是一句“B 在 A 后面跑”。它是传输承诺:A 吐什么格式,B 就接什么格式。按流动的数据给边命名,而不是按顺序命名,有 2 件事会瞬间变得明明白白。

TEXT
                 The Edge as a Data Contract

  ┌──────────────┐      Array of JSON      ┌─────────────────────────┐
  │  Workers N   │ ──────────────────────> │  Deterministic JS Edge  │
  └──────────────┘                         │  .flatMap() & Set       │
                                           └────────────┬────────────┘
                                                        │ Free! Zero Tokens
                                                        ▼
                                           ┌─────────────────────────┐
                                           │  Deduplicated Results   │
                                           └─────────────────────────┘
边作为确定性数据契约

你可以一眼验出这条边是真是假(到底跑没跑数据?),而且只要结构契约不变,两头的节点你随便换,整张图稳如泰山。

工程落地上,边无非就是纯 JavaScript。扇出和最终合成之间的去重、展平、过滤,全是几行原生代码在处理节点返还的数据。

图思维最爽的一点就在于:大家原先花大把真金白银烧 Token 让模型处理的事,本质上只是一条边——而用代码写边,一个 Token 都不花。

TEXT
The temptation is to spawn an agent to “combine the results.” Resist 
it. If combining means flatten-and-dedupe, that’s results.flatMap(...) 
and a Set — deterministic, instant, zero tokens. Save agents for 
judgment, not for plumbing. A graph where every edge is an agent is a 
graph paying rent on its own wiring.

05. 用 parallel() 暴力并发扇出

这就是能把之前开销通通赚回来的核心大招。手上握着 N 个独立任务——N 个数据源、N 个代码文件、N 个路由接口——千万别傻乎乎串成长蛇阵。

直接让 Claude 展开扇出并发。代码里写 parallel(),Claude 拿个任务数组,直接拉起对应数量的子 Agent 齐头并进,最后把全量结果扔还给你。

TEXT
                    parallel() Fan-Out Barrier

                 ┌────────────────────────────────┐
                 │  parallel([thunk1, thunk2...]) │
                 └───────────────┬────────────────┘
         ┌───────────────────────┼───────────────────────┐
         ▼                       ▼                       ▼
  ┌─────────────┐         ┌─────────────┐         ┌─────────────┐
  │  Worker 1   │         │  Worker 2   │         │  Worker 3   │
  └──────┬──────┘         └──────┬──────┘         └──────┬──────┘
         └───────────────────────┼───────────────────────┘
                                 ▼ (Wait for all)
                       [ .filter(Boolean) ]
parallel() 屏障与并发控制

2 个细节决定了系统的硬核稳定性。第 1,parallel() 本身是道屏障关卡,必须等所有任务跑完才返回,保证下阶段拿到完整全集;第 2,跑崩的任务自动降级成 null,绝不会因为 1 个子 Agent 发疯就砸掉整盘棋。

拿到结果顺手接个 .filter(Boolean) 把 null 扫掉。底层并发受限于 CPU 核心数,多出来的自动排队,你就算一次性塞入 100 个任务也能稳稳消化——不过是按窗口分批并发罢了。

JAVASCRIPT
phase('Research');

// Nine sources, nine agents, all at once.
const raw = await parallel(
  SOURCES.map((s) => () =>
    agent(s.prompt, {
      label: `research:${s.key}`,
      phase: 'Research',
      schema: ITEM_SCHEMA,     // each node returns validated JSON
      agentType: 'general-purpose',
    }),
  ),
);

const collected = raw.filter(Boolean);  // drop the nulls from failed agents

并发扇出全在 Claude 写的脚本里跑,压根没占用主对话。主会话从不用一次性吃下 9 个数据源的硬材料——子 Agent 各自背着各自的上下文,最后只把精炼答案交回主线程。

编排调度层消耗 0 个 Token,因为它纯粹是代码运行,根本不用消耗模型思考。

06. 在屏障节点完成收敛扇入

散出去的活后面得有人收场,扇出才有意义。扇入(fan-in)就是各条边交汇的汇总节点——在这里,1 个 Agent(或 1 段代码)能把上游出来的全量成果尽收眼底,做全局去重、权重排序或空包熔断。这是屏障节点赚回等待时延的唯一正当理由。

TEXT
                      Fan-In Barrier Node

  ┌──────────────────┐
  │ Parallel Workers │ ───┐
  └──────────────────┘    │
  ┌──────────────────┐    ├─> ┌─────────────────────────┐ ──> [ Curated Set ]
  │ Upstream Edges   │ ───┤   │  Barrier Agent Node     │
  └──────────────────┘    │   │  (Dedupe & Rank All)    │
  ┌──────────────────┐    │   └─────────────────────────┘
  │ Complete Inputs  │ ───┘
  └──────────────────┘
在扇入屏障节点完成数据收敛

只有当后续阶段非得拿齐所有上游结果不可时,才许设屏障。

JAVASCRIPT
// The edge: plain JS, no agent, zero tokens.
const flat = collected.flatMap((c) => c.items);
log(`Collected ${flat.length} items`);

phase('Curate');
// The barrier node: needs the WHOLE set to dedupe + rank.
const curated = await agent(
  `Dedupe and rank these by impact:\n${JSON.stringify(flat)}`,
  { phase: 'Curate', schema: CURATED_SCHEMA },
);

如果只是把列表压平?那纯属代码边的活,内联搞定。架构代码坏味的识别极为残酷:你要是写成了 parallel → transform → parallel,而中间的 transform 又无跨项依赖,赶紧改成流水线(pipeline),别硬设屏障卡时间。

07. 菱形拓扑:拆分 → 执行 → 归集

把扇出和扇入凑到一块,你就得到了所有硬核 Agent 系统里最扛打的主力拓扑:菱形拓扑(The Diamond)。

1 个节点拆任务,多节点并发拉满,1 个节点收尾归集。这是竞品调研、依赖审计、代码 Review、深度研报背后的通用套路——换掉提示词和数据源,这套骨架直接到处套用。

TEXT
                The Diamond: Split -> Work -> Merge

                            ┌──────────────┐
                            │  Split Job   │
                            └──────┬───────┘
         ┌─────────────────────────┼─────────────────────────┐
         ▼                         ▼                         ▼
  ┌─────────────┐           ┌─────────────┐           ┌─────────────┐
  │  Worker 1   │           │  Worker 2   │           │  Worker 3   │
  └──────┬──────┘           └──────┬──────┘           └──────┬──────┘
         └─────────────────────────┼─────────────────────────┘
                                   ▼
                            ┌──────────────┐
                            │ Reduce (JS)  │
                            └──────┬───────┘
                                   ▼
                            ┌──────────────┐
                            │  Synthesize  │
                            └──────────────┘
菱形拓扑架构图

它的工业标准范式叫:扇出并发(fan out) → 纯代码归集(reduce) → 最终合成(synthesize)。

一旦把菱形拓扑琢磨透,你就再也不会去问“怎么让 Agent 多做几步”,而是开口就问“哪里该拆并发,哪里该做归集合并”——这才是能搞定高并发的真正关键。

08. 用条件分支做动态边路由

图架构可不是死板硬编码的。走哪条边,往往看前置节点挖到了什么。路由节点(router node)看一眼结果,直接决定点火哪条下游路径:工单分类后分给对应模块,或者看 diff 体量决定走快速 Pass 还是拉起全量并行审计。

在工作流里,这无非是对节点吐出的结构化数据写几行普通 JavaScript 的 if 或 switch,控制流完全交由纯代码调度。

TEXT
               Runtime Conditional Edge Routing

                       ┌──────────────────┐
                       │  Classify Agent  │
                       └────────┬─────────┘
                                │ returns { severity }
                                ▼
                       < Code Conditional >
                                │
               ┌────────────────┴────────────────┐
   severity == 'high'               severity == 'low'
               ▼                                 ▼
   ┌───────────────────────┐         ┌───────────────────────┐
   │ Parallel Full Audit   │         │  Single Quick Pass    │
   └───────────────────────┘         └───────────────────────┘
运行时条件路由分支架构

确定性代码的优势就在这儿。分类决策可以让 Claude 动脑,但路由执行全由 Claude 自动写的原生代码跑——相同分类出什么结果,100% 稳定可靠。

节点用上 Claude 的脑力,边拿住代码脚本的确定性。

JAVASCRIPT
// Router node: an agent classifies, code picks the edge.
const { severity } = await agent(
  `Classify this diff's risk:\n${diff}`,
  { schema: { type: 'object',
      properties: { severity: { enum: ['low', 'high'] } },
      required: ['severity'] } },
);

let review;
if (severity === 'high') {
  // heavy path: full parallel audit
  review = await parallel(FILES.map((f) => () => agent(`Audit ${f}`)));
} else {
  // light path: one quick pass
  review = await agent(`Quick review of ${diff}`);
}

09. 在数据边上安插独立验证节点

图架构真正的杠杆绝不是多拉几个 Agent——而是包裹在它们外层、能带来绝对可信度的工程防线。

验证节点(Verifier Node)守在数据边出口,在结果传给下游前,它的唯一任务就是拼命找茬挑刺、打杀结论。能扛过去的放行,扛不过去当场毙掉,绝不让脏数据溜进最终答案。

TEXT
                    Verifier Node on the Edge

  [ Worker Finding ] ──> ┌────────────────────────────────┐
                         │   Verifier (Fresh Context)     │
                         │   • Lens 1: Correctness        │
                         │   • Lens 2: Security           │
                         │   • Lens 3: Reproduction       │
                         └───────────────┬────────────────┘
                                         │ Majority Vote
                                ┌────────┴────────┐
                             Passed             Failed
                                ▼                 ▼
                         [ Forward Edge ]    [ Dropped ]
数据边上的对抗性验证节点拓扑
  • 对抗性校验(Adversarial verify):针对每项结论,拉起 N 个独立质疑 Agent 去驳斥它;只有通过多数裁判把关的发现才许保留。

  • 多视角校验(Perspective-diverse verify):给各个验证节点不同的侧重点(正确性、安全性、可复现性),多视角交叉审查能揪出 10 个同质化检查永远漏掉的坑。

  • 裁判团机制(Judge panel):多角度生成 N 方案,并行裁判节点打分评选,拿胜者方案当主干,顺手把亚军方案里的好点子缝合进来。

实际工程里,曾有团队把 Bun 运行时代码移植过去,靠的就是在循环里深度缝合了这套对抗审查拓扑。

10. 隔离节点运行环境,防止单点故障污染全图

单链架构下,一点故障直接级联瘫痪:C 挂掉,D 终生没法跑,全盘挂起。

但在图架构里,单个节点挂掉必须就地隔离,决不能污染全局。

写归集节点时要做好容灾准备,允许输入缺斤少两,别死板假设每次都能拿到全量数据。

TEXT
                 Isolated Node Execution (Worktrees)

                    ┌─────────────────────────┐
                    │ Main Repository Branch  │
                    └────────────┬────────────┘
         ┌───────────────────────┼───────────────────────┐
         ▼                       ▼                       ▼
  ┌──────────────┐        ┌──────────────┐        ┌──────────────┐
  │  Worktree 1  │        │  Worktree 2  │        │  Worktree 3  │
  │ (Sandbox A)  │        │ (Sandbox B)  │        │ (Sandbox C)  │
  └──────┬───────┘        └──────┬───────┘        └──────┬───────┘
         └───────────────────────┼───────────────────────┘
                                 ▼ (Clean Merge)
                    ┌─────────────────────────┐
                    │ Consolidated Refactor   │
                    └─────────────────────────┘
通过 Git Worktree 实现节点运行隔离

更致命也更隐蔽的死法是节点互相踩脚:多个 Agent 并行写文件,改动直接互相踩爆覆盖。

解法叫“环境隔离”:给每个 Agent 开独立的 git worktree,在沙盒里改完代码,最后干干净净合并回来。

只有节点涉及并发写代码时才用它。这是为 1 种特定拓扑准备的安全带,不用逢跑必交这份额外税费。

11. 引入受控环路,并确保其必须收敛

有时候不深钻进去,你压根不知道任务量多大:比如未知体量的探索,排查出 1 个 Bug 顺带又炸出 3 个新漏洞。

这就需要引入环路(cycle)——一条指向前面节点的受控返回边。

坑点也非常直白:要是一直不收敛,这玩意儿就是个死循环吞金兽,疯狂生成 Agent 直到把你的钱包掏空。

TEXT
                   Loop-Until-Dry Convergence

         ┌──────────────────────────────────────────────┐
         │ Spawn Finders in Parallel                     │
         └──────────────────────┬───────────────────────┘
                                ▼
         ┌──────────────────────────────────────────────┐
         │ Dedupe Fresh Findings vs. ALL SEEN SET        │
         └──────────────────────┬───────────────────────┘
                                │
                     ┌──────────┴──────────┐
                New Findings           0 New (Dry)
                     ▼                     ▼
             [ Verify & Add ]        [ dry_count++ ]
                     │                     │
                     └──────────┬──────────┘
                                ▼
                   < Is dry_count == 2? > ──(Yes)──> [ STOP ]
                                │
                              (No)
                                │
                                └───> (Loop back)
Loop-Until-Dry 环路收敛架构

保证收敛的标准模式叫 loop-until-dry(循环直到抽干):不断派探针去挖,直到连续 K 轮颗粒无收,立刻停机。

决定成败的 1 个细节(也是新手 100% 踩坑的地方):你拿什么做去重基准。

去重必须对照“全量已知发现(seen)”,绝不能只比对“已确认保留的成果(confirmed)”。

JAVASCRIPT
const seen = new Set(); const confirmed = []; let dry = 0;

while (dry < 2) {                       // stop after 2 empty rounds
  const found = (await parallel(
    FINDERS.map((f) => () => agent(f.prompt, { schema: BUGS }))
  )).filter(Boolean).flatMap((r) => r.bugs);

  const fresh = found.filter((b) => !seen.has(key(b)));
  if (!fresh.length) { dry++; continue; } // nothing new → toward dry
  dry = 0;
  fresh.forEach((b) => seen.add(key(b))); // dedupe vs SEEN, not confirmed

  // diverse-lens verify each fresh finding before it counts
  const judged = await parallel(fresh.map((b) => ()=>
    parallel(['correctness', 'security', 'repro'].map((lens) => ()=>
      agent(`Judge "${b.desc}" via ${lens} — real?`, { schema: VERDICT })))
    .then((v) => ({ b, real: v.filter(Boolean).filter((x) => x.real).length >= 2 }))));

  confirmed.push(...judged.filter((v) => v.real).map((v) => v.b));
}

12. 跨节点分级混配模型

绝对没必要让每个节点都顶着最高阶模型跑。图架构把分工拆得极为清晰:有的节点纯属机械劳动(提取字段、工单打标),有的节点才真吃脑力(合成研报、裁定争议)。

TEXT
                  Tiered Model Routing Across Nodes

  REPETITIVE / BOUNDED NODES (Fan-Out)
  ┌──────────────┐   ┌──────────────┐   ┌──────────────┐
  │  Extractor   │   │ Reviewer A   │   │ Reviewer B   │ ──> [ Cheaper Tier Model ]
  └──────────────┘   └──────────────┘   └──────────────┘     (e.g., Haiku / Flash)

  JUDGMENT / SYNTHESIS NODES (Fan-In)
  ┌────────────────────────────────────────────────────┐
  │  Adjudicator & Report Synthesizer                  │ ──> [ High Tier Model ]
  └────────────────────────────────────────────────────┘     (e.g., Opus / Pro)
跨图节点的分层模型路由策略

把枯燥机械活降级丢给便宜模型,把贵重 Token 集中花在核心决策节点上。

在工作流里,子 Agent 默认继承你当前的会话模型。要是不在脚本里手动覆盖,整套大并发跑下来直接顶格扣费。

只需在 agent() 调用里加上 model 参数,就能直接把这个节点的计算分流到轻量模型上。

跑大任务前先打 /model 瞄一眼,让 Claude 把并发扇出里的重复节点一律分流给低成本模型,只给归集节点保留顶级高配。不改动一行拓扑结构,瞬间把吃 Token 的吞金兽变成性价比神器。

13. 拓扑结构直接决定成本与延时

图架构的形态可不是花架子,它是控制实际时延最大的杠杆。最让人纠结的选择:parallel() 还是 pipeline()。parallel() 屏障必须硬等全批次里最慢的那 1 个节点跑完,下一阶段才能开工。

TEXT
                 parallel() Barrier vs. pipeline() Stream

  PARALLEL BARRIER (Waits for slowest item in batch)
  Stage 1: [=== Item A ===] [======= Item B (Slow) =======]
  Stage 2:                                                   [=== Merge ===]

  PIPELINE STREAM (Items flow independently)
  Item A: [=== Stage 1 ===]──>[=== Stage 2 ===]──>[=== Done ===]
  Item B: [======= Stage 1 (Slow) =======]──>[=== Stage 2 ===]──>[=== Done ===]
延时对比:parallel() 屏障 vs pipeline() 流水线

而 pipeline() 允许数据项各自流转、完全不设屏障:数据项 A 都跑完 Stage 3 了,数据项 B 可能才刚进 Stage 1。跑得快的直接先冲过终点线,不用被慢的死死拖住。

无脑优先选流水线 pipeline()。

14. 交给 Claude 动态构图——自路由

终极大招:对于无法提前预判全貌的任务,压根不用你自己手画图架构。

开起动态工作流,你只需把目标说清楚,Claude 自动现场写编排脚本——拆任务、设并发、组建 Agent 舰队、归集合成全套搞定。

TEXT
               Claude Code Dynamic Self-Routing Workflow

  User Prompt: "workflow audit src/routes/ for missing auth"
                         │
                         ▼
             ┌─────────────────────────┐
             │ Claude Script Generator │ (Zero Token Coordination)
             └───────────┬─────────────┘
                         ▼
             ┌─────────────────────────┐
             │ Fleet Spawn (Parallel)  │
             └───────────┬─────────────┘
                         ▼
             ┌─────────────────────────┐
             │ Verifier Pass & Merge   │
             └───────────┬─────────────┘
                         ▼
             [ Clean Final Report ]
Claude Code 动态自路由工作流执行流程

入口有 3 种:提示词里带上“workflow”直接让 Claude 现场写;或者跑现成的,比如自带的 /deep-research 就是个生产级真实图架构(定范围 → 并行搜索 → 抓取 → 对抗校验 → 合成),完美套用本课程的标准骨架。

或者直接开启 ultracode 模式,Claude 会为会话里每个大任务自动组装工作流。跑满意了敲个 s 键把脚本存进 .claude/workflows/——有版本控制、支持按名随时复用,同仓库任何人拉下代码都能一键启动。

TEXT
› Run a workflow to audit every route under src/routes/ for missing 
auth. Spawn one agent per route file, then verify each finding before 
reporting. ● Claude wrote an orchestration script · launching in 
background… /workflows — auth-audit · running ✓ Scope 1/1 2.1k tok · 
4s ✓ Fan-out 18/18 one agent per route file ◯ Verify 11/18 3-vote 
skeptics per finding… ○ Synthesize 0/1 waiting on verify session stays 
responsive — keep working while the fleet runs

本周可用 Claude 搭建的 6 种图拓扑

TEXT
                     Six Production Graph Topologies

  1. Security Sweep ─────────> Parallel Audit + Verifier Gate
  2. Deep Research ──────────> Scope -> Search -> Dedupe -> 3-Vote Verify
  3. Module Porting ─────────> Parallel Porting + Test Suite Loop Gate
  4. Diff Review ────────────> Diff-Size Router -> Multi-Lens Judge Panel
  5. Scheduled Digest ───────> Parallel Fetch -> Impact Barrier -> Digest
  6. Bug Discovery ──────────> Loop-Until-Dry Cycle + Seen Set Dedupe
六种生产级图拓扑总览
  • 全路由安全扫掠:每个路由接口开 1 个子 Agent 分头排查鉴权漏洞,再由验证节点统一关卡打杀伪漏洞。这是单重上下文根本吃不下的广度。

  • 自带的 /deep-research 研报图:Claude Code 厂出自带。自动拆解多角度问题,并发搜索去重,落笔前拉起 3 票裁判做对抗校验。

  • 逐文件移植代码模块:把 Bun 团队的极限操作搬进你的项目。跨文件并发扇出重构,单测做死门禁,报错送回循环反复重跑。

  • Diff 对抗审查:按代码改动量做动态路由,小改动 1 次快速 Pass,大改动直接触发正确性、安全性、性能等多视角并发审计,裁判团收尾合成。

  • 定时生态巡检:一次存盘、永久复用。并发抓取发布公告、技术博客、社区讨论,在屏障关卡做权重排序生成简报,存进 .claude/workflows/ 按名字随时拉起。

  • 未知范围排查:不知道库里藏着多少 Bug。并发跑探针 Agent,对照已见全集去重,验证存活项,持续循环直到连续 2 轮颗粒无收自动停机。

结语

提问者抛出问题,架构师绘制图表。

单线程 Agent 从来不是性能天花板——它只是大家手头最先抓到的第 1 种形态,纯粹是因为它顺着我们平时敲代码的直觉。1 条线、1 个单核大脑、一次死磕 1 件事。

一旦你看透了节点和边,你就不再逼着单个 Agent 机械做更多步骤,而是指挥图架构向横向拉开广度:任务独立处做并发扇出,需要置信度处立数据边关卡,不吃脑力处分级下放模型。

而真正掌握图架构的人,早已在驾驭 Agent 舰队集群奔袭——再也不会撞上死困着其他人的天花板。

REFERENCES

参考链接

  1. 01Graph Engineering with Claude: 14-Step roadmap from 0 to graph architect

下一步

继续浏览相关主题

沿着同一主题继续阅读。

查看最新资讯