agents-cli 评估数据集 Schema 详解:EvaluationDataset 字段规范、单轮/多智能体示例与 rubric_groups 实战

发布时间:2026/9/17 1:28:49

agents-cli 评估数据集 Schema 详解:EvaluationDataset 字段规范、单轮/多智能体示例与 rubric_groups 实战 agents-cli 评估数据集 Schema 详解EvaluationDataset 字段规范、单轮/多智能体示例与 rubric_groups 实战【免费下载链接】agents-cliThe CLI and skills that turn any coding assistant into an expert at creating, evaluating, and deploying AI agents on Google Cloud.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-cli本文以 agents-cli 技能包中的 dataset_schema.md 为主体系统讲解 Agent Platform 评估 SDK 的标准数据集格式EvaluationDataset核心类型树、单轮/多轮/多智能体 JSON 示例、按指标类型划分的必填字段、逐用例评分标准rubric_groups及服务端约束。读完本文你可以直接手写或审查tests/eval/datasets/下的评估数据集并理解agents-cli eval generate/eval grade流水线如何消费这些字段从而避免最常见的 400 报错。一、先建立全景数据集在 eval 三阶段流水线中的位置写数据集之前需要先知道它在整条评估流水线里的位置。从源码 src/google/agents/cli/eval/_paths.py 的模块注释可以确认agents-cli 把评估产物划分为三个阶段且四类文件共用同一个 SDK 类型EvaluationDataset作为容器但不同阶段填充的字段不同彼此不可互换阶段内容默认位置消费者生产者Stage 1待推理的 eval case顶层prompt单条用户消息或agent_data以用户消息结尾的续接对话tests/eval/datasets/*.jsoneval generatescaffold / 手工编写Stage 2已填充的 tracesagent_data中已包含 agent 回复与工具调用artifacts/traces/traces_ts.jsoneval gradeeval generate、eval dataset synthesizeStage 3打分结果artifacts/grade_results/eval analyzeeval grade这个分层直接决定了本文 schema 的两种使用姿态你手写的是 Stage 1 的推理输入prompt或以用户消息收尾的agent_data而带完整responses与工具调用的打分输入traces由eval generate自动生成通常不需要手写。eval generate的入口对这一约束有显式校验见 src/google/agents/cli/eval/cmd_generate.pyeval_cases data.get(eval_cases) if not eval_cases: raise click.ClickException( Dataset must contain a non-empty eval_cases list.\n Each eval_case must have either a prompt field or agent_data whose turns end with a user message. ) for i, case in enumerate(eval_cases): has_prompt bool(case.get(prompt)) has_agent_data bool(case.get(agent_data)) if not has_prompt and not has_agent_data: raise click.ClickException( feval_cases[{i}] is missing both prompt and agent_data.\n ... )即eval_cases必须非空且每个 case 必须提供prompt或agent_data二者之一——这与 schema 文档末尾Common Mistakes表中不要在一个 case 里混用prompt和agent_data的规则完全对应。二、核心类型树Core Types原文档给出的类型树如下以该技能版本所针对的 SDK 为准权威定义见 Agent Platform 评估 SDK 公开源码中的types/evals.py与types/common.pyEvaluationDataset └── eval_cases: list[EvalCase] # 评估用例列表 EvalCase ├── prompt: Content # 单轮用户查询 ├── responses: list[ResponseCandidate] # 单轮模型回复列表形式以支持多候选评估 ├── reference: ResponseCandidate # 标准答案final_response_match 所需 ├── context: str | Content # 源文本grounding 所需 ├── agent_data: AgentData # 多轮完整对话轨迹 ├── rubric_groups: dict[str, RubricGroup] # 逐用例评分标准由托管 rubric 指标打分 └── (允许额外字段) # 供自定义指标使用的自定义字段 ResponseCandidate └── response: Content # 实际的 Contentrole parts AgentData ├── agents: dict[str, AgentConfig] # 智能体定义 └── turns: list[ConversationTurn] # 按时间顺序排列的对话轮次 ConversationTurn ├── turn_index: int # 从 0 开始的轮次编号 └── events: list[AgentEvent] # 该轮内的事件 AgentEvent ├── author: str # user、agent_id 或 tool └── content: Content # 带 role 和 parts 的 Contentresponses与reference的包装层原文档重点标注两者都把Content包在一层ResponseCandidate对象里。所以单轮用例要写成responses: [{response: {role: model, parts: [...]}}]和reference: {response: {role: model, parts: [...]}}——而不是裸的Content。与之相对prompt和agent_data.turns[].events[].content是裸Content没有包装层。这一半数字段包一层、半数字段裸写的不对称设计是整个 schema 里最容易写错的地方仓库中 scaffold 出的示例数据集恰好演示了reference的正确写法见 basic-dataset.json{ eval_case_id: capital_lookup, prompt: { role: user, parts: [{text: What is the capital of France?}] }, reference: { response: { role: model, parts: [{text: The capital of France is Paris.}] } } }注意prompt是裸 Content而reference外层多了一个response键。三、单轮数据集Single-Turn适用于简单的 prompt-response 评估场景问答、摘要等。完整示例{ eval_cases: [ { eval_case_id: capital_of_france, prompt: { role: user, parts: [{text: What is the capital of France?}] }, responses: [ { response: { role: model, parts: [{text: The capital of France is Paris.}] } } ], reference: { response: { role: model, parts: [{text: Paris}] } } }, { eval_case_id: summarize_article, prompt: { role: user, parts: [{text: Summarize this article: ...}] }, responses: [ { response: { role: model, parts: [{text: The article discusses...}] } } ] } ] }注意第二个用例只写了promptresponses、没有reference——这说明responses与reference的组合取决于你选用的指标类型按指标类型划分的必填字段指标类别必填字段预定义指标单轮prompt、responses计算型指标computation-basedresponses、reference翻译类指标prompt源语言、responses、reference自定义 LLM/代码指标你的模板/函数中引用的字段从源码看计算型指标对应的正是 SDK 按名称特判的exact_match、bleu、rouge*一族——src/google/agents/cli/eval/eval_utils.py 中的_is_sdk_computed_metric函数明确列出了这批指标名它们走 SDK 自身的 transformer 分支而非预定义指标分支因此必须携带reference才能算出分数。四、多轮 / 多智能体数据集Multi-Turn / Multi-Agent用于评估多轮 agent 对话包括多个协作智能体与工具调用系统。规则要点agents映射声明所有参与智能体turns是按时间顺序排列的对话每个event的author必须是user、agents映射中的某个 agent ID、或tool。完整示例路由 专家 agent 工具调用的多智能体场景{ eval_cases: [ { eval_case_id: flight_booking_via_specialist, agent_data: { agents: { router: { agent_id: router, agent_type: RouterAgent, instruction: Route requests to the appropriate specialist. }, flight_bot: { agent_id: flight_bot, agent_type: SpecialistAgent, instruction: Search and book flights., tools: [{ function_declarations: [{ name: search_flights, description: Search flights by destination, parameters: { type: OBJECT, properties: { destination: {type: STRING} } } }] }] } }, turns: [ { turn_index: 0, events: [ { author: user, content: { parts: [{text: Book a flight to NYC}] } }, { author: router, content: { parts: [{text: Routing to flight_bot.}] } } ] }, { turn_index: 1, events: [ { author: flight_bot, content: { parts: [{ function_call: { name: search_flights, args: {destination: NYC} } }] } }, { author: flight_bot, content: { parts: [{ function_response: { name: search_flights, response: {flights: [{id: AA123, price: 320}]} } }] } }, { author: flight_bot, content: { parts: [{text: Found AA123 to NYC for $320.}] } } ] } ] } } ] }三个实战细节turn_index必须从 0 开始连续编号见后文 Common Mistakes。工具调用必须成对出现function_call/function_response两个 part且工具回复要包在function_responsepart 里不能直接写裸文本。单 agent 多轮用例只需省略多余的 agent 定义、在agents里保留一个条目即可events的author取值约束不变user/ agent ID /tool。另外_paths.py的注释还提到一种 Stage 1 用法以用户消息结尾的续接对话——agent_data的最后一个 turn 以用户消息结束eval generate会把 agent 的下一条回复追加进去再评估源码中称为 N1 模式。五、逐用例评分标准rubric_groupsEvalCase.rubric_groups用于挂接用例级的评分标准每个 rubric 由托管 rubric 指标managed rubric metric打出一个 pass/fail 判定得分为通过比例。关键使用姿势是写在 Stage 1 推理输入数据集上eval generate会把它原样带到 trace 上eval generate只搬运你写的reference、context、rubric_groups从不自行生成。示例{ eval_cases: [ { eval_case_id: booking_confirmation, prompt: {role: user, parts: [{text: Book my flight to Paris.}]}, rubric_groups: { booking_rubrics: { rubrics: [ {rubric_id: confirmation_check, content: {property: {description: The model must confirm the booking and provide a reference number.}}} ] } } } ] }评分侧的配置与结果在metrics_to_run里列出一个托管 rubric 指标若一个用例有多个 group用metric_spec_parameters.rubric_group_key指定选用哪一个结果里每个指标带rubric_verdicts含evaluated_rubric.rubric_id、verdict、reasoning得分为通过比例。服务端约束400 报错速查场景服务端报错rubric_group_key在 case 上不存在400rubric_group_key name not found in instance.rubric_groupscase 有多个 group 但 metric spec 未给 key400Multiple rubric groups provided in instance but no rubric_group_key specified in metric spec单轮指标跑多轮 trace400Single-turn metric name_v1 received agent_eval_data with N turns两条重要的边界规则rubric 托管指标是单轮的multi_turn_task_success虽然接受rubric_group_key但它评的是自己生成的 rubrichash ID不读你的rubric_groups。要给多轮用例定标准应改用本地custom_function_file判定函数见 metrics-guide.md它能在instance参数里直接拿到rubric_groups。指标对数据集里所有 case 生效所以单轮与多轮 case 要拆成各自独立的数据集 配置两件套不要混在一个数据集里。从源码可以印证这条路由逻辑eval_utils.py 在解析自定义指标时如果条目里出现rubric_group_name会直接拒绝并提示要评 case 的rubric_groups必须用托管 rubric 指标如final_response_quality配合metric_spec_parameters.rubric_group_key选择 group若坚持用自定义prompt_template判定则应删掉rubric_group_name字段。六、常见错误速查表Common Mistakes原文档的核心速查表写数据集时应逐条对照错误修正使用roleassistant使用rolemodelVertex 约定缺少turn_index始终设置从 0 开始的连续编号工具回复没有包function_response包在function_responsepart 里多轮场景误用prompt字段改用带完整轨迹的agent_data一个 case 里混用prompt和agent_data每个EvalCase二选一其中最后一条有 CLI 级强制校验见第一节cmd_generate.py的报错信息前四条则会在服务端或指标计算阶段以 400 / 无分数等形式暴露。七、与 agents-cli 命令、配置文件的衔接数据集只是 Stage 1把它跑起来还需要指标配置文件。scaffold 生成的 eval_config.yaml 展示了数据集字段如何被自定义指标消费metrics_to_run: - custom_response_quality custom_metrics: # 默认本地 LLM-as-judge见 response_quality.py。 - name: custom_response_quality custom_function_file: response_quality.py - name: agent_turn_count custom_function: | def evaluate(instance): turns (instance.get(agent_data) or {}).get(turns, []) return {score: len(turns)}对应的 response_quality.py 中evaluate(instance)读取的instance字段prompt、response、reference、agent_data正是本文 schema 里 case 级字段的运行时投影——reference存在时会自动追加与标准答案不一致要扣分的评分指令。而agent_turn_count直接依赖agent_data.turns的结构验证了多轮 schema 的字段名在本地代码指标中同样生效。典型运行链路命令细节见 google-agents-cli-eval 技能主文件# 一键式跑 agent 打分产物写入 artifacts/grade_results/results_ts.{json,html} agents-cli eval run # 分体式手写/修改本 schema 的数据集后 agents-cli eval generate --dataset tests/eval/datasets/custom.json # Stage 1 - Stage 2 agents-cli eval grade # Stage 2 - Stage 3 agents-cli eval compare baseline.json candidate.json # 对比两轮结果补充两个实现层面的事实帮助排错打分配置与数据集的解耦eval grade通过 cmd_grade.py 将 traces 目录下的多个 JSON 文件各自EvaluationDataset.model_validate_json后合并全部eval_cases再统一打分所以 trace 文件可以分散存放。区域默认值eval_utils.py 中DEFAULT_EVAL_REGION global——eval run/eval grade/eval submit默认走global端点不继承项目 manifest 的部署区域不支持的区域会被服务端拒绝。参考文件索引文件作用dataset_schema.md本文主体标准 EvaluationDataset schema、单轮/多轮/多智能体 JSON、常见错误skills 分发包同名副本与上面内容逐字相同的技能分发包副本仓库中两份完全一致metrics-guide.md指标全集、metric_spec_parameters参数、自定义指标字段参考google-agents-cli-eval SKILL.md评估工作流、命令说明、数据集两种形态推理输入/打分输入_paths.py三阶段产物路径与文件命名约定Stage 1/2/3 的单一事实来源cmd_generate.pyeval generate对eval_cases、prompt/agent_data的入口校验eval_utils.py指标解析、rubric_group_name拒绝逻辑、计算型指标特判basic-dataset.jsonscaffold 生成的最小单轮数据集含reference包装层示例eval_config.yaml / response_quality.py自定义指标如何消费 case 级字段适用前提与限制本文 schema 描述的是该技能版本所针对的 Agent Platform 评估 SDK 类型树权威字段定义以 SDK 公开源码agentplatform包内types/evals.py、types/common.py为准。命令默认值默认数据集路径tests/eval/datasets/basic-dataset.json、产物目录artifacts/traces/与artifacts/grade_results/、评估区域默认global均以当前仓库src/google/agents/cli/eval/下的实现为准eval generate的内置本地服务器与eval dataset synthesize等能力仅在 ADK 项目上可用。【免费下载链接】agents-cliThe CLI and skills that turn any coding assistant into an expert at creating, evaluating, and deploying AI agents on Google Cloud.项目地址: https://gitcode.com/GitHub_Trending/ag/agents-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/17 1:23:49

DDR仿真实战:SIPI联合建模与信号完整性诊断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 4:24:00

2026物联网开发服务商评估框架:五大硬核维度实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 4:24:00

VSCode + LaTeX 环境配置指南:掌握编译输出目录与排错技巧

拖了好几年,我终于把写毕业论文的战场从 Overleaf 彻底搬回了 VsCode。不是因为网页版不好用,而是当文档越来越长、章节越来越多,我在本地反复编译时,根目录里堆满了.aux、.log、.toc这些中间文件,看着就烦躁。更让人抓…

2026/9/17 4:24:00

IoT项目源码交付全栈指南:从硬件调试到平台落地

1. 为什么"源码交付"才是IoT项目真正的分水岭1.1 传统交付模式的三个断点在IoT项目里,"交付"这个词和传统软件交付完全不是一个量级。传统软件交付,客户拿到安装包、配上数据库就能跑,顶多再给一套API文档。但IoT项目交付…

2026/9/17 4:19:00

Windows 10安装错误“无法判断”排查指南:从日志到分区表全解决

“云里黑白”这部连载写到第十九回,按老规矩该是越写越玄乎的时候了。可这回我不打算讲什么高深莫测的道理,就说一件几乎每个人在重装或升级Windows 10时都会撞见的怪事——屏幕忽然弹出一句冷冰冰的话:“我们无法判断你的电脑是否已准备好继…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码