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":[]#Anyintermediatesub-agentresponses.}"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":"TableSchemaAnalysisSQLite","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.asyncioasyncdeftest_table_schema_analysis():"""Testtablestructureexplorationandschemaanalysiscapabilities."""awaitAgentEvaluator.evaluate("sqlite_agent",str(pathlib.Path(__file__).parent/"data/table_schema_analysis.test.json"),num_runs=1)adkeval\sqlite_agent\eval/data/data_analysis.test.json
pytesteval/test_eval.py::test_table_schema_analysis
python-mpytesteval/test_eval.py::test_table_schema_analysis-v
adkweb
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |