微信扫码
添加专属顾问
 
                        我要投稿
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-10-31
有人问我会不会用 AI,我直接拿出这个 Ollama + FastGPT 项目给他看
2025-10-30
开源可信MCP,AICC机密计算新升级!
2025-10-30
OpenAI 开源了推理安全模型-gpt-oss-safeguard-120b 和 gpt-oss-safeguard-20b
2025-10-29
刚刚,OpenAI 再次开源!安全分类模型 gpt-oss-safeguard 准确率超越 GPT-5
2025-10-29
AI本地知识库+智能体系列:手把手教你本地部署 n8n,一键实现自动采集+智能处理!
2025-10-29
n8n如何调用最近爆火的deepseek OCR?
2025-10-29
OpenAI终于快要上市了,也直面了这23个灵魂拷问。
2025-10-29
保姆级教程:我用Coze干掉了最烦的周报
 
            2025-08-20
2025-09-07
2025-08-05
2025-08-20
2025-08-26
2025-08-22
2025-09-06
2025-08-06
2025-10-20
2025-08-22
2025-10-29
2025-10-28
2025-10-13
2025-09-29
2025-09-17
2025-09-09
2025-09-08
2025-09-07