真实面经题目 · 原创解析
Agent 项目中的 harness engineering 是什么,如何支撑工具模拟、回放、评测、回归和线上前验证?
这题考的是 Agent 工程里的验证基础设施意识。harness engineering 不是写几个单测,而是为不稳定的模型输出、外部工具、副作用和多轮状态机建立可控运行环境,让开发者能模拟工具、回放真实轨迹、做离线评测、跑回归并在上线前发现风险。
真实面经题目 · 原创解析
这题考的是 Agent 工程里的验证基础设施意识。harness engineering 不是写几个单测,而是为不稳定的模型输出、外部工具、副作用和多轮状态机建立可控运行环境,让开发者能模拟工具、回放真实轨迹、做离线评测、跑回归并在上线前发现风险。
Agent 项目里的 harness engineering 可以理解为围绕 Agent 的测试运行器和实验底座。普通服务测试通常输入固定、函数确定,而 Agent 依赖模型、工具、检索、外部 API 和多轮 state,输出有概率性,所以需要一个 harness 把这些不确定因素可控化。它至少要支持五件事:第一是工具模拟,用 mock 或 fake tool 返回稳定结果,区分成功、空结果、超时、权限错误、下游错误和脏数据;第二是轨迹回放,把一次真实会话的用户输入、模型选择、工具调用、工具返回、state diff 和最终回答保存下来,在新版本上复跑;第三是评测,构建任务集和指标,既看最终答案,也看工具选择、参数正确性、步骤数、成本、延迟、停止条件和安全约束;第四是回归,把历史 badcase、关键业务路径和边界场景纳入 CI,防止改 prompt、改工具 schema 或改路由后行为漂移;第五是线上前验证,在灰度前用 shadow traffic、dry-run 工具、沙箱环境和审批门禁检查新 Agent 是否会误调用有副作用工具。好的 harness 还要记录可审计 trace,支持随机种子或模型 stub,隔离真实副作用,并输出可定位的失败原因。它的目标不是让 Agent 永远确定,而是让变化可复现、风险可比较、上线有证据。
Agent harness 不只是测试脚本,而是能把模型、工具、检索、状态和评估连接起来的运行框架。它负责装载任务样本、注入模型或模型 stub、替换工具实现、捕获 trace、计算指标并输出报告。没有 harness,Agent 的行为只能靠人工聊天验证,无法稳定回归。
工具 mock 不能只写一个 happy path。真实工具会有空结果、参数错误、权限不足、超时、限流、网络失败、返回字段缺失和数据冲突。harness 需要能配置这些场景,并检查 Agent 是否会补参、重试、降级、停止或解释错误,避免上线后被外部系统异常打穿。
一次 Agent 运行应记录用户消息、系统配置、模型输出、工具调用参数、工具返回、节点路径、state diff、耗时、token、错误和最终回答。回放时可以选择完全冻结模型响应,也可以只冻结工具和输入再让新模型运行。前者适合调状态机,后者适合比较模型或 prompt 漂移。
Agent 评测不能只做文本相似度。应同时看任务成功率、工具选择准确率、参数正确率、无效工具调用率、步骤数、循环次数、停止条件、拒答或追问是否合理、延迟、成本和安全违规。对高风险工具,还要把是否触发确认、是否越权调用作为硬指标。
回归样本应包括高频路径、收益最大的核心能力、历史失败案例、边界输入、工具异常、权限边界、多轮上下文恢复和低置信度场景。每次改 prompt、工具 schema、router、state 或模型版本,都要跑这些样本,并输出和基线的 diff,而不是只看新功能样例。
Agent 常会调用有副作用的工具,例如写入、提交、发送、更新状态。上线前验证要使用 sandbox、dry-run、只读凭证、影子流量或人工审批,把真实副作用隔离开。harness 应能证明新版本在真实输入分布下不会误触发危险工具,也不会出现成本或延迟失控。
好的 harness 输出不只是 pass/fail,而是告诉开发者失败发生在哪一层:路由错、slot 抽取错、工具参数错、工具返回处理错、模型总结错、停止条件错,还是安全策略错。报告最好能展示 trace diff、state diff 和指标变化,这样才能把评测结果转化成修复行动。
普通单测通常验证确定性函数;Agent harness 要控制模型概率性、外部工具、长链路 state 和多轮上下文。它不仅断言输出,还要记录和比较工具调用、节点路径、状态变化、成本、延迟和安全策略。
要真实到能覆盖工具契约和关键失败语义,但不必复制整个下游系统。重点是参数校验、返回结构、错误码、超时、空结果、权限和数据边界。对复杂工具可以用 fake service 或录制回放,而不是只写死一个 JSON。
取决于目标。冻结模型输出适合验证状态机、工具执行和渲染逻辑;不冻结模型、只固定输入和工具返回,适合评估 prompt 或模型版本变化。成熟 harness 应支持两种模式,并在报告中标明差异。
可以用人工标注、规则断言和 LLM judge 组合。确定性部分优先用规则,例如工具名、参数、最终状态;文本质量和解释合理性可用人工或 judge,但要抽样校准,避免 judge 也引入不可见偏差。
线上前验证是在真实发布前用离线样本、录制流量或影子流量证明风险可控;灰度是小流量真实服务。前者应尽量隔离副作用,后者要有监控、回滚和流量开关,两者都需要 harness 产出的可比较指标。
每个 badcase 要沉淀成可复现样本,包括输入、期望行为、工具环境、失败标签和断言。修复后先证明样本变绿,再长期保留在回归集中,防止后续模型或 prompt 更新把问题带回来。