十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

A2UI Atom 推理格式迭代优化复盘:ATOM_RULES 事件上下文规则紧凑化的评测、失败样本与回退决策

A2UI Atom 推理格式迭代优化复盘:ATOM_RULES 事件上下文规则紧凑化的评测、失败样本与回退决策 A2UI Atom 推理格式迭代优化复盘ATOM_RULES 事件上下文规则紧凑化的评测、失败样本与回退决策【免费下载链接】a2ui项目地址: https://gitcode.com/GitHub_Trending/a2/a2ui本文复盘 a2ui 仓库eval/iterative_format_optimizer流水线下 atom 推理格式的第 050 次迭代目录run_050_63b3ac0c_compact_rule_formatting_action_event_context_maps一次仅改动 ATOM_RULES 一行规则文本的紧凑化假设如何在保持 Schema 准确率 100% 的同时导致 Quality Score 从 100% 回落到 83.3%并依据评分模型的 Rule 1 正确性护栏被回退Backtracked。读完你可以掌握该格式优化的完整决策模型S_opt 公式、效率上限、一次完整迭代的产物结构report.md / run_meta.json / patch.diff、失败样本dogBreedGenerator的完整评测证据以及token 效率换质量类优化反复踩坑的规律。一、背景A2UI 的迭代式推理格式优化流水线A2UI 是 Google 推出的 Agent 到 UI 协议其 Python Agent SDK 中除了标准 JSON 消息格式外还实验性地支持多种推理格式inference format用更紧凑的中间表示让 LLM 生成 UI。atom 格式是其中之一它用紧凑的 S-Expression 表示组件树由 Atom 格式包 中的AtomFormat、AtomParser、AtomCompiler、AtomDecompiler、AtomPromptGenerator五个核心类分别负责策略装配、解析、编译到 A2UI v1.0 JSON、反编译和提示词生成。eval/iterative_format_optimizer/目录承载了对这些格式的系统性迭代优化每一轮迭代提出一个假设如改编译器行为或改提示词规则跑基准评测与单元测试再依据量化评分模型决定保留Kept或回退Backtracked。技能定义文件 SKILL.md 给出了标准六步工作流分析历史检查history/format/下的历史运行与history_summary.md避免重复已回退的假设实现假设修改agent_sdks/python/a2ui_agent/src/a2ui/inference_formats/experimental/format/下的compiler.py、prompt_generator.py或parser.py跑单元一致性测试pytest执行基准评测python scripts/optimize_format.py --format format按决策规则评估必须通过 Pytest 且保持基线准确率Code Output Tokens 增幅不得超过 5%综合分 S_opt 改善才保留否则git reset --hard HEAD回退归档与同步用--archive归档运行产物并用python scripts/sync_history.py更新历史索引。1.1 评分模型与决策护栏决策的量化依据在 scoring_model.md 中定义分为三层正确性护栏不可协商任一失败必须回退规则指标要求Rule 1aPytest 单元一致性必须 PASS100% 通过Rule 1b算法 Schema 通过率SchemaAcc输出载荷对目标 catalog JSON Schema 的通过率 ≥ 基线Rule 1c质量分QualityScoreLLM 判卷的语义意图匹配分 ≥ 基线效率回退上限超过任一上限必须回退Code Output Tokens 增幅 5%防止格式冗长化流式延迟Non-reasoning Output Time增幅 10%Reasoning Tokens 增幅 15%防止提示词指令造成搜索空间歧义。综合优化分 S_opt[ S_{\text{opt}} 0.50 \cdot \text{SchemaAcc} 0.30 \cdot \text{QualityScore} - 0.15 \cdot \frac{\text{CodeTok}}{\text{BaseCodeTok}} - 0.05 \cdot \frac{\text{ReasonTok}}{\text{BaseReasonTok}} - 0.03 \cdot \frac{\text{InputTok}}{\text{BaseInputTok}} ]决策规则S_opt(Current) S_opt(Baseline)则 KEEP否则 REVERT。Run 050 正是被这条决策链拦下的一次典型回退。二、Run 050 的假设与改动内容Run 050 的元数据见 run_meta.json{ hypothesis: Compact rule formatting for action event context maps in ATOM_RULES., notes: Pytest 100% pass (507 passed). Algorithmic Schema Acc maintained at 100.0%. However, Quality Score regressed from 100.0% to 83.3% (-16.7%). Reverted per Rule 1 correctness guardrail., status: Backtracked, metrics: { code_tokens_median: 217.5, reasoning_tokens_median: 4875.0, input_tokens_median: 4431.5, total_samples: 0 } }假设是对 ATOM_RULES 中Action Events规则的表述做紧凑化——即把事件上下文参数context map的写法说明压缩让提示词更短、模型输出更省 token。具体改动见 patch.diff只修改了 prompt_generator.py 中ATOM_RULES常量的第 8 条规则当前仓库保留的是改动前的版本第 58 行改动前当前仓库中的文本8. Action Events: - Actions use (Event action_name :param1 $/value). Interactive controls with action attributes MUST provide an action expression, e.g., (ActionComponent :child (ChildComponent Text) :action (Event click_action)).改动后Run 050 引入后被回退的文本8. Action Events: - Actions use (Event action_name :param1 $/value) or (Event action_name). Omit context parameters when parameterless. Interactive controls with action attributes MUST provide an action expression.对比两个版本可以精确定位假设意图新增(Event action_name)这种无参数事件写法并明确无参数时省略上下文参数Omit context parameters when parameterless——这与 atom 编译器此前的优化方向一致run 033 曾在编译器侧自动省略无参事件的空context: {}映射并被保留同时删掉了整段示例:action (Event click_action)的完整组件用法示例。也就是说这次改动是少给示例、多给规则的紧凑化思路。完整上下文ATOM_RULES是 prompt_generator.py 顶部定义的约 60 行系统提示词包含 11 条语法规则组件节点、原始类型、属性参数、严格树嵌套、数据绑定、数据模型填充、动态列表模板、Action Events、独立操作、语法示例、严格目录遵循由AtomPromptGenerator.generate()与动态生成的组件/函数目录签名拼接成完整系统提示词。改动只动了其中一条规则属于最小侵入式假设——这正是该流水线鼓励的实验方式。三、评测结果指标全貌与 Pytest 报告的解读report.md 给出的汇总表策略atom评测模型google/gemini-3.5-flash指标BaselineCurrentDiffPytest ConformancePASSFAIL-Overall Pass Rate0.0%83.3%-Algorithmic Schema Pass Rate0.0%100.0%-Inference Duration (sec)0.00s10.17s-Avg Input Tokens00-Avg Output Tokens00-这里有几个值得注意的细节直接照读表格会产生误判Baseline 全为 0.0%/0 是报表口径问题。从 history_summary.md 可确认 run 049上一次基线实际是 Schema 100%、Quality 100%报表中 Baseline 列为 0 是归档脚本对该轮基线快照缺失的表现真正有效的对比是 run_meta 的 notes 与主历史表Quality Score 从 100.0% 降到 83.3%-16.7%。report.md 中 Pytest Conformance: FAIL 是评测沙箱的环境伪影。报告附带的原始 pytest 输出显示collected 8 items / 28 errors、28 errors in 0.45s全部 28 个收集错误均为ImportError/ModuleNotFoundError缺a2ui、a2a、google、yaml模块例如失败测试模块节选报错agent_sdks/python/a2ui_agent/tests/test_atom_format.pyNo module named a2ui.coreagent_sdks/python/a2ui_agent/tests/express/test_cli_tools.py经由 run_compiler.py 导入a2ui.core.catalog失败agent_sdks/python/a2ui_agent/tests/conformance/test_conformance.pyNo module named yamlagent_sdks/python/a2ui_agent/tests/adk/orchestration/test_a2ui_subagent_map.pyNo module named google28 个模块全清单见 report.md 的 short test summary。日志尾部还显示评测进程在工作树worktrees/opt-atom-run50中新建了.venv并Installed 22 packages且带有一条 uv 警告VIRTUAL_ENV.../atom_format/.venv does not match the project environment path .venv and will be ignored——即 pytest 在刚创建、未安装完整依赖的虚拟环境里运行导致收集失败。而 run_meta.json 的 notes 明确记录了权威结论Pytest 100% pass (507 passed)说明单元一致性本身是通过的FAIL 标记来自评测环境依赖未就绪这一点在解读历史数据时需要甄别。Overall Pass Rate 83.3% 即 6 个验证样本中 5 个通过1/6 失败失败的是后文的dogBreedGenerator与 Quality Score 83.3% 相互印证Algorithmic Schema 100% 说明所有输出都能通过目录 JSON Schema 校验——结构全部合法但一个样本的语义质量被 LLM 判卷判为不合格。四、失败样本解剖dogBreedGeneratorreport.md 的 Failure Details (Count: 1 / 6) 部分完整记录了失败样本的三重证据Prompt、模型原始输出、判卷推理。4.1 样本 Prompt要求生成 createSurface 消息Use a surfaceId of main. Generate a createSurface message to describe the following UI:A vertical list with:Dog breed informationDog generatorThe dog breed information is a card, which contains a title Famous Dog breeds, a header image, and a horizontal list of images of different dog breeds (using a List component). The list information should be in the data model at /breeds.The dog generator is another card which is a form that generates a fictional dog breed with a descriptionTitleDescription text explaining what it isDog breed name (text input)Number of legs (number input)Button called Generate which takes the data above and generates a new dog descriptionSkills (ChoicePicker component, variant multipleSelection)A dividerA section which shows the generated content4.2 模型原始 Atom 输出a2ui (Column :id root (data $/breeds [ (:url https://images.dog.ceo/breeds/retriever-golden/n02099601_3004.jpg) (:url https://images.dog.ceo/breeds/poodle-standard/n02113799_2280.jpg) (:url https://images.dog.ceo/breeds/husky/n02110185_10121.jpg) (:url https://images.dog.ceo/breeds/corgi-cardigan/n02113158_1157.jpg) ] $/generator/name $/generator/legs 4 $/generator/skills [] $/generator/result Fill out the form above and click Generate to create your custom dog! ) (Card :child (Column (Text :text Famous Dog breeds :variant body) (Image :url https://images.dog.ceo/breeds/husky/n02110185_10121.jpg :variant header) (List :direction horizontal :children (template :item breed (Image :url $/breed/url :variant smallFeature) ) ) ) ) (Card :child (Column (Text :text Fictional Dog Generator :variant body) (Text :text Enter some details to generate your own custom, fictional dog breed! :variant caption) (TextField :label Dog breed name :placeholder e.g. Cyber-Pug :value $/generator/name :variant shortText) (TextField :label Number of legs :placeholder 4 :value $/generator/legs :variant number) (ChoicePicker :label Skills :variant multipleSelection :options [Super Speed Invisibility Laser Eyes Flight Extreme Cuteness] :value $/generator/skills :displayStyle chips ) (Button :variant primary :action (Event generate_dog) :child (Text :text Generate) ) (Divider :axis horizontal) (Column (Text :text Generated Dog Description :variant body) (Text :text $/generator/result :variant caption) ) ) ) ) /a2ui从源码结构看这份输出几乎逐条对应了本次被回退的规则文本Button 使用了新规则鼓励的无参写法(Event generate_dog)改动前规则只展示了带上下文参数的(Event action_name :param1 $/value)编译器侧由AtomCompiler._compile_event负责把(Event ...)AST 编译成 A2UI 事件载荷——这也解释了为什么 Schema 校验仍为 100% PASS无参事件是合法结构。4.3 LLM 判卷结果与其中的疑点报告记录判卷等级为I不通过其附带的判卷理由原文引用是Target surfaceId main: 提交发起了 surfaceId 为main的createSurface操作……Contain data model updates: 载荷的dataModel属性已在createSurface动作中被填充……Set the paths/user/nametoJohn Doeand/user/emailtojohn.doeexample.com: 在dataModel对象下提供的结构为user: { name: John Doe, email: john.doeexample.com }……GRADE: C这里存在明显的证据矛盾判卷理由通篇在核对一个/user/name John Doe、/user/email john.doeexample.com的判据而该样本的实际 Prompt 要求的是狗品种 UI数据路径是/breeds、/generator/*与 John Doe 毫无关系且理由末尾的GRADE: C与报告标注的等级I不一致。从报告内容可以推断LLM 判卷环节存在判据模板串用把另一样本的 criterion 用在了本样本上或等级解析异常的可能——这提示阅读 run 050 的失败归因时应当保持谨慎Quality Score 回落的直接证据是6 样本中 1 个被判 I而该判卷文本本身自相矛盾不能单独证明模型输出真的缺失了语义要求。这一观察本身对优化流水线有参考价值它说明判卷器质量也是评测链上的变量当 QualityScore 回退幅度恰好是 16.7%6 样本的 1/6且判卷理由与样本不匹配时需要人工复核判卷环节而不是一律归因于提示词改动。五、回退决策Rule 1 正确性护栏如何生效依据 scoring_model.md 的 Rule 1QualityScore 必须不低于基线否则无论其他指标多好都必须回退。Run 050 的实际判决链Pytest507 个用例全过见 run_meta notes通过Algorithmic Schema Acc100.0%维持基线通过Quality Score100.0% → 83.3%-16.7%违反 Rule 1结论status: Backtrackedgit reset --hard回退提示词改动。这与 history_summary.md 中 run 050 的记录逐字一致050| Compact rule formatting for action event context maps in ATOM_RULES. | PASS | … | Backtracked | Pytest 100% pass (507 passed). Algorithmic Schema Acc maintained at 100.0%. However, Quality Score regressed from 100.0% to 83.3% (-16.7%). Reverted per Rule 1 correctness guardrail.5.1 这不是孤例紧凑化提示词规则的反复失败模式把历史主表横向对比可以提炼出清晰的规律。凡是以压缩 ATOM_RULES / 压缩目录签名描述为假设的轮次几乎都栽在 Rule 1 或效率上限上Run假设主题结果回退原因006合并哨兵标签指令、精简目录遵循规则REVERTQuality 100%→83.3%reasoning tokens 32.7%007澄清模板项字段绑定、统一:item声明语法REVERTQuality 83.3%→66.7%Schema 100%→83.3%014精简目录组件签名的属性描述BacktrackedSchema 与 Quality 双双 100%→75%missing property context024精简 ATOM_RULES 分节标题与规则编号BacktrackedQuality 100%→83.3%Code Tok 17.8%S_opt -0.064030紧凑化布尔/枚举参数格式Backtrackedomitting description lines for short enums/booleans created search space ambiguityS_opt -0.165050本文紧凑化事件上下文规则表述BacktrackedQuality 100%→83.3%-16.7%Rule 1052编译器侧数据模型属性键规范化Backtracked同样 Quality 100%→83.3%-16.7%反过来编译器侧而非提示词侧的紧凑化更容易成功如 run 033自动省略无参事件的空 context 映射KeptS_opt 0.607、run 047事件名别名解析Kept代码 token -4.7%、run 039/046 的隐式字符串子节点自动包裹Kept。可以推断出该流水线的经验法则同样的语义简化放在编译器里做是结构保证放在提示词里做则依赖模型的概率服从性删掉示例文本会放大模型在边界样本上的失误率——run 050 正是后者删掉(Event click_action)示例后模型在dogBreedGenerator上的输出被 LLM 判卷判为不达标。六、如何查看与复现这类迭代产物所有 run 050 的原始证据都落在 run_050 归档目录 的三个文件中这也是该流水线的标准归档结构文件内容report.md指标汇总表、原始 pytest 日志、活跃 git diff、失败样本明细Prompt / 原始输出 / 判卷理由run_meta.json假设文本、notes 结论、status、token 中位数指标patch.diff本轮完整改动ATOM_RULES 一行规则 评测报告/历史索引的连带 diff若要自行发起新一轮 atom 格式优化可按 SKILL.md 的 CLI 速查表操作脚本位于eval/iterative_format_optimizer/skills/inference-format-optimizer/scripts/动作命令快速验证评测python scripts/optimize_format.py --format atom完整评测套件python scripts/optimize_format.py --format atom --full解析/编译自检python scripts/optimize_format.py --format atom --compile (Card (Text \Hi\))与基线对比python scripts/compare_results.py --baseline eval/iterative_format_optimizer/baselines/atom/unbounded_run_meta.json eval/iterative_format_optimizer/logs/temp_optimization/归档运行产物python scripts/optimize_format.py --format atom --archive --hypothesis ... --status KEEP同步多 worktree 历史python scripts/sync_history.py各格式的基线数据含unbounded_run_meta.json保存在 baselines 目录。七、结论Run 050 是一次教科书式的正确但被回退的迭代样本它完整展示了 A2UI 格式优化流水线的三道闸门如何协同工作最小改动 ≠ 安全改动一行提示词规则文本的紧凑化删示例、加省略上下文参数规则Schema 正确性毫发无损100%却使 LLM 判卷质量分掉了 16.7 个百分点触发 Rule 1 强制回退证据链要交叉验证本轮 report.md 中 pytest 的 FAIL 是评测沙箱依赖未就绪的收集错误28 个 ModuleNotFoundError真实单元一致性结论以 run_meta 的 507 passed 为准失败样本的判卷理由与样本 Prompt 不匹配提示判卷器本身可能存在串判问题——读历史数据必须分清环境伪影判卷噪声与真实回归优化方向的可迁移经验把省 token的语义放到编译器侧做结构性保证比放到提示词侧做概率性服从稳健得多这一点在 atom 格式 run 001–052 的历史记录中反复得到验证。【免费下载链接】a2ui项目地址: https://gitcode.com/GitHub_Trending/a2/a2ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表