
Agent(智能体)通常由LLM、规划器、记忆模块和工具调用层组成,能够自主分解任务、调用API、观察结果并迭代决策。这种架构带来传统软件测试难以覆盖的问题:输出非确定、执行轨迹开放、工具副作用不可逆、失败模式长尾。因此,Agent测试需要从“断言输入输出”转向“评估轨迹与行为约束”的多层质量体系。
将Agent拆为四层,分别设计测试策略:
LLM输出具有随机性,同一输入可能产生不同工具调用序列。测试预言机应设计为属性断言而非精确匹配。例如,不要求“必须调用搜索工具”,而断言“若问题涉及实时信息,则轨迹中至少包含一次搜索调用”。
蜕变测试同样适用:若用户问题增加无关礼貌用语,工具调用序列应保持不变;若将温度从0调至0.7,任务成功率下降不应超过阈值。
import pytest
from agent import Agent
@pytest.fixture
def agent():
return Agent(model="gpt-4o", temperature=0, seed=42)
def test_search_tool_invoked_for_realtime(agent):
trace = agent.run("今天北京天气如何?")
tools = [step.tool for step in trace.steps if step.type == "action"]
assert "weather_api" in tools, f"未调用天气工具: {tools}"
assert trace.final_answer, "最终答案为空"Agent质量不能只看最终答案。需采集完整轨迹:thought → action → observation → ...。核心指标包括:
工具链方面,LangSmith、LangFuse支持trace记录、回放与数据集评估;RAGAS用于检索增强场景;DeepEval、Promptfoo提供LLM-as-judge断言。LLM-as-judge需校准:用人工标注集验证评委与人类一致性,避免位置偏差和冗长偏好。
Agent拥有工具权限,攻击面远大于纯文本模型。必须测试:
防御原则是最小权限:工具沙箱、只读默认、敏感操作二次确认、输出过滤。红队测试应纳入CI,每次提示词或模型变更后自动运行。
Agent依赖外部服务,CI中需稳定可重复。策略包括:
unittest.mock替换真实API,返回固定observation;temperature=0,必要时设置seed;def test_tool_contract(agent, mock_search):
mock_search.return_value = {"results": ["A", "B"]}
trace = agent.run("搜索Python异步编程")
call = trace.first_action("search")
assert call.params["query"] == "Python异步编程"
assert call.params.get("top_k", 5) <= 10离线基准提供横向对比:AgentBench评估多环境任务;SWE-bench评估代码修复;GAIA评估通用助手;ToolBench评估工具调用。但基准易过拟合,需构建业务专属回归集,覆盖高频任务、边界输入和已知故障。
在线阶段应监控轨迹采样、用户反馈和失败聚类,将新失败案例回流至测试集,形成“评估—修复—回归”闭环。
Agent测试的本质是在概率系统中建立可验证的行为约束。工具层用确定性测试,编排层用状态与契约测试,认知层用轨迹指标与蜕变测试,系统层用沙箱端到端评估。配合可观测性、对抗测试和持续回归,才能在非确定性中保障Agent的可靠性、安全性与成本可控。测试工程师的角色,正从用例编写者转变为行为边界与质量策略的设计者。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。