ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

A2UI 评估框架实战:基于 Inspect AI 的模型生成能力评测、数据集加密与结果分析

2026/9/14 8:58:11 拓冰建站 浏览量
A2UI 评估框架实战:基于 Inspect AI 的模型生成能力评测、数据集加密与结果分析 A2UI 评估框架实战基于 Inspect AI 的模型生成能力评测、数据集加密与结果分析【免费下载链接】a2ui项目地址: https://gitcode.com/GitHub_Trending/a2/a2uiA2UI 的评估框架位于eval/目录用于验证一个模型或对话历史能否稳定产出符合 A2UI 协议 Schema 与语义规则的 UI 载荷。它构建在 Inspect AI 之上由数据集Dataset、求解器Solver、评分器Scorer三部分组成并通过 Transcrypt 对评测数据做静态加密以防基准被模型训练数据污染。读完本文你将掌握完整的评测执行流程含云端与 Ollama 本地 Gemma 评测、main.py各命令行参数的真实含义、多阶段评分的源码实现以及数据集贡献与结果分析的标准操作。一、框架定位与设计骨架eval/目录是 A2UI 项目中专门存放评测测试evals的位置一个评测用例验证某提示词或对话历史能否产出预期的 UI 结果。完整的架构设计见 eval/DESIGN.md其核心思想是功能解耦——评测逻辑与被测模型、传输协议互不绑定从而保持 A2UI框架无关、可移植到 Flutter / React / 原生 Web 渲染的立场。从 eval/tasks.py 与 eval/a2ui_eval/scorers.py 的源码结构看设计文档中描述的三大支柱落地为Inspect 组件A2UI 中的实现职责Dataset符合datasets/dataset_schema.json的加密 YAML 文件提供结构化的多轮messages、目录catalog与 UI 目标Solver通过推理格式InferenceFormat策略注入系统提示词与协议规则编排模型生成合法 UI 载荷Scorer算法式a2ui_scorer校验 measured_model_graded_qaLLM 评审分别判定技术合法性与语义意图质量Model ProviderGemini、Ollama 本地模型等统一各家模型 API 交互任务层暴露了两个协议版本的 Task 工厂tasks.py 中的a2ui_v0_9_1_eval默认目录specification/v0_9_1/catalogs/basic/catalog.json与a2ui_v1_0_eval默认目录specification/v1_0/catalogs/basic/catalog.json。在 eval/main.py 中可以看到分发规则策略为express、elemental、atom、direct时走 v1.0 任务其余如subagent_tool走 v0.9.1 任务。框架还直接复用 A2UI Python SDK依赖声明见 eval/pyproject.toml 中的a2ui-agent-sdkparse_response负责从 markdown 中抽取 JSON 载荷目录校验器validator负责 Schema 合规检查避免评测脚本手写一遍解析与校验逻辑。二、评测数据集为什么必须加密、为什么要求完整多轮上下文2.1 静态加密Transcrypt开源仓库中的评测数据随时可能被模型训练爬虫索引一旦提示词与金标准答案被记忆化后续模型分数虚高——这就是数据污染。A2UI 的对策是用Transcrypt对eval/datasets/*.yaml做透明加密首次设置时在eval/目录下初始化bin/transcrypt -p PASSWORD之后 Git 会在git add时透明加密、在 checkout 时透明解密通过.gitattributes中的 clean/smudge filter。为什么选 Transcrypt 而非 git-crypt从设计文档看它用密码字符串而非二进制密钥文件解锁对 CI/CD 中以环境变量注入密钥更友好且它是独立脚本贡献者无需安装系统级依赖。若拉取到的更新改变了加密配置例如从 MD5 迁移到 PBKDF2可能遇到解密错误或 OpenSSL 弃用警告。升级步骤bin/transcrypt --upgrade git checkout HEAD -- $(git ls-crypt)第一条命令更新.git目录下的本地 filter 脚本保留已保存密码第二条命令让文件重新经过升级后的 smudge filter 完成解密。2.2 数据点格式每个数据点是eval/datasets/dataset_name.yaml列表中的一项必须符合 eval/datasets/dataset_schema.json。字段定义来自 eval/CONTRIBUTING_USE_CASES.mdname必填字符串样本唯一标识小写下划线风格description必填字符串场景测试目的的简要说明catalog必填字符串组件目录相对路径标准组件用specification/{version}/catalogs/basic/catalog.jsonmessages必填数组按时间顺序排列的对话轮次包含user、带tool_calls的assistant、带tool_call_id的tool以及systemsystem_prompt可选领域系统指令target可选给 LLM-as-a-judge 的评分量规省略时默认回退到descriptiondataset可选逻辑数据集名省略时默认取文件名。关键约束target必须是定性量规而不是硬编码 JSON 字符串——否则评测会被绑定到某一种推理格式JSON vs XML vs DSL失去跨格式可比性。2.3 未加密的参考样例由于eval/datasets/*.yaml在 Git 中是密文浏览仓库时看不到明文。仓库提供了一个未加密的多轮参考样例 eval/examples/example_eval_case.json演示了一个订机票场景领域 system prompt、两次工具调用其中一次是无关的天气查询用于检验模型抗干扰能力、工具返回载荷、最终 UI 生成请求以及定性评分量规。该文件会由 CI 测试自动校验其符合数据集 Schema。贡献流程与脱敏规范生产日志 → 结构规格 → 合成数据 → 人工审计详见 eval/CONTRIBUTING_USE_CASES.md。三、运行评测前置条件与 main.py 全部参数确保工作目录为eval/。3.1 前置条件设置 Gemini API key评分器使用 LLM-as-a-judge必须有export GEMINI_API_KEYyour_api_key首次需按上文初始化 Transcrypt 解密数据集。3.2 执行评测运行全部数据集uv run main.py指定单个或多个数据集# 运行单个数据集 uv run main.py --dataset multi_turn_conversation_dataset # 运行多个数据集 uv run main.py --datasets core_v0_9_1,multi_turn_conversation_dataset跨推理格式对比directJSON、expressXML 标签、elementalDSL 等uv run main.py --dataset multi_turn_conversation_dataset --strategies direct,express,elemental2 样本快速自检固定使用gemini-3.1-flash-liteuv run main.py --sanity3.3 参数详解源码级以下参数均定义在 eval/main.py 中补充默认值与行为细节参数默认值说明--sanity关闭快速自检2 个样本、google/gemini-3.1-flash-lite、0 次重试并禁用 shuffle 与 epochs--dataset/--datasets全部单个或多个逗号分隔数据集名同时给出时--datasets生效--modelgoogle/gemini-3.8-flash被测生成模型支持别名与 Ollama 标签约定--grading-modelgoogle/gemini-3.8-flash评审模型。Gemma 系列被硬编码禁止作为评审模型源码见 main.py#L42、main.py#L159-L167违反会直接抛出ValueError--max-retries0最大重试次数--limit不限限制评测样本数--log-dirlogs评测日志目录--sample-shuffle无样本洗牌种子--thinking-budget无推理模型的思考 token 预算映射到 Inspect 的reasoning_tokens--temperature无生成温度--max-tasks/--max-samples无 / 10并发任务数 / 并发样本数后者默认 10见 main.py#L239-L241--strategiesdirect,subagent_tool评测策略可逗号分隔或多次指定合法值direct、subagent_tool、express、elemental、atom注册表见eval/a2ui_eval/strategies/--prompt无按样本提示词名称过滤子串匹配见 main.py#L205-L218--epochs无每个样本重复运行轮数用于一致性分析模型名解析规则在resolve_model_namemain.py#L45-L60内置别名表把gemma-4-26b→google/gemma-4-26b-a4b-it、gemini-3.8-flash→google/gemini-3.8-flash、gemma4:e2b→ollama/gemma4:e2b等含:的名字按 Ollama 标签约定自动补ollama/前缀以gemma-/gemini-开头的补google/前缀。另外main.py启动时设置了INSPECT_MAX_CONNECTIONS10与INSPECT_MODEL_MAX_BACKOFF300main.py#L22-L24用于压低连接限流、避免 503 错误。3.4 多阶段评分是怎么打的Task 中挂载了两个评分器tasks.py#L104-L113a2ui_scorer程序化结构/Schema 校验实现于 eval/a2ui_eval/scorers.py。它从样本元数据取出catalog路径构造目录配置并取validator先用 SDK 的parse_response从模型输出中抽取 A2UI JSON若无载荷记 0 分No A2UI JSON found in response校验通过记 1 分。注意它会提前识别 Compilation/validation failed: 前缀——这是策略层编译失败时的显式信号。measured_model_graded_qaLLM-as-a-judge包装 Inspect 的model_graded_qa附加 token 用量与耗时统计写入state.metadataevaluation_duration_seconds、evaluation_input_tokens等见 scorers.py#L107-L143。评审模型按 tasks.py 中的GRADER_INSTRUCTIONS给出 C正确/ P部分/ I错误等级量规明确组件顺序、组件 ID 命名、标签措辞的合理变体不扣分缺组件或实质错误判 I。求解器侧eval/a2ui_eval/strategies/format.py 的format_system_prompt会按所选策略实例化InferenceFormatDirectJsonFormat/ExpressFormat/ElementalFormat/AtomFormat调用其prompt_generator.generate(..., include_schemaTrue)生成协议提示词再与样本自带的领域system_prompt拼成 Domain Instructions UI Protocol Instructions 注入到消息序列头部。这解释了为什么不同推理格式可以用同一份数据集横向对比数据与格式提示解耦。四、评测 Gemma 模型Express 格式Gemma 可以通过**云端Google AI Studio / Gemini API无需本地 GPU或本地 Ollama需 GPU**两种方式评测。注意Gemma 评测不在默认或 CI 流程中运行CI 评测继续使用google/gemini-3.8-flash。无论云端还是 Ollama评分始终使用 Gemini Flash 作为 LLM-as-a-judge因此都必须设置GEMINI_API_KEY。4.1 云端执行移动/端侧档位--model gemma或--model gemma-4-26b对应google/gemma-4-26b-a4b-it26B 总参数、4B 激活参数的 MoE 模型代表可运行在现代移动硬件上的轻量模型档位。大/工作站档位--model gemma-large或--model gemma-4-31b对应google/gemma-4-31b-it31B 稠密模型推理能力更强。# 移动档位 Express 格式 uv run main.py --model gemma --strategies express # 大档位31B Express 格式 uv run main.py --model gemma-large --strategies express # 指定数据集或限制样本数做快速检查 uv run main.py --model gemma --strategies express --dataset core_v1_0 --limit 34.2 本地 / 边缘执行OllamaGPU 加速面向可完全离线运行在标准或旗舰智能手机上的边缘优化模型需 6–8 GB 内存Gemma 4 E2B--model gemma-e2b或--model gemma4:e2bollama/gemma4:e2b面向标准智能手机约 6 GB RAMGemma 4 E4B--model gemma-e4b或--model gemma4:e4bollama/gemma4:e4b面向近期旗舰智能手机约 8 GB RAMGemma 2 2B--model gemma-2b或--model gemma2:2bollama/gemma2:2b轻量 2B 开源模型。前置步骤# 1. 安装 Ollama 并启动守护进程 ollama serve # 2. 拉取目标模型 ollama pull gemma4:e2b ollama pull gemma4:e4b # 3. 对本地 Ollama 实例运行评测 uv run main.py --model gemma-e2b --strategies express --dataset core_v1_0 --limit 3LLM-as-a-Judge 铁律Gemma 模型绝不可用作评审模型--grading-model。评审模型必须保持为 Gemini Flash 系列如google/gemini-3.8-flash或google/gemini-3.1-flash-lite以保证评分一致、无偏Ollama 评测前务必确认已设置GEMINI_API_KEY。这条规则在源码中是硬校验不只是文档约束。五、查看结果、单元测试与 Schema 校验5.1 Inspect 日志查看器uv run inspect view start启动本地 Web 服务通常http://localhost:7575可交互式浏览每条样本的完整 trace 与评审模型给出的判分理由。从评测日志文件打印控制台摘要或 markdown 表格uv run python bin/report_evals.py logs/log_filename.eval5.2 单元测试与数据集校验uv run python -m pytest这会运行 eval/tests/ 下的测试test_dataset.py负责把所有数据集文件对照dataset_schema.json做 JSON Schema 校验test_main.py、test_scorers.py、test_strategies.py、test_run_ci_evals.py分别覆盖 CLI 行为、评分器标定、策略实现与 CI 评测脚本。贡献新数据点前的最小验证闭环是cd eval uv run python -m pytest tests/test_dataset.py # Schema 合规 export GEMINI_API_KEYyour_api_key uv run main.py --dataset dataset_name --sanity # 小规模实跑 uv run inspect view start # 查看 trace 与判分六、迭代式格式优化与基线eval/还包含一套针对 A2UI 推理格式Atom、Express、Elemental、Direct JSON的基准对比与迭代优化资产eval/iterative_format_optimizer/baselines/{atom,direct_json,elemental,express}/各格式在不同 token 预算budget_0、budget_897、budget_1795、unbounded下的run_meta.json基线结果eval/iterative_format_optimizer/history/逐轮优化的历史记录每轮含 diff、说明与结果元数据例如history/atom/下从run_001到run_052的编译器/提示词优化轨迹以及history_summary.md汇总优化流程指南见 eval/iterative_format_optimizer/skills/inference-format-optimizer/SKILL.md。从目录结构看这套机制的用途是以token 预算 vs 得分曲线为坐标反复对某推理格式的提示词、编译器模板做增量改进并留痕使express/atom等实验格式能在可控长度下逼近direct_json的得分。七、小结eval/目录把模型能否可靠生成 A2UI UI这一问题工程化为一条可复现流水线加密的多轮数据集提供真实、含噪声的评测上下文main.py以 Inspect AI 的eval_set驱动多策略并发评测a2ui_scorer与measured_model_graded_qa分别守住协议合法性与意图达成两道关Inspect View 与report_evals.py负责结果复盘。上手路径可概括为四步解锁 Transcrypt →export GEMINI_API_KEY→uv run main.py --sanity自检 →uv run inspect view start查看 trace贡献数据则走 CONTRIBUTING_USE_CASES.md 的脱敏与 Schema 校验流程。【免费下载链接】a2ui项目地址: https://gitcode.com/GitHub_Trending/a2/a2ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考