11 KiB
Generated Scene Rectification Design
Status: Draft Date: 2026-04-17 Author: Codex
Problem Statement
当前自动场景转 skill 流程虽然已经引入了 Scene IR、workflowArchetype 和 readiness 分级,但对营销类复杂报表场景仍存在三类致命偏差:
sceneId会从中文场景名退化成低信息量标识,例如营销2.0零度户报表数据生成 -> 2-0。- bootstrap 会被
localhost导出或辅助服务污染,导致内网入口域名解析错误。 - workflow 会在证据不完整时提前归类,导致
paginated_enrichment场景缺失paginate、secondary_request等关键步骤证据。
这三个问题叠加后,会出现“结构上看似已生成 skill,实际上放到内网一定跑不通”的假阳性结果。现有生成器仍然偏向“模板填充”,没有形成一条对内网场景足够保守、可审计、可拒绝错误输出的整改链路。
Rectification Goal
本次整改目标不是继续提升“生成成功率”,而是把生成器收敛成一个更稳的 scene skill rectifier,做到:
- 不再产出
2-0这类无业务语义的sceneId。 - 不再让
localhost、静态资源地址、模板噪声参与 bootstrap 竞争。 - 不再在工作流证据缺失时冒然输出
paginated_enrichment或其它高复杂 archetype。 - 不再把低可信生成结果伪装成“可直接内网试跑”的 skill。
- 为后续 mini 版
skill-creator打下可复用的整改底座。
Non-Goals
- 不在本轮整改中解决全部历史场景兼容性。
- 不要求本轮整改覆盖登录态恢复、复杂鉴权、宿主浏览器差异。
- 不要求 LLM 单独完成中文场景语义恢复,整改仍以确定性证据优先。
- 不要求一步到位生成所有 browser workflow 细节;允许在 readiness 门禁前失败关闭。
Current Failure Reconstruction
以 营销2.0零度户报表数据生成 为例,当前错误链路大致如下:
- 目录名 fallback 经过仅保留
[a-z0-9]的 slug 规则后,中文主体被剥离,只剩2-0。 - URL 候选集合没有分层,
http://localhost:13313/...与http://yx.gs.sgcc.com.cn、http://yxgateway.gs.sgcc.com.cn/...被放在同一个 bootstrap 竞争池。 - 工作流分类优先命中通用的“多模式字段”信号,导致 archetype 判定先偏向
multi_mode_request。 - endpoint 集合又被
${apiUrl}、静态模板串、localhost 导出地址等噪声稀释,最终 workflow step 构造无法稳定提取“分页主请求 -> 逐户补数 -> 过滤 -> 导出”的完整证据。 - 生成器仍然给出可输出 skill,造成用户误以为该 skill 具备内网可运行性。
所以整改不能只修某一个 if 分支,而是必须同时修正命名链、bootstrap 链、workflow 链和 readiness 链。
Rectification Principles
1. Fail Closed 优先于 Fail Open
当 sceneId、bootstrap、workflow 任一关键链路证据不足时,生成器必须降级、阻断或明确标红,而不是继续生成一个“看起来完整”的 skill。
2. 先判定证据类别,再消费证据
URL、函数名、分页变量、过滤条件、导出调用,必须先完成“证据分层”与“噪声剔除”,再参与 archetype 分类和模板编译。
3. Bootstrap 与 Export 必须解耦
内网业务入口域名与本地导出服务是两类完全不同的运行时概念。localhost 可以作为 export/downstream evidence,但绝不能作为 bootstrap candidate。
4. 命名必须具备业务可读性
sceneId 不是目录技术标识,而是 skill 的业务身份。任何低熵、数字化、占位式 id 都必须被视为无效结果。
5. Archetype 输出必须受完整工作流约束
paginated_enrichment 不是“有分页字段”就能输出,而必须同时满足主列表请求、分页证据、二次请求证据和聚合/过滤/导出链路中的最低组合。
Target Architecture
source scene
-> source scan
-> evidence stratification
-> naming chain
-> bootstrap chain
-> workflow chain
-> archetype gating
-> readiness grading
-> skill generation or fail-closed report
整改后的核心不是新增一个大模型步骤,而是在现有 Scene IR 前后补齐四道约束:
- 命名约束
- bootstrap 约束
- workflow 约束
- readiness 约束
Rectification Design
Naming Chain Rectification
sceneId 整改的目标是让“中文目录名 -> 业务可读 sceneId”成为一条受控链路,而不是任由 fallback 退化。
整改方案如下:
sceneId候选来源按优先级分层:- LLM 明确返回的业务语义 id
- 确定性抽取出的英文业务关键词组合
- 基于中文场景名的受控 transliteration / alias 规则
- 最终 fallback 仅可作为
invalid_candidate,不可直接落盘
- 新增
sceneId有效性校验:- 不能是纯数字或数字主导
- 不能短于业务最小可读长度
- 不能只由版本号或通用词组成
- 不能与
sceneName语义完全脱钩
- 对
2-0、1-0、report、scene这类低熵 id 统一判为invalid_scene_id。 - 一旦命中无效 id,生成器只能输出整改报告或要求人工确认,不允许直接生成正式 skill 目录。
这条链路的结果是:sceneId 从“字符串清洗结果”升级为“业务标识产物”。
Bootstrap Chain Rectification
bootstrap 整改的目标是把 URL 候选集拆成不同证据层,彻底消除 localhost 污染。
整改方案如下:
- 对 URL 候选先做角色分层:
business_entrybusiness_apigateway_apiexport_servicelocal_helperstatic_assettemplate_noise
- 角色识别规则要求:
localhost、127.0.0.1、SurfaceServices、ReportServices默认归入export_service或local_helper.js、.css、模板占位 URL、字符串格式化残片归入static_asset或template_noise- 页面常量中的
sourceUrl、首页入口地址、业务网关前缀优先归入business_entry或business_api
- bootstrap 决策只允许消费:
business_entrybusiness_apigateway_api
- 当
business_entry与gateway_api并存时:expectedDomain取业务主域- API 前缀保留在 request evidence 中,不直接覆盖 target page
- 当只识别到
localhost或噪声地址时,bootstrap 必须判为unresolved_bootstrap,生成器直接降级。
这条链路的结果是:localhost 仍可保留为“导出依赖证据”,但永远不再有资格被提升成业务入口域名。
Workflow Chain Rectification
workflow 整改的目标是从“字段特征分类”转为“请求链重建分类”。
整改方案如下:
- 在
Scene IR中把 workflow 证据拆成四层:- request evidence
- pagination evidence
- secondary request evidence
- post-process evidence
- archetype 分类不再优先依赖泛化字段名如
type/tab/mode/status,而是优先依赖:- 是否存在主列表请求
- 是否存在稳定分页变量组合
- 是否存在逐项或逐批二次请求
- 是否存在过滤、聚合或导出动作
- endpoint 进入工作流前必须经过归一化:
- 去掉
${apiUrl}、格式化占位串、日志文本、异常字符串 - 去掉
localhostexport endpoint 对 archetype 的干扰 - 合并同一业务 API 的不同拼接形态
- 去掉
paginated_enrichment的最小证据门槛改为:- 至少一个主列表请求
- 至少一组分页变量
- 至少一个二次请求入口或明确定义的逐户补数函数
- 至少一个后处理动作:
filter、transform、export之一
- 如果只满足部分证据:
- 可保留为
candidate_paginated_enrichment - 但不得进入正式
paginated_enrichment编译路径
- 可保留为
multi_mode_request只在“模式切换显著改变请求体、列定义或响应路径”时成立,不能仅凭通用字段名命中。
这条链路的结果是:营销类场景只有在真正重建出“分页 + 补数 + 后处理”证据后,才会进入对应编译器。
Readiness Chain Rectification
readiness 整改的目标是把“能否生成”与“能否内网试跑”明确分开。
整改方案如下:
- 新增关键门禁:
scene_id_validbootstrap_resolvedworkflow_complete_for_archetyperuntime_contract_compatible
- 只有全部通过时,结果才可标为
A或B。 - 任一关键门禁失败时:
- 结果只能是
C - UI 与报告中必须显式展示缺失项
- 允许输出分析报告,但不应默认输出可运行 skill
- 结果只能是
- 对
marketing-zero-consumer-report这类参考场景,readiness 最低通过条件应明确写死为:- 非退化
sceneId - bootstrap 指向
yx.gs.sgcc.com.cn体系 - workflow 含
paginate - workflow 含
secondary_request - workflow 含
filter或export
- 非退化
这条链路的结果是:生成器从“只要能写文件就算成功”切换为“只有通过门禁才算可试跑”。
Superpowers Landing Strategy
本整改必须通过 superpowers 的 spec -> plan -> execution 三段式落地,不接受直接跳到零散修补。
落地顺序应为:
- 先基于本设计补一份对应的
docs/superpowers/plans执行计划。 - 再按计划拆解到 naming、bootstrap、workflow、readiness 四个任务包。
- 实施过程中严格以计划边界为准,不额外扩展到登录、鉴权、宿主接入等非本轮范围。
File Impact
本设计预期主要影响以下区域:
| File | Responsibility |
|---|---|
frontend/scene-generator/generator-runner.js |
命名 fallback、URL 分层、workflow 证据重建、门禁前分析 |
frontend/scene-generator/llm-client.js |
sceneId 语义补全约束、证据摘要输入、低熵输出拦截 |
frontend/scene-generator/server.js |
readiness 汇总、整改风险输出、生成阻断策略 |
frontend/scene-generator/sg_scene_generator.html |
显示 invalid sceneId、bootstrap 角色、workflow 缺证和 readiness 风险 |
src/generated_scene/analyzer.rs |
证据分类、endpoint 去噪、archetype 前置判断 |
src/generated_scene/ir.rs |
承载分层 evidence、candidate archetype、门禁状态 |
src/generated_scene/generator.rs |
按门禁决定是否允许进入编译器和正式输出 |
Acceptance Criteria
满足以下条件时,视为本整改设计达成目标:
- 中文场景目录不再退化生成
2-0、1-0等低熵sceneId。 localhost、127.0.0.1、导出服务地址不再进入 bootstrap 竞争链。marketing-zero-consumer-report只有在具备paginate + secondary_request + post-process证据时才会进入paginated_enrichment编译路径。- 证据不足时,系统输出整改报告和 readiness 风险,而不是默认生成可运行 skill。
- 生成器对外定位从“自动模板生成器”收敛为“带门禁的通用场景 skill 转化器”。
Open Questions
sceneId的中文转英文策略是引入固定 alias 词表,还是允许 LLM 先给候选再由规则校验收敛。gateway_api与business_entry并存时,是否需要在Scene IR中同时保留entryDomain与apiDomain。- readiness 阻断后,默认是否仍允许用户手工确认并强制生成一个
draftskill 包。