Attractor三层架构完全解析:从LLM SDK到Agent Loop再到DOT编排,自建软件工厂

发布时间:2026/10/13 9:19:43
Attractor三层架构完全解析:从LLM SDK到Agent Loop再到DOT编排,自建软件工厂 【免费下载链接】attractornlspec of StrongDMs Attractor, a non-interactive Coding Agent sufficient for use in a Software Factory项目地址https://gitcode.com/gh_mirrors/attr/attractor点击查看免费下载Attractor是 StrongDM 开源的一套「非交互式 Coding Agent」NLSpec自然语言规范目标是让你自建一座属于自己的「软件工厂」。它不是打包好的可执行程序而是三份可被编程智能体直接读懂并落地的规范底层Unified LLM SDK统一大模型客户端、中层Coding Agent Loop编程智能体循环、顶层DOT 图编排AI 工作流引擎。这篇文章带你从零看懂这三层如何层层叠加、最终拼出一个能自动写代码、跑测试、自我修复的 AI 流水线。一、先搞懂「软件工厂」是什么 很多人听到「Coding Agent」会想到 Claude Code、Codex CLI、Cursor 这类终端里的助手。Attractor 的野心更大它要把这些助手装进产线让 AI 像工厂流水线一样批量产出软件。Attractor 的核心概念叫NLSpecNatural Language Spec自然语言规范——一份人类可读、同时能被编程智能体直接用来实现/验证行为的规格说明书。你在 README.md 里可以看到项目的一句话定位这个仓库包含 NLSpecs用于构建你自己的 Attractor打造你自己的软件工厂。也就是说Attractor 本身是图纸不是成品。你只需要把这份图纸丢给一个现代编程智能体Claude Code、Codex、OpenCode、Amp、Cursor 等它就能照着规范帮你把整套系统实现出来。 为什么推荐自带 agentic loop 统一 LLM SDK官方建议自己掌控技术栈才能拥有稳固的地基。这正是本文要拆解的三层。二、三层架构总览像搭积木一样分层 Attractor 的设计哲学是分层解耦每一层只解决一类问题并且可以单独替换。从下往上看层级规范文档解决的问题第三层顶层attractor-spec.md用 DOT 有向图编排多阶段 AI 工作流第二层中层coding-agent-loop-spec.md把 LLM 和开发工具串成可自主迭代的循环第一层底层unified-llm-spec.md用一套接口统一 OpenAI / Anthropic / Gemini用一张文字架构图来理解依赖关系自上而下调用┌──────────────────────────────────────────┐ │ AttractorDOT 图编排引擎 │ ← 顶层定义做什么、按什么顺序 └──────────────────────────────────────────┘ │ 每个节点通过 CodergenBackend 调用 ┌──────────────────────────────────────────┐ │ Coding Agent Loop编程智能体循环 │ ← 中层读文件/改代码/跑命令 └──────────────────────────────────────────┘ │ 使用低层 Client.complete() / stream() ┌──────────────────────────────────────────┐ │ Unified LLM SDK统一大模型客户端 │ ← 底层屏蔽厂商差异 └──────────────────────────────────────────┘ │ LLM Provider APIsOpenAI / Anthropic / Gemini关键洞察上层从不关心下层的实现细节。换掉一家 LLM 厂商只动底层 SDK换掉执行环境本地→Docker→K8s只动中层调整流程顺序只改顶层 DOT 文件。这就是稳固地基的来源。三、第一层统一 LLM SDK——一个接口打天下 3.1 它解决的痛点现实中每家大模型厂商的 API 长得完全不一样OpenAI 用Responses APIAnthropic 用Messages APIGemini 用Gemini API。消息格式、流式协议、错误结构、认证方式各有一套。想换模型就得重写请求构造、响应解析、错误处理……unified-llm-spec.md 给出的解法是开发者写厂商无关的代码切换模型只改一个字符串标识符。3.2 四层架构SDK 内部自己也分四层见 四层架构第 1 层 Provider Specification定义每个厂商适配器必须实现的契约几乎不变。第 2 层 Provider UtilitiesSSE 解析、重试、响应归一化等共享工具。第 3 层 Core Client路由请求到对应适配器应用中间件。第 4 层 High-Level APIgenerate()/stream()/generate_object()等便捷函数自动处理工具循环、重试、结构化输出。3.3 三个必须的设计决策 ⚡① 用厂商原生 API而非兼容性层。如果只针对 OpenAI 的 Chat Completions 格式就会丢掉推理 token、扩展思考、提示词缓存、高级工具等能力。规范强制要求OpenAI 走 Responses API、Anthropic 走 Messages API、Gemini 走原生 API详见 Native API 要求。② 提示词缓存必须支持关乎成本。对 Agent 这种系统提示词历史在多轮间几乎不变的场景缓存能把输入 token 成本降低 50%–90%。其中 Anthropic 必须手动注入cache_controlSDK 需要帮它自动打点见 Prompt Caching。③ 内建模型目录Model Catalog。编程智能体常会幻觉出过期的模型名。SDK 内置一份可更新的模型清单让上层能按能力如支持视觉最便宜的可用工具可靠地选模型而不是靠训练数据猜。此外SDK 还统一了Tool Calling含并行工具执行、参数校验与修复、流式 start/delta/end 事件模型、以及一套带retryable标记的错误分类 指数退避重试429/5xx 可重试401/403 立即失败。四、第二层Coding Agent Loop——让循环可编程 4.1 为什么是库而不是CLIClaude Code、Codex CLI 这些终端助手本质是黑盒文字进、文字出。你无法在运行中检查对话、在工具调用之间注入转向消息、中途换执行环境、切换推理强度也无法把多个 Agent 组合成更大的系统。coding-agent-loop-spec.md 的核心主张是把智能体循环变成一个可编程的库宿主应用CLI、IDE、Web、CI、批量系统都能控制每一步。4.2 核心循环怎么转整个循环的心脏是process_input()见 核心循环可以概括为一句话LLM 调用 → 执行工具 → 把结果塞回对话 → 再调 LLM直到模型只回文本不再调工具为止。循环中还会穿插限制检查max_tool_rounds、max_turns、中断信号循环检测连续 N 次出现相同工具调用模式就注入一条换个思路的提示Steering 转向宿主可在工具轮次之间注入消息任务进行中就能纠偏无需重启见 Steering4.3 「Provider 对齐」工具集——最反直觉的一点 规范强调每家模型都是在自己的工具接口上训练优化的。OpenAI 模型在apply_patch格式上表现最好Anthropic 模型在old_string/new_string精确替换上表现最好Gemini 模型对齐 gemini-cli 的工具集。强行统一成一套通用工具效果反而更差设计动机见 Provider Alignment。所以 SDK 为每家厂商维护一套ProviderProfile厂商对齐的参考智能体关键差异OpenAIcodex-rs用apply_patchv4a 格式替代edit_fileAnthropicClaude Code原生edit_fileold_string/new_stringGeminigemini-cli含web_search/web_fetch等工具4.4 执行环境与输出截断执行环境可插拔所有工具都经过ExecutionEnvironment接口默认跑本地换成 Docker / K8s / WASM / SSH 时工具逻辑一行不用改见 执行环境抽象。先按字符截断、再按行截断工具输出超限会做 head/tail 截断并插入显式标记告诉模型输出被截断了、完整内容在事件流里避免模型基于残缺信息做决策见 输出截断。子智能体Subagents可以spawn_agent派生并行子任务共享文件系统但各自独立对话历史用于并行探索、聚焦重构等场景。五、第三层DOT 图编排——把工作流画出来 这是 Attractor 最出彩的一层用Graphviz DOT 语法把多阶段 AI 工作流定义成一张有向图图就是工作流本身。5.1 为什么选 DOT 而不是 YAML/JSONattractor-spec.md 给出四个理由DOT 天生就是图描述语言节点、边直接映射到语言主构造、有现成工具链Graphviz 可渲染成 SVG/PNG 即时可视化、声明式且可版本管理能 diff、能在 PR 里 review、约束化可扩展限定为子集保持可预测。5.2 形状即处理器节点长什么样决定它干什么DOT 里节点的shape属性会自动映射到不同的处理器handler完整映射见 Shape-to-Handler形状处理器类型作用Mdiamondstart入口无操作Msquareexit出口无操作boxcodergenLLM 任务默认代码生成/分析/规划hexagonwait.human人工审批门阻塞直到人选择diamondconditional条件路由点componentparallel并行扇出tripleoctagonparallel.fan_in并行汇聚parallelogramtool外部工具/命令housestack.manager_loop监督循环看一个真实的最小示例线性工作流来自 attractor-spec.mddigraph Simple { graph [goalRun tests and report] rankdirLR start [shapeMdiamond, labelStart] exit [shapeMsquare, labelExit] run_tests [labelRun Tests, promptRun the test suite and report results] report [labelReport, promptSummarize the test results] start - run_tests - report - exit }$goal这样的模板变量会在解析期被展开成 graph 级的goal值。5.3 执行引擎六阶段生命周期 确定性边选择引擎按PARSE → TRANSFORM → VALIDATE → INITIALIZE → EXECUTE → FINALIZE六阶段运行见 运行生命周期核心遍历循环见 Core Execution Loop。每完成一个节点就会存一个可序列化 checkpoint进程崩溃也能从断点恢复。边选择是确定性的五步优先级见 Edge Selection条件匹配 → 首选标签匹配 → 建议的下一节点 → 最高weight→ 字典序兜底。几个让流水线可靠的关键机制目标门Goal Gategoal_gatetrue的节点必须成功才能退出不满足就跳到retry_target见 Goal Gate。重试策略max_retries3表示最多 4 次执行1 次初始 3 次重试带指数退避与抖动见 Retry Policy。上下文保真度Fidelity控制每个节点携带多少历史上下文full/truncate/compact/summary:low~high多档是多阶段流水线管理上下文窗口的核心旋钮见 Context Fidelity。人工介入Human-in-the-Loop流水线可在指定节点暂停把选项抛给人再按人的决定路由——支持审批门、代码评审、手动干预见 Interviewer 模式。5.4 用「模型样式表」集中管理 LLM 选型节点级逐个配模型太繁琐。Attractor 支持 CSS 风格的model_stylesheet见 Model Stylesheet用选择器按*全部/ 形状 /.class/#节点id的优先级批量设定llm_model、llm_provider、reasoning_effort。例如让规划用轻量模型、实现用旗舰模型、关键评审再指定某家高配模型一处集中管理。六、三层如何拼成一座软件工厂 三层单独看都是积木拼起来就是产线顶层 DOT 图定义流程规划 → 实现 → 测试 → 评审 → 人工审批 → 部署并行分支可同时跑多条实现路径再用parallel.fan_in选出最优。每个box节点背后的CodergenBackend调用中层 Coding Agent Loop——它真正去读文件、改代码、跑命令、自我迭代。Agent Loop 每次调 LLM都走底层 Unified LLM SDK自动处理厂商差异、提示词缓存、重试与流式。此外还有两个工厂级扩展点Manager Loop监督循环house形状节点可监督一个子流水线持续观察子任务遥测、评估进度、必要时介入转向——相当于给产线装了车间主任见 Manager Loop Handler。HTTP 服务模式把引擎暴露成 HTTP 服务支持 Web 管理、远程人工交互、SSE 实时事件流见 HTTP Server Mode。 换句话说DOT 决定做什么顺序Agent Loop 决定怎么一步步做LLM SDK 决定怎么和模型打交道。三层各司其职换任何一层都不影响其它两层。七、如何快速起步自建你的 Attractor Attractor 是 NLSpec落地路径极其简单——把规范喂给一个编程智能体即可。第 1 步获取仓库git clone https://gitcode.com/gh_mirrors/attr/attractor第 2 步通读三份规范建立分层认知unified-llm-spec.md —— 底层统一 LLM 客户端coding-agent-loop-spec.md —— 中层编程智能体循环attractor-spec.md —— 顶层 DOT 图编排引擎README.md —— 术语与总览NLSpec 定义、构建方式第 3 步把构建指令交给你的编程智能体例如codeagent 按照 attractor 仓库中三份规范实现 Attractor第 4 步从最小 DOT 工作流跑起来验证线性 3 节点 → 条件分支 → 重试 → 目标门这条主链路各规范的 Definition of Done 章节都给了完整验收清单和集成冒烟测试可直接照着勾选。 建议顺序先实现并验证底层 SDK跑通三家厂商的生成/流式/工具调用再做中层循环跑通读→改→跑命令最后搭顶层引擎解析 DOT、执行、断点恢复。每层都有一份可勾选的完成清单非常适合分而治之。八、小结一句话记住 Attractor 想记住的一句话它是什么一套让你自建AI 软件工厂的 NLSpec而非成品程序三层分别管什么SDK 管怎么谈模型Loop 管怎么一步步干DOT 管什么顺序干最大亮点分层解耦、确定性编排、断点恢复、人工审批门、供应商对齐怎么上手clone 仓库 → 读三份规范 → 交给编程智能体实现 → 从最小工作流验证Attractor 的精髓在于**控制自己的技术栈当你把从 LLM 调用到工作流编排的整条链路都掌握在自己手里时你拥有的就不只是一个能聊天的大模型而是一条可观测、可恢复、可干预、可扩展的 AI 软件生产流水线**。这正是自建软件工厂这句话的分量。赞分享【免费下载链接】attractornlspec of StrongDMs Attractor, a non-interactive Coding Agent sufficient for use in a Software Factory项目地址https://gitcode.com/gh_mirrors/attr/attractor点击查看免费下载相关推荐Attractor完全解析StrongDM开源AI编程Agent的软件工厂规格书Attractor完全解析StrongDM开源AI编程Agent的软件工厂规格书 Attractor 是 StrongDM 开源的一套软件工厂蓝图整CodePilot 自建 Agent Loop 深度解析从 Claude Agent SDK 到 Vercel AI SDK 的运行时重构CodePilot 自建 Agent Loop 深度解析从 Claude Agent SDK 到 Vercel AI SDK 的运行时重构 本文基于 docs人工智能AI 应用AI Agent交互助手MCP Clients本地部署Cline SDK 事件系统详解从 AgentRuntimeEvent 到 CoreSessionEvent 的三层事件架构Cline SDK 事件系统详解从 AgentRuntimeEvent 到 CoreSessionEvent 的三层事件架构 Cline SDK 的事件系统分人工智能AI Agent代码智能体AI 应用开发工具MCP Clients创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询