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),仅供参考

相关新闻

贪心算法进阶:降维与重构技巧解析

贪心算法进阶:降维与重构技巧解析

1. 贪心算法专题收官:为什么需要降维与重构做算法题就像玩俄罗斯方块,贪心算法就是那个能帮你快速消除单行的神器。但玩到高级关卡时,你会发现简单的单行消除已经不够用了——这时候就需要"降维打击"和"错位重构"这样的高…

2026/10/13 9:19:45 阅读更多 →
数据库触发器原理与实战:从库存校验到高并发一致性保障

数据库触发器原理与实战:从库存校验到高并发一致性保障

1. 触发器到底是什么?别被教科书绕晕了,它就是数据库里的“自动闹钟”很多人第一次听到“触发器(trigger)”这个词,脑子里立刻浮现出一堆抽象定义:“一种特殊的存储过程”“在特定事件发生时自动执行”“不…

2026/10/13 9:19:45 阅读更多 →
AI-For-Beginners 完整指南:12 周 24 课,从零手写神经网络到大语言模型

AI-For-Beginners 完整指南:12 周 24 课,从零手写神经网络到大语言模型

AI-For-Beginners 完整指南:12 周 24 课,从零手写神经网络到大语言模型 【免费下载链接】AI-For-Beginners 12 Weeks, 24 Lessons, AI for All! 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners AI-For-Beginners 是一套按 1…

2026/10/13 9:18:41 阅读更多 →

最新新闻

VS Code中高效读取HDF5文件:从插件预览到h5py实战

VS Code中高效读取HDF5文件:从插件预览到h5py实战

你有没有遇到过这种场面:同事或者对接方丢给你一个.h5文件,说是训练好的模型权重,或者某次实验的全部原始数据,你兴冲冲地在 VS Code 里双击打开,结果满屏都是二进制乱码。这个画面我见过太多次了,包括我自…

2026/10/13 10:37:18 阅读更多 →
数组类型与底层原理:从静态到动态、从同构到异构的全解析

数组类型与底层原理:从静态到动态、从同构到异构的全解析

数组这名字,表面上看人人都懂,可真到写代码的时候,你会发现不同语言里的“数组”完全是几个物种。拿一个 int[10] 丢给 C 程序员,他脑子里是 10 个连续排列的整数;递给 Python 程序员,他大概率会反问一句…

2026/10/13 10:37:18 阅读更多 →
LeetCode链表题全攻略:从虚拟头结点到快慢指针的通用解法

LeetCode链表题全攻略:从虚拟头结点到快慢指针的通用解法

最近在整理自己的LeetCode刷题笔记,链表这一章给了我不少感触。很多人刚开始刷题时,把链表当成“送分题”,结果一到手写环节就翻车——不是空指针异常,就是链表被改成了环,甚至在一个反转操作上卡了半小时。链表确实是…

2026/10/13 10:37:18 阅读更多 →
端侧AI密度定律:硬件、模型与工程的三重优化

端侧AI密度定律:硬件、模型与工程的三重优化

1. 这不是概念炒作,是芯片、模型、场景三股力量在端侧突然“对齐”了“端侧智能规模化元年”这八个字,最近在技术会议、投资人briefing和芯片厂商白皮书里高频出现,但很多人听完只留下一个模糊印象:好像AI要下到手机、摄像头、家电…

2026/10/13 10:37:18 阅读更多 →
x86实操操作系统:从实模式到保护模式的真机启动内核

x86实操操作系统:从实模式到保护模式的真机启动内核

简介:本资源是经典操作系统实践教程《自己动手写操作系统》(于渊著)配套源码与开发环境的完整压缩包,面向计算机专业本科生、嵌入式开发者及系统编程爱好者,解决操作系统原理难理解、内核开发无从下手的核心痛点。压缩…

2026/10/13 10:37:18 阅读更多 →
企业采购智能体选型:为什么原生嵌入业务流程更适合核心采购场景?

企业采购智能体选型:为什么原生嵌入业务流程更适合核心采购场景?

随着大模型和Agent进入企业采购,采购智能体正在从简单的问答、文本生成,逐步进入供应商推荐、询价比价、价格分析、合同审查、订单处理、履约分析等真实业务场景。企业在进行采购智能体选型时,也开始面对不同的建设模式。 一种是通用桌面智能…

2026/10/13 10:36:15 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →