Skip to content
🔗 分享本题
查看我的学习进度 →

Agent Harness 对计划、轨迹、工具、状态、副作用进行记录重放和断言图

🧠 记忆锚点:Agent 不能只评最终文本;轨迹、工具参数、状态和副作用都要可记录、可重放、可断言。

💡 答案要点

为什么需要Agent Harness?

传统软件测试 vs AI Agent测试的本质区别:

传统软件:输入 → 确定输出(可精确验证)
AI Agent:  输入 → 涌现性行为(不可预测)

类比:飞行员飞行模拟器
  → 在让Agent驾驶"真飞机"(真实数据库/邮件)之前
  → 先在Harness(模拟器)中测试
  → 观察它对异常输入、API故障会作何反应

Agent Harness = AI Agent的自动化测试台
Harness Engineering = 构建和维护这些测试框架的工程学科

Agent Harness的工作原理

┌─────────────────────────────────────────────┐
│           Agent Harness 引擎                │
│                                             │
│  测试用例 → 拦截Agent动作 → Mock外部环境     │
│              ↓                              │
│         模拟工具响应 → Agent继续执行         │
│              ↓                              │
│         评估报告(打分)                    │
└─────────────────────────────────────────────┘

核心流程:
  ① 测试用例输入
  ② Harness拦截工具调用
  ③ Mock环境返回模拟响应(不连真实API)
  ④ 记录完整轨迹(Thought/Action/Observation)
  ⑤ 基于评分标准打分

四大核心评估指标

| 指标             | 描述                           | 目标值     |
|------------------|-------------------------------|------------|
| 工具准确率        | Agent是否选对了工具+传正确参数  | > 95%     |
| 推理步数          | 达成目标花费了多少步           | 最小可行步数 |
| 循环率            | 陷入重复同一动作的频率          | 0%        |
| 任务成功率        | 最终输出是否满足用户需求        | > 90%     |

LLM-as-a-Judge:大模型作为裁判

传统关键词匹配 vs LLM-as-a-Judge:

  关键词匹配:死板,易受措辞影响,准确率低
  
  LLM-as-a-Judge:
    → 用更强的模型(GPT-4o/Claude 3.5 Sonnet)
    → 根据评分标准评估输出质量
    → 能理解语义细微差别
    → 成本更高但准确率高

适用场景:
  → 复杂推理评估 → LLM-as-a-Judge
  → 简单确定性测试 → 关键词匹配(免费快速)

轨迹分析(Trajectory Analysis)

不要只评估最终答案!

高级Harness分析"轨迹"——Agent的思考和动作序列:

  ❌ 旧方法:最终答案正确 = 通过
  ✅ 新方法:最终答案正确 + 推理轨迹正确 = 通过

为什么重要:
  Agent可能通过错误的逻辑误打误撞得到正确答案
  轨迹分析能发现这种"作弊"行为

例如:
  问:"北京天气?"
  Agent答对"晴"
  但中间调用了"上海天气API" → 扣分
  说明它没有真正理解问题

混沌工程(Chaos Engineering)

故意向Mock环境中注入故障,测试Agent的错误恢复能力:

  ① 注入500错误 → Agent是否有重试逻辑?
  ② 注入格式错误的JSON → Agent是否能容错处理?
  ③ 注入空结果 → Agent是否优雅降级?
  ④ 注入超时 → Agent是否超时处理?

目标:确保Agent在生产环境中遇到异常时不会崩溃

无限循环检测(关键!)

Node.js实现示例:

  maxSteps = 5
  stepCount = 0
  
  if stepCount > maxSteps:
    throw "检测到无限循环,强制终止"
    → 测试标记为失败

Python实现:
  
  max_iterations = 10
  for i in range(max_iterations):
    result = agent.run(step)
    if is_final_answer(result):
      break
    if i == max_iterations - 1:
      raise TimeoutError("超出最大推理步数")

为什么重要:
  → 失控的Agent可能无限调用API
  → 耗尽API额度/预算
  → 必须在测试阶段拦截

五大最佳实践

① 全面Mock(Mock Everything)
   → 评估期间绝不连生产数据库
   → 始终使用Mock工具和隔离沙箱

② 限制执行步数
   → 硬编码max_steps
   → 防止无限循环耗尽API额度

③ 使用确定性基准
   → temperature = 0
   → 最小化输出方差
   → 功能退化(Regression)更容易被发现

④ 测试边界情况
   → 工具返回空结果
   → 意外数据格式
   → 用户异常输入

⑤ 记录完整轨迹
   → 捕获每个Prompt/ToolCall/Thought
   → 没有完整可见性,调试几乎不可能

Agent Harness vs 传统RAG评估

Agent Harness:评估"自主行为"
  → 工具选择是否正确
  → 推理轨迹是否合理
  → 错误恢复能力

传统RAG评估(RAGAS等):评估"生成质量"
  → 上下文相关性
  → 答案忠实度
  → 答案相关性

两者结合 = 完整的AI应用质量保障体系

面试话术:

"Agent Harness 不应只检查最终答案,还要记录工具选择、参数、状态迁移、失败恢复、成本和安全边界。阈值必须由业务风险和基线数据确定,不能通用地背成 95% 或 90%。循环次数、预算、超时和高风险工具权限应由运行时硬限制,而不是只靠 Prompt。"