从一句自然语言到可运行业务模块的全过程,每一帧都拆给你看
深度揭秘5W 分析OPS 闭环57 子环节OODER Studi
引言:为什么要把一条流水线"切开 57 刀"?
在前一篇《做一款 AI-IDE 有多难》中我们提出了"6 步 OPS 闭环"的概念图。但抽象的 6 步永远只是 PPT,真正决定 AI-IDE 能不能"自主跑业务"的是 6 步之内的每一个细节环节——LLM 怎么超时熔断?工具调用怎么并行?编译失败怎么降级?检测不通过怎么回灌?审计怎么留痕?
这篇文章基于 OODER Studio 的真实源码,把 6 步拆成 57 个可被独立观测、独立修复、独立审计的子环节,并对每一个环节做 5W 分析(What / Why / Where / When / Who),让你看清这条"AI 工业流水线"到底是怎么转的。
本文阅读路径建议:① 先看下方全景图建立宏观印象 → ② 看 5W 罗盘理解分析方法 → ③ 选你最感兴趣的 Step 跳读详表 → ④ 末尾总结给出企业实施清单。
一、57 个子环节全景图

| Step 1 | FunctionCallingLoopExecutor.java | ||
| Step 2 | NlpHarnessPipeline.java | ||
| Step 3 | CompileTool.java + AggRootBuild.java | ||
| Step 4 | AggRootBuildAuditor.java | ||
| Step 5 | PageChannelManager.java | ||
| Step 6 | ThreeDimensionDetector.java | ||
| 合计 | 57 |
二、5W 分析罗盘:怎么拆一个环节?


三、Step 1 | 用户请求 × FC-Loop 调度(10 环节)
定位:这是整条闭环的"入口与心跳"。FunctionCallingLoopExecutor 类负责把一句话变成一连串 LLM 推理 + 工具调用,并保证:① 不会无限循环;② 不会 Token 爆炸;③ 工具失败可降级;④ LLM "只说不做"会被强制纠正。
llmService.isAvailable() | executeLoop() 行 119-134 | |||||
ContextAuditLog STARTED | 行 153-159 | |||||
system + user 两条消息 | 行 162-164 | |||||
callLlmWithReasoning(),失败回退 callLlmSync() | 行 850-934 + 936 | |||||
| parseTextToolCalls() 行 789 | ||||||
| 行 221-277,线程池 fc-tool-exec-N | ||||||
| TIMEOUT_SCHEDULER + allOf().get | ||||||
| appendToolResultMessages() 行 704 | ||||||
| compressMessages() 行 1113 | ||||||
| containsIntentButNoAction() 行 657 |
3.1 一条 FC-Loop 的典型时间线
T+0ms 用户消息 → 1.1 LLM 预检 → 1.2 审计登记T+5ms 1.3 初始消息构造T+50ms 1.4 LLM 流式开始 → reasoning 吐字T+800ms 1.4 返回 3 个 ToolCallT+810ms 1.6 三个并行 (fc-tool-exec-1/2/3)T+1700ms 全部完成(最慢 890ms)T+1750ms 1.4 下一轮 LLM 调用T+2400ms 1.4 最终回答 → 循环结束四、Step 2 | Harness Pipeline 6 阶段(13 环节)
定位:把"LLM 一句话"翻译为"NlpComponent + Java 类名清单"的关键引擎。每阶段强制 StageContract 四段式契约。
| initializeStages() 行 38-45 | ||||||
| executeInternal() 行 75-129 | ||||||
| IntentAnalysisStage 行 234 | ||||||
| ComponentSelectionStage 行 357 | ||||||
| EventDesignStage 行 465 | ||||||
| StyleGenerationStage 行 536 | ||||||
| LayoutCompositionStage 行 607 | ||||||
| CodeGenerationStage 行 709 | ||||||
| executeInternal 行 102-105 | ||||||
| createClarificationResponse 行 151 | ||||||
| ViewJavaSrcMeta 行 28 | ||||||
| BuildLevelPreprocessor 行 42 | ||||||
| FeedbackHarness 行 87/93/127 |
五、Step 3 | 编译沙箱(8 环节)
定位:把 DSL 编译为 JVM 可执行字节码。CompileTool 是入口,AggRootBuild 是 6 步 Java 流,CompileLoopWithLlmFallback 提供 3 轮降级。
| execute() 行 66 | ||||||
| 行 124 | ||||||
| 行 130 | ||||||
| 行 140 | ||||||
| AggRootBuild.build 行 225 | ||||||
| 行 207/215/266/285/299 | ||||||
| CompileLoopWithLlmFallback 行 52 | ||||||
| pushReloadToOpenPages 行 199 |
六、Step 4 | AggRoot 校验(7 环节)
定位:编译/生成的"贴身审计员"。每一步起止、错、降级都被精确记录。
| 行 21 | ||||||
| recordStepStart 行 26 | ||||||
| recordStepEnd 行 34 | ||||||
| recordStepError 行 52 | ||||||
| recordLlmFallback 行 76 | ||||||
| recordCompileLoop 行 81 | ||||||
| toAuditJson 行 86 |
七、Step 5 | 热部署推送(7 环节)
定位:把"新模块"最快推送到所有 Designer 页面,ACK 确认到达。
| createChannel 行 35 | ||||||
| PageCommand.java | ||||||
| pushCommand 行 67 | ||||||
| pushCommandWithAck 行 90 | ||||||
| handleAck 行 112 | ||||||
| 行 124 | ||||||
| 行 132/142 |
八、Step 6 | 运行时验证(12 环节)
定位:"编译通过"≠"业务对了"。三维度量化评分,不达标自动回灌 LLM 修复。
| 行 34+45 | ||||||
| 行 59 | ||||||
| ThreeDimensionDetector 行 30 | ||||||
| FourSepCompleteness 行 15 | ||||||
| 行 76/120/144/193 | ||||||
| 行 62-73 | ||||||
| VisibilityAudit 行 16 | ||||||
| EventBehaviorMatch | ||||||
| 行 88/103 | ||||||
| 行 120/131 | ||||||
| 行 144/174 | ||||||
| 行 56 |
九、总结:57 环节背后的工程哲学
把这条流水线讲完,我们能提炼出 6 条 AI-IDE 工程哲学:
| 留痕一切 | ||
| 三层熔断 | ||
| 可治理的 LLM | ||
| 强制闭环 | ||
| 前后端实时同步 | ||
| DDD 对齐的元数据 |
9.1 关键源码路径速查
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\chat\engine\FunctionCallingLoopExecutor.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\llm\harness\NlpHarnessPipeline.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\llm\harness\HarnessResult.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\llm\harness\StageContract.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\codegen\java\ViewJavaSrcMeta.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\codegen\java\AggRootBuild.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\codegen\java\Step.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\chat\knowledge\tool\CompileTool.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\codegen\nlp\CompileLoopWithLlmFallback.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\codegen\nlp\AggRootBuildAuditor.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\codegen\nlp\BuildLevelPreprocessor.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\chat\page\PageChannelManager.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\chat\page\PageChannel.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\chat\page\PageCommand.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\debug\skill\RuntimeDebugSkillExecutor.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\debug\detection\ThreeDimensionDetector.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\debug\detection\FourSepCompletenessDetector.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\debug\detection\VisibilityAuditDetector.java | |
| e:\github\a2ui\ooder-pro\src\main\java\net\ooder\studio\debug\detection\EventBehaviorMatchDetector.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\llm\harness\FeedbackHarness.java | |
| e:\github\a2ui\ouc\ouc-core\src\main\java\net\ooder\engine\llm\harness\CollaborativeHarnessStrategy.java |
最后一句:一台机器上有 57 个齿轮同时转动,没有一个是多余的。每个齿轮的卡顿或缺失,都有可能让 AI-IDE 从"一个神奇的 Demo"退化为"一个昂贵的玩具"。这就是为什么做一款真正可用的 AI-IDE 这么难,也正是它如此迷人之处。
© OODER Studio · A2UI · AI-IDE 技术深究系列
本文基于 v3.5 源码 · GitHub 路径可验证 · 57 环节均为 derived from source code analysis
夜雨聆风