Attractor执行引擎深度揭秘:6阶段生命周期与核心循环伪代码逐行拆解

发布时间:2026/10/12 21:18:56

Attractor执行引擎深度揭秘:6阶段生命周期与核心循环伪代码逐行拆解 【免费下载链接】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 规格库其执行引擎以 6 阶段生命周期PARSE → TRANSFORM → VALIDATE → INITIALIZE → EXECUTE → FINALIZE驱动 DOT 有向图流水线的确定遍历。本文带你逐行拆解核心循环伪代码看懂 Attractor 如何在无人值守场景下可靠地编排多阶段 AI 工作流——这是理解 Attractor 执行引擎 6 阶段生命周期与核心循环机制的完整指南。一、Attractor 是什么为什么需要执行引擎如果你做过 AI 编程工作流代码生成 → 代码审查 → 测试 → 部署规划大概率踩过同一个坑多个 LLM 调用要靠脆弱的脚本串联加上条件判断、人工审批、并行执行后整套东西既难可视化、也难调试更没法版本管理。Attractor 的解法非常优雅用 Graphviz DOT 语法把多阶段 AI 工作流声明为有向图。节点是任务LLM 调用、人工审批、条件分支、并行扇出等边是流转关系属性配置行为。最终产物是一份声明式、可视化、可 diff、可 code review 的流水线定义由执行引擎确定性地遍历运行。 一句话理解图就是工作流The graph is the workflow。作者不写控制流只声明图结构剩下的交给引擎。本仓库包含三份可直接交给 Coding Agent 实现的行为规格NLSpec文档定位attractor-spec.md流水线执行引擎主规格本文主角coding-agent-loop-spec.mdCoding Agent 智能体循环规格unified-llm-spec.md统一 LLM 客户端规格README.md项目说明与术语定义执行引擎承担的 5 项设计原则声明式流水线.dot文件声明做什么引擎决定怎么做、何时做可插拔 Handler每种节点类型背后是一个 handler注册新 handler 即可扩展节点类型检查点与断点续跑每个节点完成后保存可序列化检查点崩溃后从最后检查点恢复Human-in-the-Loop流水线可在指定节点暂停向人工操作员呈现选项并按其决定路由基于边的路由节点间流转由边上的条件、标签、权重控制运行时求值二、Attractor 执行引擎 6 阶段生命周期一次运行的完整旅程在 attractor-spec.md 的 Run Lifecycle 章节中执行生命周期被定义为 6 个阶段PARSE → TRANSFORM → VALIDATE → INITIALIZE → EXECUTE → FINALIZE#阶段做什么关键产物1PARSE读取.dot源码解析出内存中的 Graph 模型节点、边、属性2TRANSFORM应用解析期变换模型样式表、$goal变量展开、自定义 AST 变换规范化后的图3VALIDATE运行 lint 规则拒绝非法图对可疑模式告警诊断列表错误直接拦截执行4INITIALIZE创建运行目录、初始上下文与检查点把图属性镜像进上下文运行目录 Context5EXECUTE从 start 节点出发遍历图执行 handler、选择边每节点的status.json、prompt.md、response.md6FINALIZE写最终检查点、发出完成事件、释放资源关闭会话、释放文件完成事件 清理这个设计的精妙之处在于顺序先解析、再变换、后校验意味着坏掉的流水线在真正烧钱调用 LLM 之前就会被拦下而每完成一个节点存一次检查点意味着崩溃重启时不必从头再跑一遍。三、核心循环 run() 伪代码逐行拆解执行引擎的心脏是 attractor-spec.md 中定义的run(graph, config)函数。它的骨架是一个无限循环FUNCTION run(graph, config): context new Context() mirror_graph_attributes(graph, context) current_node find_start_node(graph) WHILE true: -- 检查终点 → 执行节点 → 记录 → 更新上下文 -- → 存检查点 → 选边 → 前进直到到达终点下面我们按伪代码里的 8 个 Step 逐一拆解。3.1 初始化找到起点current_node find_start_node(graph) -- 解析优先级(1) shapeMdiamond(2) idstart 或 Start -- 找不到则直接抛错起点解析只有两条路shapeMdiamond的节点或 id 恰好叫start/Start的节点。找不到就报错——这与 lint 规则start_node每图必须有且仅有一个 start 节点互为呼应。同时mirror_graph_attributes会把图的goal等属性镜像进上下文如graph.goal供后续提示词模板使用。3.2 Step 1终点检查与 Goal Gate 拦截IF is_terminal(node): gate_ok, failed_gate check_goal_gates(graph, node_outcomes) IF NOT gate_ok AND failed_gate exists: retry_target get_retry_target(failed_gate, graph) IF retry_target exists: current_node graph.nodes[retry_target] -- 跳回去重修 CONTINUE ELSE: RETURN Outcome(statusFAIL, ...) RETURN Outcome(statusSUCCESS, notesPipeline completed)到达终点节点shapeMsquare时handler 本身是空操作但引擎会先拦一道检查所有goal_gatetrue的关键阶段是否都达到了SUCCESS或PARTIAL_SUCCESS。没通过→ 跳到该门节点的retry_target重修跳不动才返回 FAIL通过了→ 流水线成功收尾这保证了流水线不会带病通过细节见第六节。3.3 Step 2执行节点 handler带重试retry_policy build_retry_policy(node, graph) outcome execute_with_retry(node, context, graph, retry_policy)引擎按节点类型分派到对应 handler解析顺序是显式type属性如typewait.human按shape映射如box→codergenhexagon→wait.human兜底默认 handlercodergen / LLM 任务内置 handler 一览完整映射表见 attractor-spec.mdShapeHandler 类型行为Mdiamondstart空操作流水线入口Msquareexit空操作出口Goal Gate 由引擎把关boxcodergenLLM 任务默认节点类型hexagonwait.human人工闸门阻塞直到人选定选项diamondconditional条件路由点路由逻辑在引擎侧component/tripleoctagonparallel/parallel.fan_in并行扇出 / 汇聚parallelogramtool外部工具执行shell 命令等housestack.manager_loop监督者循环observe/steer/wait 子流水线execute_with_retry内部按重试策略循环调用handler.execute(node, context, graph, logs_root)成功即返回异常则按退避backoff策略休眠后重试详见第五节。3.4 Step 3记录完成completed_nodes.append(node.id) node_outcomes[node.id] outcome两笔账一个记录谁完成了供检查点与断点续跑跳过已完成工作一个记录结果如何供 Goal Gate 检查与路由决策。3.5 Step 4合并上下文更新FOR EACH (key, value) IN outcome.context_updates: context.set(key, value) context.set(outcome, outcome.status) IF outcome.preferred_label is not empty: context.set(preferred_label, outcome.preferred_label)Context 是一个线程安全的键值存储是节点间传递数据的主要机制。handler 通过Outcome.context_updates回传更新由引擎统一合并——handler 不直接写共享状态天然避免竞态。引擎还会自动写入内置键outcome上一节点状态、preferred_labelhandler 建议的边标签等这些正是边选择算法的输入。3.6 Step 5保存检查点checkpoint create_checkpoint(context, current_node.id, completed_nodes) save_checkpoint(checkpoint, logs_root)每完成一个节点就落盘一次checkpoint.json内容包括时间戳、当前节点、已完成节点列表、各节点重试计数、上下文快照、运行日志。断点续跑时引擎从{logs_root}/checkpoint.json恢复状态从当前节点的下一个继续执行恢复细节见 attractor-spec.md。3.7 Step 6选择下一条边next_edge select_edge(node, outcome, context, graph) IF next_edge is NONE: IF outcome.status FAIL: RETURN outcome RETURN Outcome(statusSUCCESS, notesPipeline completed)选边是整个路由系统的核心。选不出来NONE意味着该节点没有出边失败就如实返回 FAIL否则视为自然完成。五级优先级的完整规则见第四节。3.8 Step 7 8loop_restart 与前进IF next_edge has loop_restarttrue: restart_run(graph, config, start_atnext_edge.target) -- 全新日志目录重启 RETURN current_node graph.nodes[next_edge.to_node]loop_restarttrue的边会终止当前 run、以全新日志目录重新拉起用于整轮重来式的迭代循环普通情况则是简单的指针前进回到循环顶部处理下一个节点。✅ 至此核心循环的 8 个 Step 全部拆解完毕。整体图景引擎就是一个执行 → 记账 → 存盘 → 选路 → 前进的状态机每圈循环都确定、可审计、可恢复。四、边选择算法5 级优先级决定流水线走向节点完成后引擎从它的出边中按确定性的 5 级优先级选出唯一一条边attractor-spec.md优先级规则说明1条件匹配对带condition的边求值true的边中取weight最高者无条件边此步不参与2Preferred label 匹配outcome 带preferred_label时找标签归一化后一致的首条无条件边3Suggested next IDsoutcome 带suggested_next_ids时找目标节点 ID 命中的首条无条件边4最高权重剩余无条件边中weight最大者默认 05字典序决胜权重相同取目标节点 ID 字典序最靠前者举个典型例子分支工作流gate - exit [labelYes, conditionoutcomesuccess] gate - implement [labelNo, conditionoutcome!success]验证通过后走exit测试失败则打回implement返工——路由逻辑完全声明在边上引擎只负责求值。 为什么把路由放在引擎而不是 handler 里因为这样路由是确定且可检查的条件语言刻意保持极简只支持、!和每条边通不通都能被人工推演。五、重试策略与失败路由5.1 重试语义max_retries 是额外次数max_retries3意味着最多执行 4 次1 次初始 3 次重试。解析顺序节点max_retries→ 图级default_max_retries→ 内置默认 0不重试。execute_with_retry对三种 outcome 的处理各不相同attractor-spec.mdSUCCESS / PARTIAL_SUCCESS→ 重置重试计数立即返回RETRYhandler 主动要求重跑→ 计数 1退避休眠后继续次数耗尽时若allow_partialtrue则降级为 PARTIAL_SUCCESS否则 FAILFAIL→ 立即返回进入失败路由5.2 退避配置与预设延迟公式delay initial_delay_ms × backoff_factor^(attempt-1)上限max_delay_ms可叠加 0.5~1.5 倍随机抖动防止惊群。内置 5 种预设策略attractor-spec.md预设最大次数延迟序列适用场景none1—失败立即终止standard5200 → 400 → 800 → 1600 → 3200ms通用场景aggressive5500 → 1000 → 2000 → 4000 → 8000ms不稳定操作linear3500ms × 3固定间隔patient32000 → 6000 → 18000ms长耗时操作默认的可重试判定网络错误、限流HTTP 429、服务端错误5xx会重试鉴权错误401/403、参数错误400直接判死刑。5.3 失败路由的 4 级出口节点失败后引擎按顺序找退路attractor-spec.mdFail 边带conditionoutcomefail的出边节点级retry_target节点级fallback_retry_target终止流水线带着失败原因结束六、Goal Gate保证流水线带着成果离开goal_gatetrue的节点代表必须成功才能放行的关键阶段如核心代码实现节点。执行流程attractor-spec.md遍历到达终点检查所有goal_gatetrue的已访问节点任何一个未达 SUCCESS / PARTIAL_SUCCESS → 禁止出口依次尝试门节点自身retry_target→fallback_retry_target→ 图级retry_target→ 图级fallback_retry_target全部落空 → 流水线以 FAIL 结束配套 lint 规则goal_gate_has_retry会提醒声明了 Goal Gate 却没配重试目标的节点是危险配置。七、检查点与断点续跑崩溃了也不怕检查点attractor-spec.md包含 6 个字段字段作用timestamp检查点创建时间current_node最后完成的节点 IDcompleted_nodes按序记录的已完成节点node_retries每节点重试计数防止续跑后重获重试额度context_values上下文 JSON 快照logs运行日志恢复时依次加载checkpoint.json→ 还原上下文 → 还原已完成列表 → 还原重试计数 → 定位下一个待执行节点。一个容易忽略的细节若上个节点使用fullfidelity复用 LLM 会话续跑的第一个节点会降级为summary:high——因为内存中的 LLM 会话无法序列化降级一跳后后续节点可恢复full。八、快速上手三步拥有自己的 AttractorAttractor 是规格驱动的项目——README 推荐的构建方式只有一句话把下面的提示词交给现代 Coding AgentClaude Code、Codex、OpenCode、Amp、Cursor 等codeagent Implement Attractor as described by this repositoryAgent 会依据 attractor-spec.md 的Definition of Done章节attractor-spec.md逐条自检包括20 项交叉功能矩阵条件匹配优先于 weight、Goal Gate 拦截出口、检查点续跑结果一致等和一条端到端冒烟测试plan → implement → review → done 全链路。这正是 NLSpecNatural Language Spec的价值人类可读、Agent 可直接消费。最小可运行的 DOT 流水线长这样digraph 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 }九、延伸阅读流水线执行引擎主规格含 DOT DSL、节点 handler、状态模型attractor-spec.mdCoding Agent 智能体循环规格Session 状态机、工具轮循环、事件流coding-agent-loop-spec.md统一 LLM 客户端规格多供应商适配、流式优先unified-llm-spec.md项目说明与 NLSpec 术语README.md小结Attractor 执行引擎的魅力在于小核心、强契约——6 阶段生命周期把校验前置于执行8 步核心循环把每圈遍历变成确定、可审计、可恢复的状态机而 Goal Gate、5 级选边、重试与检查点则共同兜底了 AI 工作流的不确定性。读懂这套伪代码你就拿到了构建 Software Factory 的执行层蓝图。赞分享【免费下载链接】attractornlspec of StrongDMs Attractor, a non-interactive Coding Agent sufficient for use in a Software Factory项目地址https://gitcode.com/gh_mirrors/attr/attractor点击查看免费下载相关推荐Deep-Live-Cam 实时换脸模型下载完整指南inswapper 与 GFPGAN 一步到位Deep Live Cam 实时换脸模型下载完整指南inswapper 与 GFPGAN 一步到位 Model not found in /path/to/m人工智能AI 应用计算机视觉媒体生成Apache APISIX插件概念理解插件生命周期与执行阶段Apache APISIX插件概念理解插件生命周期与执行阶段 引言 在现代API网关架构中插件系统是实现灵活性和扩展性的核心。Apache APISIX作为后端微服务云原生MusicFree插件引擎揭秘从加载到运行的全生命周期MusicFree插件引擎揭秘从加载到运行的全生命周期 你是否曾因音乐播放器功能单一而烦恼是否想自定义音乐来源却苦于没有合适的工具MusicFree的插件移动开发音视频插件系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/12 21:18:56

darknet图片分类数据加载优化:训练与预测差异及性能调优

1. 从一次数据集加载的卡顿说起如果你正在用darknet做图片分类,大概率经历过这样的场景:训练脚本跑起来了,GPU占用率却像过山车一样忽高忽低,日志里每隔几秒就出现一次明显的停顿。你盯着终端,心里犯嘀咕——明明显卡不…

2026/10/13 0:59:44

400G多模光模块标准详解:SR8与SR4.2架构、链路预算及避坑指南

简介:IEEE Std 802.3cm-2020是IEEE发布的以太网标准修正案,面向光通信产品开发与网络系统设计者,解决400Gbps以太网在多模光纤上的物理层规范与管理参数问题。该标准基于IEEE Std 802.3-2018及多个相关修正案,新增400GBASE-SR8与4…

2026/10/13 0:59:44

多段线简化算法实战:RDP与VW选型及工程避坑指南

我第一次被多段线简化算法逼到墙角,是在处理一条水域边界线的时候。数据源导出了八千多个顶点,画到地图上直接变成一团黑色煤球,每一段岸边弯道都被采样得密密麻麻。那时候我抱着“减几个点嘛”的想法,直接用间隔抽点,…

2026/10/13 0:59:44

FastMCP 2.x 干货笔记:把 OpenAI API 接入 AI SDK 的 TaoToken 配置指南

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

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/13 0:04:41

基于Triton部署YOLO目标检测:从训练脚本到线上服务

简介:这份资源面向希望将目标检测模型落地到生产环境的深度学习开发者与算法工程师,聚焦于用 Triton Inference Server 部署 YOLOv9 的完整实战方案,解决从训练权重到线上推理服务之间的工程化难题。压缩包共 16 个文件,约 886KB&…

2026/10/13 0:04:41

手把手教你云端部署Qwen-Image-2.1:从GPU选型到在线文生图服务

Qwen-Image-2.1 这个开源的图像生成模型,最近在内容创作和 AI 应用圈子里热度相当高。它属于通义 Qwen 系列里的视觉生成分支,让我眼前一亮的是它对中文长文本的理解能力——以前用那些老方案生成带中文文字的图,十个里九个是“乱码印刷体”&…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑