Google开始教大家怎么测Agent Harness了:只看最终成功率已经不够了

简介: 本文介绍Google提出的“行为评估(Behavioral Evaluation)”新范式:AI Agent测试不能只看最终结果,而需深入验证其执行过程中的工具调用、步骤顺序、规则遵循等可观察行为。这标志着Agent测试正从“答题打分”转向系统化软件测试,为测试工程师带来新机遇。

最近做 AI Agent 的团队,可能都遇到过一个挺让人头疼的问题:

模型没换。

业务也没换。

就改了一版 System Prompt,调整了一下 Tool Schema,或者给 Coding Agent 增加了一个工具。

重新跑 Benchmark——

成功率掉了。

问题来了:

到底哪里坏了?

是模型突然不会推理了?

Tool选错了?

参数传错了?

还是Agent写完代码之后,压根忘了执行测试?

以前碰到这种问题,很多团队只能重新翻:

Prompt、Log、Trace、Tool Calling记录。

一点一点找。

而Google最近公开的一篇 Harness Engineering 技术文章,恰好把这个问题摆到了台面上。

Google给出的思路很值得测试工程师关注:

测试AI Agent,不能永远只盯着最终答案。

真正应该进入测试体系的,还有Agent执行过程中那些可以观察、可以断言、可以回归的行为

这就是:

Behavioral Evaluation

而它背后,其实藏着一个正在发生的变化:

AI Agent越来越像一个需要被系统测试的软件,而不是一个只需要“做题打分”的大模型。


一、以前我们到底是怎么测Agent的?

现在很多AI团队做 Agent Evaluation,第一反应仍然是找Benchmark。

例如AI Coding领域常见的:

SWE-bench、Terminal-Bench,以及各种内部Evaluation Dataset。

基本逻辑都是:

给Agent一个任务
↓
Agent执行
↓
拿到最终结果
↓
执行测试
↓
PASS / FAIL
↓
统计成功率

比如100个Case:

Agent V1:82%

Agent V2:86%

看起来V2变强了。

但是Google指出了一个很现实的问题:

86%到底为什么比82%好?

反过来也一样。

如果:

Agent V3:79%

到底是哪次Harness修改把它搞坏了?

Google在9月9日发布的Harness Engineering文章中明确提到,端到端Benchmark适合观察总体表现,但当分数变化时,它往往不能直接告诉开发者:模型是不是对模糊Prompt过度自信、是不是忘记运行测试,或者是不是“幻觉”出了一个不存在的CLI参数。image.png

这就很像我们以前做自动化测试。

你不能只有:

System Test

还得有:

Unit Test
Integration Test
Regression Test

Agent也一样。


二、Google提出了一个很像“Agent单元测试”的东西

Google把 Behavioral Evaluation 描述得很形象:

它有点像针对Agent Harness的Integration Test。

它不一定关心Agent最后说了什么漂亮的话。

而是检查:

Agent有没有做它本来应该做的事情?

Google举了几个很典型的例子。

比如:

用户需求描述不完整时:

Agent应该追问

还是:

自己猜一个答案?

修改Build文件之后:

Agent有没有运行Validator?

生成文档之后:

有没有引用正确的Repository?

image.png

这时候测试对象已经变了。

以前:

assert response == expected_answer

现在:

assert agent.called_tool("test_runner")

这一步很重要。

因为:

Outcome正确,不代表Behavior正确。


三、放到真实测试业务里,会更容易理解

假设我们现在做一个电商售后Agent。

用户说:

“刚买的耳机还没发货,不想要了,帮我退掉。”

Agent最后回答:

“好的,退款申请已经为您提交。”

看起来:

PASS

但是我们把Trace打开。

发现它实际上执行的是:

用户请求
 ↓
query_order
 ↓
refund_payment
 ↓
回复用户

少了一步:

check_refund_policy

甚至没有确认:

订单状态
支付状态
退款资格

最后业务结果可能碰巧是正确的。

但这个Agent能上线吗?

显然不能因为一次“碰巧正确”就判它通过。


四、我们可以给Agent增加Behavioral Evaluation

先定义测试Case:

case = {
   
    "input": "订单还没有发货,帮我退款",
    "must_call": [
        "query_order",
        "check_refund_policy"
    ],
    "forbidden_before_validation": [
        "refund_payment"
    ],
    "max_steps": 8
}

执行Agent:

trace = agent.run(case["input"])

然后不要只拿Final Answer。

直接读取Agent执行轨迹:

def get_tool_calls(trace):

    return [
        event.tool
        for event in trace
        if event.type == "tool_call"
    ]

开始做Behavior Assertion:

def evaluate_behavior(trace, case):

    tools = get_tool_calls(trace)

    missing_tools = [
        tool
        for tool in case["must_call"]
        if tool not in tools
    ]

    return {
   
        "missing_tools": missing_tools,
        "steps": len(trace),
        "passed": (
            len(missing_tools) == 0
            and len(trace) <= case["max_steps"]
        )
    }

这时候Evaluation报告可能变成:

Final Answer:PASS

Business Result:PASS

Tool Selection:PASS

Tool Sequence:FAIL

Required Validation:FAIL

Steps:5

Overall:FAIL

这就比:

成功率:86%

有价值多了。


五、为什么这件事和Harness有关?

这里需要把一个最近特别火的词讲明白:

Agent Harness

简单理解:

模型是大脑,Harness是让这个大脑真正干活的那套工程系统。

里面可能包含:

System Prompt

Context

Memory

Tool

MCP

Skills

Subagent

Retry

Planning

Session

Sandbox

Execution Loop

所以今天一个Agent最终表现怎么样,越来越不能简单写成:

Agent能力 = Model

更准确的是:

Agent能力
=
Model
×
Harness
×
Context
×
Tool
×
Runtime Configuration

这也是为什么最近半年:

Harness Engineering

越来越值得测试开发工程师关注。

因为Harness越复杂:

可测试对象就越多。


六、最麻烦的是:Agent存在随机性

传统自动化测试可以写:

assert result == expected

跑100次基本一样。

LLM Agent不一样。

同一个:

Model
Prompt
Tool
Temperature

重复执行,也可能产生不同Trajectory。

所以你不能因为一次:

FAIL

就直接把CI/CD卡死。

Google这次也特别强调了这一点。

对于具有随机性的复杂Agent任务,不应该过度依赖单次Eval,而应该通过批量Evaluation观察总体Pass Rate和趋势。([Google 开发者博客][1])

例如:

results = []

for _ in range(30):

    trace = agent.run(test_case)

    results.append(
        evaluate_behavior(trace, test_case)
    )

然后统计:

pass_rate = (
    sum(r["passed"] for r in results)
    / len(results)
)

V1:

Behavior Pass Rate:96.7%

修改System Prompt以后:

V2:

Behavior Pass Rate:76.7%

这时候问题就非常清楚了。

Prompt Regression。

而不是:

“感觉新版Agent好像变笨了。”


七、这其实把Prompt Engineering变成了测试工程

再往前走一步,会出现一个很有意思的工作流。

比如我们发现:

Agent经常修改代码以后
忘记运行pytest

那就把这个线上Bad Case加入:

Evaluation Dataset

写成:

async def test_agent_runs_tests_after_code_change():

    result = await agent.run(
        "修复calculate_discount函数的边界问题"
    )

    tools = extract_tools(result.trace)

    assert "edit_file" in tools
    assert "pytest" in tools

现在开始改Prompt。

V1:

Pass Rate:71%

V2:

Pass Rate:89%

V3:

Pass Rate:97%

问题解决。

但事情还没结束。

必须重新执行原来的Evaluation Suite:

pytest evals/behavioral/

确认:

其他Behavior没有Regression。

Google甚至提到了利用这种测试体系自动迭代System Prompt:让模型修改Prompt,再通过Eval Suite验证新的修改有没有解决问题,同时有没有破坏原有行为。([Google 开发者博客][1])

你会发现:

以前大家讨论的是:

Prompt Engineering

现在慢慢变成了:

Harness Engineering

再往后其实就是:

AI Testing Engineering


八、这对传统测试开发工程师反而是个机会

看到这里你可能会发现:

这些东西并没有完全脱离我们以前做测试的知识体系。

以前我们做:

pytest
API Testing
UI Automation
Mock
Assertion
Test Dataset
Regression Testing
CI/CD
Performance Testing
Observability

现在只是测试对象变了。

变成:

Agent Evaluation
Behavioral Evaluation
Tool Calling Testing
MCP Testing
Evaluation Dataset
Trajectory Evaluation
Continuous Evaluation
Quality Gate
Agent Regression Testing

比如:

传统API测试:

assert response.status_code == 200

Agent Tool测试:

assert "query_order" in tool_calls

传统回归:

代码修改
→ Regression Suite

Agent回归:

Prompt / Model / Harness / Tool修改
→ Evaluation Suite

传统CI:

Test FAIL
→ PR BLOCK

Agent时代:

Evaluation Regression
→ PR BLOCK

这两套东西并不是割裂的。

恰恰相反。

很多测试开发工程师原来的能力可以直接迁移过去。


九、而且这个趋势已经开始进入真正的CI/CD

这不是我为了文章硬拔高度。

AWS在9月8日刚公开了一套 Automated Agent Evaluation + GitHub Actions 的完整实践。

流程是:

Agent修改
↓
部署测试环境
↓
运行Evaluation Dataset
↓
采集Agent Trace
↓
AgentCore Evaluations评分
↓
低于Threshold
↓
GitHub Actions FAIL
↓
阻止PR

image.png

AWS明确把它称作 CI/CD Quality Gate,而且案例里还包括了带角色权限控制的MCP Tool。
也就是说:

我们以前经常说的:

Continuous Testing

正在延伸成:

Continuous Evaluation

这两个东西以后很可能会融合。

而这恰恰是下一篇我们要继续聊的内容。


十、测试工程师现在真正值得补的,不是“会不会调一个大模型API”

如果只是:

response = client.chat(...)

这个门槛其实已经很低了。

真正能形成测试开发工程能力的是:

你能不能设计一个:

Evaluation Dataset
        ↓
Agent Runner
        ↓
Trace
        ↓
Behavior Assertion
        ↓
LLM Judge
        ↓
Regression
        ↓
Quality Gate
        ↓
CI/CD

再把:

正确率
Tool选择
业务规则
Trajectory
Latency
Token
Cost
Stability

全部变成可度量指标。

这时候做的就已经不是简单的:

“让AI帮我生成几个测试用例。”

而是真正开始进入:

AI测试开发。


写在最后

我觉得Google这次关于Harness Engineering的分享,真正值得测试工程师注意的并不是又多了一个新名词。

而是一个很明显的趋势:

AI Agent越往生产环境走,传统软件测试的方法反而越重要。

只不过我们以前测试的是:

接口
页面
服务
数据库

现在开始增加:

Agent
Harness
Tool
MCP
Context
Trajectory

最终还是那几个老问题:

它有没有按预期工作?

修改之后有没有退化?

异常情况下能不能恢复?

能不能在上线之前发现问题?

只是这一次,被测试的对象换了。

相关文章
|
8天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1832 14
|
7天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
13天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)
|
12天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1655 3
|
7天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
9天前
|
SQL 人工智能 前端开发
QoderWake 1.0 正式发布:从桌面里的 Agent,到工作现场的数字员工
QoderWake v1.0正式发布:企业级数字员工团队平台。支持“一句话建岗”,预置10类特训岗位;Waker常驻钉钉/飞书群,@即响应、自动协作、跨任务记忆;具备定时/事件/API多触发方式与统一任务看板;已沉淀27.6万条记忆、12.3万项技能,助力组织实现人机协同增效。
800 2
|
7天前
|
缓存 测试技术 API
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)
DeepSeek V4.1 Flash 内测不用申请,base_url 不变、改个模型名就能调,9/10 到期。本文讲清接入、计费限流与多模态注意点。
816 0
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)
|
14天前
|
缓存 数据可视化 开发工具
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
DeepSeek Harness 的更新分两层:本体更新(npx 自动最新、npm update -g、源码 git pull)与插件更新(插件市场点更新、命令行覆盖安装)。本文按「准备 → 更新本体 → 更新插件 → 更新后检查」四步走,覆盖新手常见疑问。
1649 1
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
|
21天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
3999 5
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
12天前
|
人工智能 自然语言处理 安全
阿里云AI数智鉴密:AI 生成内容如何拿到一张"防篡改的身份证"
隐形水印 + C2PA签名:让AI生成内容“持证上岗”。
1159 0