docs(生成引擎): tier2 doc-sync — SoT① §4.2/§5.x 按 HANDOFF 回写真相(§6.8 #1 收口)

§6.8 评审 #1 阻塞:SoT① 忠实搬运 spike 前源档、把已落 accept 的 tier2 写成「待 spike」。
按 tier2/HANDOFF.md(2026-06-24)+ 内网凭据 P4 回写真相:
- §4.2 headline:翻成「核心已落 + 0号 spike feie-005 accept(n=1 机制验证,n≥30 统计待跑)
  + 服务化@8200,判断=go(留观微调)」
- §5.1-5.8 八面「现/建」全部按 HANDOFF 翻新(已落:Phaser 探针+九门+富游戏三门、
  四道收敛契约机器门、mmx、M3 接法、Tier2TraceMiddleware/成本折¥、L3软检、n≥30底座;
  待:n≥30统计/阶段1 Agent Team/控制面后端/feed第二装载)
- 纠 2 处设计叙述错(spike 实测推翻):① 官方 ReplyBudgetControlMiddleware 2.0.2 不存在
  →自建 on_system_prompt+硬熔断;② 纯内部多轮 ReAct 过早放弃→有界外层 resume(wg1范式回归)
- frontmatter status + §二补⑥(a) 标 doc-sync 已做;003 加「执行现状」块、修「待 spike」全局口径

门:全仓死链 0。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lili 2026-06-25 00:06:38 -07:00
parent e7d236197b
commit 1b97c55ca0
2 changed files with 30 additions and 17 deletions

View File

@ -1,6 +1,6 @@
---
title: agentic 生成运行时架构 — 可插拔 agent 平台
status: 架构演进中 · tier2 已落 accept(dev/2.0.0:92 文件/feie-005/服务化@8200/Phase B,§4.2·§5.x 仍写"待 spike"=待 doc-sync 回写)· "采标准"方向 §6.8 双评审已过(2026-06-24:采纳但修),修正见 §二补、待据以收口定稿
status: 架构演进中 · tier2 核心已落 + 0 号 spike feie-005 accept(n=1;n≥30 统计待跑)· §4.2/§5.x 已按 2026-06-24 HANDOFF doc-sync(2026-06-25)· "采标准"方向 §6.8 双评审已过(采纳但修),修正见 §二补、待据以收口定稿
canonical: true # 生成运行时架构唯一 SoT,收敛原 16 份图说/详设/接口协议草案
topic: 生成运行时架构(adapter + 可插拔 agent 框架 + 两生成实例)
date: 2026-06-24
@ -83,7 +83,7 @@ date: 2026-06-24
**⑤ 自研面别低估**:adapter 的**护城河核心**只两块(checkpoint/续跑 + 验收门),但平台域契约 A3/A4/A4.5/A8/A9/A11/A12 + A13 落地仍是自研或待建(见 §三)——排期按真实自研清单,不按"只剩两块"。
**⑥ 收口 TODO(跨文档 / 需真工)**:(a)**先 doc-sync 再据此定稿**——tier2 已落 accept(dev/2.0.0:92 文件、feie-005、服务化@8200、Phase B 已落),但 §4.2/§5.x 与 plan U8U10 仍写"待 spike",须按 `tier2/HANDOFF.md`+git 重取"现/建"(这是最高优先:在失真基线上批准的 build-vs-buy 不可信);(b)5 个 build-vs-buy 待决改 **ADR 矩阵**(每条 ≥3 具名候选);(c)durable-execution / SandboxDriver 各出选型 spike;(d)标准成熟度五列补全。
**⑥ 收口 TODO(跨文档 / 需真工)**:(a)~~doc-sync~~ **已做(2026-06-25)**——§4.2/§5.x 已按 `tier2/HANDOFF.md` 回写真相(tier2 核心已落 + feie-005 accept n=1,纠了"官方软刹不存在""纯内部多轮过早放弃→有界外层 resume"两处设计错),plan U8U10 现状同步(见 003「执行现状」);**剩:据此把 §二/§三 定级定稿、去"提案"标**;(b)5 个 build-vs-buy 待决改 **ADR 矩阵**(每条 ≥3 具名候选);(c)durable-execution / SandboxDriver 各出选型 spike;(d)标准成熟度五列补全;(e)n≥30 统计 go/no-go 跑(批跑底座已就位)
下面 §三 把每条 A 协议对到它采的标准,并如实标"现 / 建 / 待定"(定级待 §二补收口后冻)。
@ -181,7 +181,7 @@ B 类对接上面某几条 A 协议,换引擎 / 换框架 / 换渠道时被换
**运行时真实结构**:核心是 **Agent——无状态 ReAct 引擎**,构造参数持有 model(M3)/ toolkit / middlewares / state。**Workspace 是执行环境,沿两轴注入 Agent**:工具 / MCP / skills 经 Toolkit 注入,本身作 offloader。所以 Agent 持有 Workspace 引用、不嵌在里面;真正"跑在 Workspace 里"的是 MCP 进程、skills、文件。**Agent 实例非常驻**——每 run 现组装、跑完即弃,状态全在可持久化 `AgentState{ context, cur_iter, tasks_context }`
**这条线尚未落代码**:整轨待 0 号 spike 验证,Phaser 一行未落,锁 AgentScope 2.0.2。验证方式不是 n≥30 统计批跑,而是收敛环:并发跑 5 个,错 > 1 个就读日志、分析、修复、并发重跑 5 个。
**这条线的核心已落、0 号 spike 已 accept(2026-06-24)。** M3 自治写出的面包店经营合成富游戏 `feie-005` 跑到 `decision=accept`——9 道 L1 门 + 富游戏三门(三联动/经济/latch)全过、`finished=True`、无熔断,约 20K/36K tokens(+508K 缓存)、墙钟约 610s,服务化已部署到 `mini-desktop:8200`。但这是 **n=1 机制验证、不是统计 go/no-go**:`n≥30` 批跑底座(便宜档 client + RunRecord 采集 + 退路树判定器 + 批跑矩阵)已就位,**真实成功率与成本分布的 n≥30 统计跑仍待执行**。判断 = **go(留观微调)**:M3 一旦被机器门挡在正确契约上,有能力自治写出过全门的多系统富游戏、还能据 verdict 反馈自调平衡;但收敛**强依赖机器门把每类契约违规变成响亮可修反馈**——spike 靠拆掉四个真问题、每个补成机器门才收敛(详见 §5.3/§5.4),纯放开 ReAct + 软约束 prompt 不行。spike 只跑了阶段 2 单写;阶段 1 工作室 Agent Team 按 plan 决策⑤ 留 Phase B(下文 §5.5)。锁 AgentScope 2.0.2。后续统计验证用收敛环:并发跑 5 个,错 > 1 个就读日志、分析、修复、并发重跑 5 个。
> tier2 这条线另有一套总览图,与 §5 各 facet 的细化图互补:生成两阶段 `assets/00-生成两阶段.svg`、系统全景 `assets/01-系统全景.svg`、调用时序 `assets/02-调用时序.svg`、运行时内部结构 `assets/03-运行时内部架构.svg`、ReAct 循环 `assets/04-ReAct循环流程.svg`、复用边界 `assets/06-reuse边界全景.svg`
@ -189,7 +189,7 @@ B 类对接上面某几条 A 协议,换引擎 / 换框架 / 换渠道时被换
## 五、运行时八面(facet)
> 八个 facet 是 §四 两实例的逐面放大,把两条线在每一面的设计讲到可照着实现的颗粒度。tier2 富游戏线的内容偏多——它整轨待 spike、设计密度最高;廉价线在每一面以现行已落的对照锚出现。各面引用的 svg 大图在 `assets/`
> 八个 facet 是 §四 两实例的逐面放大,把两条线在每一面的设计讲到可照着实现的颗粒度。tier2 富游戏线的内容偏多——**它的核心已落、0 号 spike 已 accept**(各面"现/建"按 2026-06-24 `tier2/HANDOFF.md` 真相标注:多数已落,留后的是 n≥30 统计跑、阶段 1 Agent Team、控制面/管理面);廉价线在每一面以现行已落的对照锚出现。各面引用的 svg 大图在 `assets/`
### 5.1 运行时形态
@ -205,7 +205,7 @@ tier2 富游戏线的运行时按 AgentScope 2.0.2 的真实对象结构落地,
多 agent 协作走部署态的 **Agent Team** 星形(leader 用 `TeamCreate` / `AgentCreate` / `TeamSay` 调度 worker),不是进程内 pipeline——2.0.2 已删掉进程内的 MsgHub / pipeline 那套同步编排原语。任务目标与进度的承载也对齐这套结构:目标 = 输入(brief / play_spec / GDD),进度 = `AgentState.tasks_context` 逐项用 `TaskCreate` / `TaskUpdate` 追踪,像一份 todo 清单,没有预先画死的 workflow DAG。
> **现 / 建**:Agent Service、MessageBus、AgentState + StorageBase、Workspace 三实现、官方预算软刹与 trace 中间件都是 2.0.2 现成件(已逐条核源码)。tier2 专属待建的是非常驻装配加每轮 checkpoint 落 Redis、session 三路接线、注入工具集、三道自建硬熔断、沙箱底座选型;整条轨待 0 号 spike,代码一行未落。一处现状要诚实:仓内现有形态是 `ReActConfig(max_iters=1)` 单轮加外层 repair,**不是**多轮自治 ReAct;放开 max_iters、把多轮搬进 Agent 内部是待建(见 §5.3)
> **现 / 建(2026-06-24 spike 后)**:Agent Service、MessageBus、AgentState + StorageBase、Workspace 三实现是 2.0.2 现成件(已逐条核源码)。tier2 的非常驻装配、本地 runner、注入工具集、自建硬熔断、`Tier2TraceMiddleware`**已落并经 feie-005 accept**,服务化已部署 `mini-desktop:8200`。**两处早稿错已纠**:① "官方预算软刹 `ReplyBudgetControlMiddleware`"——2.0.2 源码核验该类不存在,tier2 用自建 `on_system_prompt` + 硬熔断替代;② 多轮不是"搬进 Agent 内部"——纯内部 ReAct 过早放弃,实际是内部单轮 + 有界外层 resume 续修(见 §5.3)。待:每轮 checkpoint 落 Redis 的完整 durable session(决策②起步只本地 runner)、阶段 1 Agent Team(留 Phase B)、SandboxDriver 选型
> 图:`assets/t2-A-01-AgentService与session三路.svg``assets/t2-A-02-Agent非常驻与AgentState.svg``assets/t2-A-03-Workspace双轴注入.svg``assets/t2-A-04-Middleware洋葱.svg`
### 5.2 控制面与配置热取
@ -220,7 +220,7 @@ tier2 富游戏线的运行时按 AgentScope 2.0.2 的真实对象结构落地,
**管理面 UI** 是注册表与观测仓的视图与编辑器,不是真相本身——配置才是真相。它不从零造一个 Dify 式可视化建图器,因为裸图的节点是 Java 代码、ReAct 的工具也是代码,真相在代码与配置里,靠 UI 拖拽生成代码是另一套不可靠的范式。但"配置是真相、UI 是视图"不等于第一期什么都不做,管理面按三档诚实命名地落:phase-1 是配置管理加运行可观测(含一个纯只读、不依赖任何前置、立刻能给创始人看见的最小切片——看各角色当前用什么模型、回放任意一次生成的全轨迹、按 new-api 口径对账成本;其上再加配置编辑,改完落 Git 加审计、不直接热生效),phase-2 是限定范围的图编辑(节点启停、参数、版本 diff、轨迹回放,但渲染的拓扑来自运行时自报、不让用户拖拽改结构),phase-3 是完整可视化建图(拖拽改拓扑,远期不投)。一条贯穿约束:管理面对拓扑只渲染框架运行时自报的结构,绝不在管理面这侧另持一份拓扑模型——廉价线是静态图、tier2 的 ReAct 没有静态图,两套异构范式用同一个管理面,只能靠"渲染运行时自报"这个共同口径,而硬编码的拓扑模型在换框架时反而成为阻力。这也是反锁死(§一)在管理面的落点。
> **现 / 建**:D12 现行已落(默认关闭);配置注册表是"现·部分"(prompt 构建期快照),热取、推广到 skill/tool/mcp、配置审计日志、管理面三 phase 全部待建。
> **现 / 建(2026-06-24)**:D12 现行已落(默认关闭,在 SAA Java 后端);配置注册表是"现·部分"(prompt 构建期快照),热取、推广到 skill/tool/mcp、配置审计日志、管理面三 phase 待建。tier2 侧 `genconfig` 热配已落(雏形);控制面/管理面对 tier2 的接入(D12 入口、管理面 UI)按 plan 决策⑤ 留 Phase B。
> 图:`assets/t2-B-01-控制面四组件.svg``assets/t2-B-02-反锁死五协议.svg``assets/t2-B-03-预算三层强制.svg``assets/t2-B-04-管理面三phase.svg`
### 5.3 单写 ReAct 循环
@ -229,13 +229,13 @@ tier2 富游戏线的运行时按 AgentScope 2.0.2 的真实对象结构落地,
**为什么单写、不并行写**:经营游戏的多个系统共享同一套状态与约定,拆给并行 agent 几乎必然不一致。一手教训是曾把"造 Flappy Bird"拆给并行子 agent,背景跑成了马里奥。单写意味着只有一个 agent 持整个工程的全局视图。要分清边界:单写只管阶段 2 写代码这一环,阶段 1 的工作室设计仍用 Agent Team 星形多 agent 发散——设计要发散与专业分工,实现要防写冲突而收敛到单写。
**为什么把多轮放进 Agent 内、而不是外层**:tier2 与廉价线 WG1 的真正差别不在 prompt、不在生成域,而在"多轮自治放在哪一层"。WG1 是 `ReActConfig(max_iters=1)` 单轮加外层 repair 重试——单写、单轮、靠外层喂错重跑;它故意单轮,是为压便宜档的单价(廉价线生产主线明确不引 AgentScope,框架的 token 膨胀会吃掉便宜档的利润)。tier2 把 max_iters 放开,把多轮从外层 repair 搬进 Agent 内部的 ReAct。这套多轮不是凭空发明,从两条已跑通的参照系演进而来:WG1 的单轮加外层 repair(现行已落)、以及 A-model 那条已经在 M3 上跑通的多轮 ReAct。从 A-model 复用三件成熟范式——agent 自己 reason 判"够了"才终止的 done 门(不靠外层固定轮数,finish 工具收尾吐出 `src/` 源工程)、每轮先跑便宜检查再决定下一步的快反馈、以及把历史压缩了喂下一轮的长程一致性(多文件富游戏轮数多、上下文长,压缩才不撑爆窗口)。fork 起步、独立演进:它复用的框架接缝在 2.0.2 全兼容、零签名改,但拖的 validate / run / prompt / roles 是 LittleJS 专属,按 Phaser 重写近乎全新写——真功夫在重写面加 net-new 的多轮循环、Workspace、Service。
**为什么把多轮放进 Agent 内、而不是外层**:tier2 与廉价线 WG1 的真正差别不在 prompt、不在生成域,而在"多轮自治放在哪一层"。WG1 是 `ReActConfig(max_iters=1)` 单轮加外层 repair 重试——单写、单轮、靠外层喂错重跑;它故意单轮,是为压便宜档的单价(廉价线生产主线明确不引 AgentScope,框架的 token 膨胀会吃掉便宜档的利润)。tier2 原打算把多轮搬进 Agent 内部 ReAct(放开 max_iters),但 **0 号 spike 实测推翻了"纯内部多轮"**:AgentScope 2.0.2 原生 ReAct 一旦模型产出"无 tool_call 的纯文本回合"就退出,M3 调一次 run_gates 看到 fix 就收尾、根本没续修——纯自治 ReAct 会过早放弃。**修法是回归 wg1 的"有界外层 resume"范式**:编排层(`studio.py`)在 agent 停下后,若没真 finish、门没绿、还有预算,就带 verdict 失败反馈再 reply(跨 reply 保留 memory = 原地续修),上限 6 次,外加 finish 门(门没绿不许 finish)。所以"多轮放哪一层"的最终答案不是"搬进 Agent 内部",而是"内部 ReAct 单轮 reason→act + 有界外层 resume 续修",即 wg1 外层 repair 范式从单轮放到多轮。参照系是 WG1 单轮加外层 repair(现行已落)与 A-model 在 M3 上跑通的多轮 ReAct。从 A-model 复用三件成熟范式——agent 自己 reason 判"够了"才终止的 done 门(不靠外层固定轮数,finish 工具收尾吐出 `src/` 源工程)、每轮先跑便宜检查再决定下一步的快反馈、以及把历史压缩了喂下一轮的长程一致性(多文件富游戏轮数多、上下文长,压缩才不撑爆窗口)。fork 起步、独立演进:它复用的框架接缝在 2.0.2 全兼容、零签名改,但拖的 validate / run / prompt / roles 是 LittleJS 专属,按 Phaser 重写近乎全新写——真功夫在重写面加 net-new 的多轮循环、Workspace、Service。
**四道熔断加预算闸**叠在中间件洋葱上,任一先触发即停本局:步数硬顶(给每系统的构建-修复定上限、给整局定 max_iters,防模型靠多轮反复试错把门擦边混过去)、预算闸、卡死探测(语义层判 agent 是否原地打转、空转换汤不换药,而非单纯计步;还要防 agent 改 driver 来绕过它)、双层超时(单步钉死一次工具调用、整局钉死本局总时长)。四道里只有预算闸现在画实线——用官方 `ReplyBudgetControlMiddleware` 软刹,在推理与回复钩子上按预算优雅收尾。但它只是软刹、不强杀:自治多轮一旦不强制截断,会在那 56% 表现层上烧钱发散(一次失控循环能烧掉数美元)。所以**硬熔断(fail-closed)与 ¥ 金额台账必须自建**,做成中间件洋葱上订阅模型调用结束事件的 Middleware,把 token 按 new-api 计费口径折成 ¥ 累进、越过硬上限就直接终止本次生成;这道硬闸的三层强制架构见 §5.2。规模化之前它必须落地,spike 阶段可容忍只挂软刹先跑通
**四道熔断加预算闸**叠在中间件洋葱上,任一先触发即停本局:步数硬顶(给每系统的构建-修复定上限、给整局定 max_iters,防模型靠多轮反复试错把门擦边混过去)、预算闸、卡死探测(语义层判 agent 是否原地打转、空转换汤不换药,而非单纯计步;还要防 agent 改 driver 来绕过它)、双层超时(单步钉死一次工具调用、整局钉死本局总时长)。这套熔断 tier2 是**自建的、且实际比"软刹"强**——要纠一处早稿错:早稿把"官方 `ReplyBudgetControlMiddleware` 软刹"当现成件,但 2.0.2 源码核验**该类根本不存在**;tier2 用自建的 `on_system_prompt` 变换钩子 + 中间件洋葱上订阅模型调用结束事件的硬熔断替代,把 token 按 new-api 计费口径折成 ¥ 累进、越过硬上限就 fail-closed 直接终止本次生成(spike 实测 60/80 轮硬熔断兜底已落,比"软刹优雅收尾"强)。这道硬闸的三层强制架构见 §5.2
**M3 的接法**是这条线能不能成的根因之一。tier2 agent 经官方 `AnthropicChatModel``AnthropicCredential.base_url`(指向 new-api 的 Anthropic 端点),到 MiniMax-M3,计费统一从 new-api 一个平面走。"用对 M3"是三件事:走 Anthropic 原生协议加 agentic 工具循环(循环调工具写源 / build / 跑门 / 读 verdict / 改,而不是 OpenAI 式单次 JSON 填空);thinking 分离(开 thinking,且 max_tokens 须严格大于 thinking_budget);完整 response 与历史保留(每轮的 thinking / text / tool_use 块原样回传入历史,否则 M3 的交错思维失效)。旧用法 60% 失败的最深根因正是反着来——关 thinking、单次 JSON 填空、失败从头重生成,是用法错、不是模型天花板。
> **现 / 建**:九门 harness、new-api 计费平面、WG1 单轮形态、A-model 多轮范式、官方预算软刹、AnthropicChatModel 接法都是现成可信。Agent 内多轮 ReAct、M3 原生接法链路、thinking 分离、三道自建硬熔断、强制硬闸、写源/改/快检的内循环,都是 tier2 待建
> **现 / 建(2026-06-24 spike 后)**:本面核心**已落并经 feie-005 accept**——M3 Anthropic 接法链路、有界外层 resume + finish 门、自建硬熔断(非官方软刹,该类 2.0.2 不存在)、写源/改/快检/跑门内循环都已跑通;`max_tokens > thinking_budget` 启动校验、`RecordingChatModel(Anthropic)` 成本取证已落。待:n≥30 统计跑、把偏脆的文本契约检查(play-scene 工厂结构)做成更稳的结构化校验
> 图:`assets/t2-C-01-单写ReAct循环.svg``assets/t2-C-02-M3原生接法.svg``assets/t2-C-03-四道熔断.svg``assets/t2-C-04-多轮范式承amodel.svg`
### 5.4 三层校验与九门
@ -248,12 +248,12 @@ L1 的主体是九门,每门在真浏览器里真玩一局取确定性证据:A_b
九门是超休闲单局的机制地板,不查跨系统接线;富游戏的难点恰在跨系统,所以在九门之上补三道 tier2 专属的确定性门。**三联动门**证三个系统真耦合而非孤岛:订单要的物品必须能被合成系统产出(从合成链静态推到订单的跨表可达性检查)、合成链必须是有向无环图(拓扑检查不许成环)、完成订单时必须真调资源系统加金币、合成消耗时必须真调扣食材。**经济门**用真输入把两条路驱动到终态:可盈利路径(金币从开局攒到目标判赢)、可破产路径(连续若干订单流失判输),关键约束是两条路都得被 harness 的真输入序列驱动跑到终态——能在数据表里算出来和能被真玩到是两回事。**latch 门**管终态落定不回弹、宿主能读到终局,承接的是"游戏无 emit 通道、终态焊成可轮询 latch、宿主轮询读"这条现行装载约束。九门加这三门合起来全绿,才算 tier2 的富游戏机制地板通过。
两道条件门靠 **driven 感知的 advisory 分级**自动切换:一个 play-spec 既没有 driver 也没有非空输入序列时,判定 driven=false,E_live 与 H_progress 降为 advisory(仍跑仍报告,但不计入 pass),硬门只剩七道;一旦给了 driver 或输入序列,driven=true,两门自动恢复致命、九门全计入——不改一行代码。理由很朴素:没人给输入时画面本就静、机制本就没进展,硬判这两门是冤枉它。这正是 observe→enforce 范式的源头,tier2 修 latch 门与经营门复用它。这套分级已在 A-model 分支实现、创始人 2026-06-22 裁定,但尚未合并进主干,tier2 以合并后版本为准对账。
两道条件门靠 **driven 感知的 advisory 分级**自动切换:一个 play-spec 既没有 driver 也没有非空输入序列时,判定 driven=false,E_live 与 H_progress 降为 advisory(仍跑仍报告,但不计入 pass),硬门只剩七道;一旦给了 driver 或输入序列,driven=true,两门自动恢复致命、九门全计入——不改一行代码。理由很朴素:没人给输入时画面本就静、机制本就没进展,硬判这两门是冤枉它。这正是 observe→enforce 范式的源头,tier2 修 latch 门与经营门复用它。这套分级已落(A-model 分支与 tier2 的 play-phaser 引擎分支都字面实现了 driven 两态),创始人 2026-06-22 裁定;A-model 已合入 dev/2.0.0,合并后接缝以合并版对账。
spike 第二段放开让 agent 自产或扩展 driver 时,会撞上一个 Goodhart 雷:**写者不能写判自己游戏的那张卷子**——agent 既造游戏又造判它的 driver,会把 driver 写成只走它走过的路、只读不暴露真实力的字段,然后全绿假绿。隔离办法是拆开写卷人与判卷人,走三层:平台先按 schema 加白名单编译(非白名单或越界字段直接拒)、再交一个不向着被评对象、专找漏洞的独立 adversarial 评审(查它是否覆盖真实玩家路径、是否读了作弊字段)、三层全过才入验收。配套采两个指标:自产 driver 被独立评审打回的比例、driver 被修改的次数(防靠反复改 driver 逃避卡死探测)。
> **本节是运行时视角的九门与三层校验,确定性验收的护城河命题(机器判、禁自评、出题≠被考、per-tier verdict 元协议)即落在此节与 §三 A5**;另有一层"对外开闸放行"的 6 道门(D12 控制平面、GP9 合规先行、落库观测三门、首局体验门、G0/G1 前置)坐在九门机制地板之上,是独立 SoT,见 [`验收门.md`](验收门.md),其基准靶集见 [`WG1基准.md`](WG1基准.md)。
> **现 / 建**:廉价线九门现行已落、判过大量游戏;三层校验框架、tier2 三道专属门、Phaser 探针重写、自产 driver 三层隔离全部待建
> **现 / 建(2026-06-24 spike 后)**:廉价线九门现行已落。tier2 侧——三层校验框架、Phaser 探针(九门 + 富游戏三门:三联动/经济/latch)、L3 视觉软检 observe-only 接线**已落并在 feie-005 全过**;spike 收敛补的四道契约机器门(`validate_datatable` 数据表 schema+DAG+可达性、`LOCKED_PLATFORM_FILES` 锁平台文件、`validate_play_scene` 表现层契约、finish 门)也已落。待:自产 driver 三层隔离(spike 第二段)、偏脆的文本契约门做成结构化校验
> 图:`assets/t2-D-01-三层校验全景.svg``assets/t2-D-02-九门逐门.svg``assets/t2-D-03-富游戏专属门.svg``assets/t2-D-04-advisory分级与Goodhart隔离.svg``assets/t2-D-05-CDP探针Phaser重写.svg`
### 5.5 能力面:skills 与 MCP 工具
@ -268,7 +268,7 @@ tier2 与 A-model(廉价线那条 LittleJS 轻量经营档)**两线分立、运
廉价线那一侧的能力面是另一套:SAA 用裸 `StateGraph` 加自定义 `NodeAction` 手写确定性编排,模型层直接复用上游 spring-ai 的 `OpenAiChatModel`(baseUrl 指 new-api、多个 bean 仅 model 名不同),checkpoint 用 `MysqlSaver` 单权威。它和 tier2 的能力面同源于"框架可换、契约不变"的原则,但因为生成主线本质是确定性多步编排、不是给 LLM 一堆工具自决,所以用裸图原语、不套自治 agent 框架。具体的图原语 API、repair 回边、子进程调用与依赖冲突避让属实现细节,落在配套 playbook 与代码里、不进本文。
> **现 / 建**:九门 harness 钩子、A-model 四插件契约与 driver 分级、SAA 能力都是现行已落(SAA 一侧基于 v1.1.2.2 真实源码四路取证)。九工具的 Phaser 实现、五件套通用接口、Agent Team 星形、阶段 2 单写 ReAct 待 spike 后落码。一条克制纪律:第一版不把五件套建满——只有 Phaser 一个真实现(Pixi 留桩)时把接口钉死,会被唯一实现反向决定,真正的通用接口等第二引擎落地、有两实现做依据再抽
> **现 / 建(2026-06-24 spike 后)**:九门 harness 钩子、A-model 四插件契约、SAA 能力现行已落(SAA 一侧基于 v1.1.2.2 真实源码四路取证)。tier2 侧——九工具的 Phaser 实现(含 `write_source``LOCKED_PLATFORM_FILES` 锁:拒改 main.js/game-core/systems/layout/tables/play-runtime)、mmx 资产工具、阶段 2 单写 ReAct **已落并经 feie-005 accept**。待:阶段 1 工作室 Agent Team(留 Phase B,spike 只跑阶段 2 单写)、五件套通用接口(克制:只有 Phaser 一个真实现时不抽,等第二引擎落地有两实现再抽)
> 图:`assets/t2-E-01-skills清单.svg``assets/t2-E-02-引擎能力包manifest.svg``assets/t2-E-03-prompt两阶段角色.svg``assets/t2-E-04-Amodel插件复用.svg`
### 5.6 源项目契约与装载
@ -281,7 +281,7 @@ tier2 与 A-model(廉价线那条 LittleJS 轻量经营档)**两线分立、运
右支的装载比左支多出一段:入库的是一个真 Phaser 工程(多源文件加构建脚本加依赖锁),取回之后要先按构建 profile 用 esbuild 打包出可玩 bundle,再在沙箱里跑——这一段构建是左支即取即跑所没有的。`finish` 工具交付的形状与落库取回认的形状**共用同一份 schema**:agent 自治跑完经 finish 吐出的那个工程,和落库取回认的那个工程本是两处定义,共用一份则"契约即工具签名,改一处即两处一起改",从源头消除交付与落库漂移这个失败面。装载终态仍服从 latch 轮询:游戏跑到结束态时不主动发事件,而是把状态焊成可轮询的终态、宿主每帧轮询读。整条线的产物是可维护的源工程而非死 bundle,改源、重新构建、按内容哈希长期取回重建——这正是"改源不改包、游戏即长生命周期项目"在装载面的兑现。
> **现 / 建**:左支 ECS-lite 装载契约现行已落、是唯一的对照锚;右支七要素契约、第二装载分支、finish 共用 schema 全部待建(tier2 整轨待 spike)。
> **现 / 建(2026-06-24 spike 后)**:左支 ECS-lite 装载契约现行已落。tier2 侧——spike 已产出真 Phaser `src/` 多文件工程、`finish` 门(门没绿不许 finish)已落、服务态落库已部署(manifest 进 MySQL、源文件全文进 MinIO,save→fetch 往返已验)。待(按 plan 决策⑤ 交后端):正式七要素源项目契约 schema、feed→play 第二装载分支(tier2 产物进 feed 的播放路径)。
> 图:长生命周期源项目 `assets/08-长生命周期源项目.svg`;`assets/t2-F-01-源项目契约七要素.svg``assets/t2-F-02-第二装载分支.svg``assets/t2-F-03-finish共用schema.svg`
### 5.7 观测与成本(OTel)
@ -292,7 +292,7 @@ tier2 与 A-model(廉价线那条 LittleJS 轻量经营档)**两线分立、运
成本不是估的,从 new-api 的 quota 权威口径折出每款多少人民币——每次调用的 quota 就是真实的倍率成本,比按公开单价估更准。OTel 的语义约定里没有成本属性,所以"成本钉 new-api 计费行"这条自研口径要保留,经 traceId 关联进 trace。这里有一个红线缺口:M3 那一档走 Anthropic 原生端点,而现有成本记录只覆盖 OpenAI 路,抓不到它,于是 M3 这档的 token 用量采不到、单款成本对它直接缺、全矩阵成本没法对比。接点是补一个包住 Anthropic 模型调用的录制变体,抓每次按模型分列的 token 用量,把 Anthropic 路补齐。计费平面的纪律是"协议自由、计费收口"——M3 走 Anthropic 端点、便宜档走各自端点,协议与 SDK 不锁死、每档走各自最优端点,但所有路最终都收口到 new-api 的 quota 按模型折 ¥ 这一个计费平面。
> **现 / 建**:new-api quota 计费平面与读 quota 折 ¥ 现行已落;统一 trace 契约、tier2 的 Event→OTel adapter、包住 Anthropic 路的录制变体都待建。NEWAPI_KEY、端点、机器见 `docs/内网凭据与端点.md`
> **现 / 建(2026-06-24 spike 后)**:tier2 侧全部已落并真跑验证——`Tier2TraceMiddleware` 挂 writer agent 最外层洋葱、ReAct 全事件旁路 ingest 进 TraceAdapter(真跑 647 事件 dropped=0);`RecordingChatModel.records``newapi_pricing.py`(活读 new-api /api/pricing 倍率,取不到回落显式参数并告警、不中断主链)折 ¥(真跑 cost_rmb=1.29);`contracts/trace/` 已立 additive 事件契约位(忠实 trace.py 真实 sink 形状)。待:统一 trace 契约的 SAA 侧 adapter 映射(两条线对齐)。NEWAPI_KEY、端点、机器见 `docs/内网凭据与端点.md`
> 图:`assets/t2-H-01-trace统一契约.svg``assets/t2-H-02-观测管道.svg``assets/t2-H-03-成本台账.svg`
### 5.8 四层职责
@ -301,11 +301,11 @@ tier2 与 A-model(廉价线那条 LittleJS 轻量经营档)**两线分立、运
复用边界看两个维度:来源(官方现成,即 AgentScope 2.0.2 自带,还是自建)乘以共享(两条生成线公共,还是 tier2 私有)。一个关键的交叉结论是——**公共组件等于自建与共享的交集**(九门、三层校验、CDP、计费、送审、feed、trace),它们是团队自建、被两条线共用的,**不是官方现成能力**;"框架里有"不等于"公共组件"。每个自建项还标出它用哪种 AgentScope 扩展点落地:验收门是框架外的确定性断言、硬熔断三件是挂在洋葱上的 Middleware、角色 prompt 与模型路由是纯数据的 Prompt 热配置、skill 目录经 Workspace 的 add_skill 注入、工作记忆与经验召回是 AgentState 的 context 加经验库。把载体类型标清楚,是为了让"换引擎等于换 id 和 version、trace 始终按 id/version 归因"这条目标态有落点,也防止把本该热配的东西硬编码进机制。
一次诚实的对地基现成度的上修:有样早稿打算自建的能力,其实官方已有现成件,该删掉自建、改用官方——token 计量用模型响应自带的用量、软预算控制用官方的预算中间件、结构化输出用模型层能力、可观测 trace 用官方 TracingMiddleware(纯 OTel)、经验召回用现成的记忆框架、多 agent 总线用 Agent Team。反过来,官方确实没有、必须自建或引第三方的是:RAG 检索管线、评测模块、成品级的框架互通、以及两块护城河——确定性验收门(框架不提供)和强制 fail-closed 的预算硬闸(官方软刹刹不住已在烧钱的失控循环)
一次诚实的对地基现成度的上修:有样早稿打算自建的能力,其实官方已有现成件,该删掉自建、改用官方——token 计量用模型响应自带的用量、结构化输出用模型层能力、可观测 trace 用官方 TracingMiddleware(纯 OTel)、经验召回用现成的记忆框架、多 agent 总线用 Agent Team。**这里要纠一处早稿错**:早稿还列了"软预算控制用官方 `ReplyBudgetControlMiddleware`",但 0 号 spike 期 2.0.2 源码核验**该类不存在**——这一项不属"改用官方",反而归下面"必须自建"(tier2 已用自建 `on_system_prompt` + 订阅模型调用结束事件的硬熔断实现)。官方确实没有、必须自建或引第三方的是:RAG 检索管线、评测模块、成品级的框架互通、以及两块护城河——确定性验收门(框架不提供)和强制 fail-closed 的预算硬闸。
配置分三类,决定一样东西改了要不要发版。硬代码机制类(确定性门断言、四道熔断、基线硬门强制、循环与记忆的组装压缩机制、权限硬上限、那几条铁律)随代码走、不外置。版本化安全与构建配置类(依赖锁、引擎版本、构建 profile、启用的沙箱类型、权限上限只可降不可升)审计留痕、不热改。热配置策略类(prompt 文本、各 agent 的模型路由、few-shot、skills、max_iters、熔断阈值、新增门的 observe/enforce 档、上下文预算、压缩阈值、枚举内的 RAG 源、记忆模式)改配置不发版。一条颗粒度澄清:新增或删除一类内容等于改枚举、是硬代码;已有类里增减取值(比如多挂一个 RAG 源)是可配置。三类门也同此分:基线确定性硬门永远强制、不可关,新增确定性门走 observe→enforce(默认只观测,达标率稳了才赋拒发权),M3 视觉软检永远只观察、绝不放行也绝不拒发。
> **现 / 建**:四层视角与复用边界是设计框架;tier2 私有自建项(多轮循环控制、硬熔断、Phaser 能力包、验收门重写)全部待 spike 后落码。一处实证差异留待 spike 前小验:经验召回用树内捆绑的记忆 middleware 还是生态里独立的记忆框架。spike 阶段只需 spike-grade 地基(硬编码 prompt/config 可接受),完整的配置外置、长期记忆治理、skill 家族、管理面都留 spike 过后
> **现 / 建(2026-06-24 spike 后)**:四层视角与复用边界是设计框架;tier2 私有自建项(有界外层 resume 循环控制、自建硬熔断、Phaser 能力包、验收门重写 + 四道契约机器门)**已落并经 feie-005 accept**;spike-grade 地基(硬编码 prompt/config)已够 spike。留 Phase B:完整配置外置、长期记忆治理(ReMe vs 树内 mem0 待小验)、skill 家族、阶段 1 Agent Team、控制面/管理面
> 图:本面以档内 mermaid 呈现(四层职责对应、复用边界二维、三类门加三类配置),无独立 svg。
---

View File

@ -1,7 +1,7 @@
---
title: "feat: tier2 富游戏自治生成线实现方案AgentScope 2.0.2 + Phaser"
type: feat
status: active
status: active · Phase A + 0 号 spike feie-005 accept 已落(2026-06-24)· 待 n≥30 统计 + 阶段1 Agent Team
date: 2026-06-22
origin: docs/brainstorms/2026-06-22-tier2-整体实现方案-requirements.md
---
@ -12,6 +12,19 @@ origin: docs/brainstorms/2026-06-22-tier2-整体实现方案-requirements.md
把 tier2 富游戏自治生成线从设计落成可执行序列:先在新顶层 `tier2/` 搭起一个独立的 AgentScope 2.0.2 Python 模块fork 现有廉价线种子 worker、单写起步、本地 runner、不上 Agent Service再用 M3 写代码逻辑、mmx 产美术音乐,在三层校验(初期只焊 L1的笼子里连续迭代生成引擎。顺序连续、判据离散——M3 证路是软门、便宜档 n≥30 是硬门、退路树沿用《tier2 实现详设》的数字触发线,只有硬门通过才投入重机器(工作室 Agent Team、第二装载分支、配置外置、控制面、ReMe。Phase A集成+环境+迭代写成可立即执行的详细单元Phase B重机器写成纲要、显式 gated 在 B 门后。
## 执行现状(2026-06-24 spike / 2026-06-25 doc-sync)
本 plan 写于 spike 前。**0 号 spike 已跑、`feie-005` = `decision=accept`**(M3 自治写面包店经营合成富游戏:9 道 L1 门 + 富游戏三门全过、`finished=True`、无熔断,约 20K/36K tokens、墙钟约 610s),判断 = **go(留观微调)**。落地实况(权威基准 `tier2/HANDOFF.md`):
- **已落**:U1U7 核心生成线(种子 fork + 有界外层 resume + Phaser `validate`/`run`/`prompt`/`roles` 重写)、Phaser CDP 探针 + 九门 + 富游戏三门、四道收敛契约机器门(`validate_datatable`/`LOCKED_PLATFORM_FILES`/`validate_play_scene`/finish 门)、mmx 资产工具、M3 Anthropic 接法 + `RecordingChatModel` 成本取证、`Tier2TraceMiddleware`→TraceAdapter(647 事件 dropped=0、cost_rmb=1.29)、L3 视觉软检 observe-only、**n≥30 批跑底座**(便宜档 client / `RunRecord` / 退路树判定器 / `batch_run`+`aggregate`)、**服务化 P4 部署 `mini-desktop:8200`**(Agent Service + 落库 MySQL+MinIO,save→fetch 已验)。
- **两处早稿设计错已纠(回写 SoT①)**:官方 `ReplyBudgetControlMiddleware` 2.0.2 不存在 → 自建 `on_system_prompt`+硬熔断;纯内部多轮 ReAct 过早放弃 → 有界外层 resume(wg1 范式回归)。
- **🔴 真待执行**:**n≥30 统计 go/no-go**(本次 n=1 是机制验证、非统计;底座已就位可直接跑)· 阶段 1 工作室 Agent Team(决策⑤ Phase B)· 控制面/管理面对 tier2 接入(D12/`GenerationDispatcher` 在 SAA Java 后端)· feed→play 第二装载分支与正式源项目契约(交后端)· ReMe vs 树内 mem0 小验。
- **下方 U8U10「B 门后才投·纲要」口径已被既成事实部分推翻**(服务化/落库/观测已落):读时以本节 + `tier2/HANDOFF.md` 为准,不以 U8U10 纲要字面为准。
spike 收敛 commit 在 `feat/tier2-phaser-engine`
---
## Problem Frame
绘境现有生成线只擅长超休闲单局小游戏LittleJS 声明式数据壳 + 便宜模型填空 + 九门 harness。合成、经营、挂机这类多系统富游戏肥鹅美食街档它做不出——难在重 UI 表现层、多系统稠密接线、大内容量。2026-06-20 对抗审查把"声明式数据壳 + 自由 JS"判到几何色块单局这一档的天花板,富游戏必须另起一轨。