微信扫码
添加专属顾问
我要投稿
ADK框架让Agent自动化评估变得简单易用,开发者无需复杂配置即可快速上手。 核心内容: 1. 传统测试方法在LLM应用中的局限性分析 2. ADK框架评估功能的优势与特点 3. 实现Agent自动化评估脚本的完整步骤
DeepEval 是一个功能强大的开源评估框架,但对开发者来说,上手仍有一定门槛。最近在学习 Google 的 ADK 框架时,我意外发现它内置的评估功能非常好用,上手门槛低、配置简单,真正实现了开箱即用。说直白点,已经达到了有手就能写 Agent 自动化评估脚本的程度。
这篇文章,我会带你基于 ADK 框架实现一个完整的 Agent 自动化评估脚本。
但当系统引入 LLM 之后,这套思路开始失效。因为模型输出具有非确定性,我们无法再用“pass/fail”的硬性断言来做判定,而需要引入更为灵活的指标体系,从输出质量、工具使用路径等多个维度进行评估。
Google 在 ADK 文档中有一段总结非常到位:
"user_content": { "parts": [ { "text": "显示orders表结构" } ], "role": "user" } "expected_tool_use": [ {"name": "transfer_to_agent", "args": {"agent_name": "table_info"}}, {"name": "get_table_info", "args": {"table_name": "orders"}} ], "intermediate_data": { "tool_uses": [ { "name": "transfer_to_agent", "args": { "agent_name": "table_info" } }, { "name": "get_table_info", "args": { "table_name": "orders" } } ], "intermediate_responses": [] } "intermediate_data": { ... "intermediate_responses": [] # Any intermediate sub-agent responses. } "final_response": { "parts": [ { "text": "## 表结构:orders\n\n**基本信息:**\n- 表名:orders\n- 记录数:900 行\n- 列数:19 列\n\n**字段详情:**\n| 字段名 | 数据类型 | 说明 |\n|-------------------------|--------------------|--------------------------------|\n| id | INTEGER | 订单唯一标识 |\n| coupon_code | varchar(255) | 使用的优惠券代码 |\n| create_time | timestamp | 订单创建时间 |\n| logistics_company | varchar(255) | 物流公司名称 |\n| note | varchar(255) | 订单备注 |\n| pay_time | timestamp | 支付时间 |\n| payment_method | varchar(255) | 支付方式 |\n| payment_transaction_id | varchar(255) | 支付交易ID |\n| product_id | bigint | 关联的产品ID |\n| quantity | INTEGER | 商品数量 |\n| receiver_address | varchar(255) | 收货地址 |\n| receiver_name | varchar(255) | 收货人姓名 |\n| receiver_phone | varchar(255) | 收货人电话 |\n| specification | varchar(255) | 商品规格 |\n| status | varchar(255) | 订单状态 |\n| total_amount | numeric(38,2) | 订单总金额 |\n| tracking_number | varchar(255) | 物流跟踪号 |\n| update_time | timestamp | 订单更新时间 |\n| user_id | bigint | 关联的用户ID |\n\n**设计特点:**\n1. **主键**:`id` 字段作为订单的唯一标识。\n2. **时间字段**:`create_time` 和 `update_time` 分别记录订单的创建和更新时间。\n3. **关联字段**:`product_id` 和 `user_id` 可能与其他表(如 `products` 和 `users`)关联。\n4. **状态管理**:`status` 字段用于跟踪订单状态。\n5. **金额字段**:`total_amount` 使用 `numeric(38,2)` 类型,适合存储精确的金额数据。\n\n**建议后续操作:**\n- 查看样本数据:使用 `sample_data_agent`。\n- 执行查询:使用 `query_execution_agent`." } ], "role": "model" }第 1 次:LLM 识别意图,决定调用 transfer_to_agent,将请求路由到子 Agent;
第 2 次:子 Agent 执行 Tool,触发 get_table_info;
第 3 次:生成最终的自然语言回复,返回给用户。
{ "eval_set_id": "table-schema-analysis-sqlite", "name": "Table Schema Analysis SQLite", "description": "测试表结构探索和schema分析能力", "eval_cases": [ { "eval_id": "table-schema-orders-structure", "query": "显示orders表结构", "expected_tool_use": [ {"name": "transfer_to_agent", "args": {"agent_name": "table_info"}}, {"name": "get_table_info", "args": {"table_name": "orders"}} ], "conversation": [ { "invocation_id": "inv-schema-1", "user_content": { "parts": [ { "text": "显示orders表结构" } ], "role": "user" }, "final_response": { "parts": [ { "text": "## 表结构:orders\n\n**基本信息:**\n- 表名:orders\n- 记录数:900 行\n- 列数:19 列\n\n**字段详情:**\n| 字段名 | 数据类型 | 说明 |\n|-------------------------|--------------------|--------------------------------|\n| id | INTEGER | 订单唯一标识 |\n| coupon_code | varchar(255) | 使用的优惠券代码 |\n| create_time | timestamp | 订单创建时间 |\n| logistics_company | varchar(255) | 物流公司名称 |\n| note | varchar(255) | 订单备注 |\n| pay_time | timestamp | 支付时间 |\n| payment_method | varchar(255) | 支付方式 |\n| payment_transaction_id | varchar(255) | 支付交易ID |\n| product_id | bigint | 关联的产品ID |\n| quantity | INTEGER | 商品数量 |\n| receiver_address | varchar(255) | 收货地址 |\n| receiver_name | varchar(255) | 收货人姓名 |\n| receiver_phone | varchar(255) | 收货人电话 |\n| specification | varchar(255) | 商品规格 |\n| status | varchar(255) | 订单状态 |\n| total_amount | numeric(38,2) | 订单总金额 |\n| tracking_number | varchar(255) | 物流跟踪号 |\n| update_time | timestamp | 订单更新时间 |\n| user_id | bigint | 关联的用户ID |\n\n**设计特点:**\n1. **主键**:`id` 字段作为订单的唯一标识。\n2. **时间字段**:`create_time` 和 `update_time` 分别记录订单的创建和更新时间。\n3. **关联字段**:`product_id` 和 `user_id` 可能与其他表(如 `products` 和 `users`)关联。\n4. **状态管理**:`status` 字段用于跟踪订单状态。\n5. **金额字段**:`total_amount` 使用 `numeric(38,2)` 类型,适合存储精确的金额数据。\n\n**建议后续操作:**\n- 查看样本数据:使用 `sample_data_agent`。\n- 执行查询:使用 `query_execution_agent`." } ], "role": "model" }, "intermediate_data": { "tool_uses": [ { "name": "transfer_to_agent", "args": { "agent_name": "table_info" } }, { "name": "get_table_info", "args": { "table_name": "orders" } } ], "intermediate_responses": [] } } ] } ]}@pytest.mark.asyncioasync def test_table_schema_analysis(): """Test table structure exploration and schema analysis capabilities.""" await AgentEvaluator.evaluate( "sqlite_agent", str(pathlib.Path(__file__).parent / "data/table_schema_analysis.test.json"), num_runs=1 )
adk eval \ sqlite_agent \ eval/data/data_analysis.test.json
pytest eval/test_eval.py::test_table_schema_analysis
python -m pytest eval/test_eval.py::test_table_schema_analysis -v
adk web
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-02-15
OpenClaw 的「中国套件」来了:飞书钉钉企微QQ一锅端
2026-02-15
🦞 OpenClaw 二月狂飙:从能用变成“真·好用”的7版连更
2026-02-14
让 OpenClaw 一键超简单部署,用 MonsterClaw 过年赚大钱
2026-02-14
MiniMax M2.5:龙虾御用,Agent 永不停机
2026-02-14
如果你还在犹豫要不要尝试 OpenClaw,试试这个 App 一键部署方案
2026-02-14
2.1K Star!这个 Claude Skills 技能库,给 AI 编程助手装上了 66 颗专家大脑!
2026-02-14
全网都在猜DeepSeek V4的发布时间,但国产模型激战还有一条暗线
2026-02-13
开源:参考OpenClaw,我们给 Claude Code 加上了轻量化的永久透明记忆
2025-11-19
2026-01-27
2026-01-29
2026-01-30
2026-01-12
2026-02-06
2025-12-22
2025-12-10
2026-01-28
2025-12-23
2026-02-11
2026-02-05
2026-01-28
2026-01-26
2026-01-21
2026-01-21
2026-01-20
2026-01-16