微信扫码
添加专属顾问
我要投稿
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+中大型企业
2025-08-09
告别选择困难症!Dify、n8n、Coze、Fastgpt、Ragflow 怎么选?看这篇就够了。
2025-08-09
独家|陈天桥布局端到端Deep Research生态赛道,MiroMind发布全栈开源深度研究项目ODR
2025-08-09
GitHub 收获 30.6k Star,一款开源的 PDF 处理工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档
2025-08-09
腾讯开源重磅项目:WeKnora让企业文档瞬间变身AI知识库!
2025-08-08
Ollama还是vLLM?深度解析四大顶级LLM服务框架:性能、特性与技术选型指南
2025-08-08
免费GPU算力部署体验gpt-oss-20b
2025-08-07
自主搜索AI的突破:阿里通义实验室WebAgent项目深度解析
2025-08-07
OpenAI开源gpt-oss大模型,本地测试可用性比较高
2025-07-23
2025-06-17
2025-06-17
2025-07-23
2025-07-14
2025-07-12
2025-07-27
2025-07-29
2025-07-29
2025-05-29