42. 实践主线:把 Reference Adapter 换成真实 Agent
实验课 4 · 半天~1 天
学习目标
- 明确评测器与被测 Agent 的协议边界;
- 用 HTTP Adapter 接入一个本地服务;
- 理解 Inspect AI 在执行层和 GoClaw 在控制层的分工。
42.1 Adapter 的契约
评测器只依赖:
run(case, workspace, seed, variant) -> RunResultRunResult 至少包含:
- 用户可见最终回答;
- 最终业务状态;
- 结构化 Trace;
- token、延迟和版本元数据。
不要把 LangChain、OpenAI SDK 或内部 Go 类型直接传进 Scorer。
42.2 HTTP 响应格式
先运行仓库提供的本地 HTTP 烟测:
make agent-eval-lab-http-smoke这会启动一个临时本机服务,经过真实 HTTP round trip 后再使用同一套 Scorer。 它验证的是 Adapter 契约,不是外部模型能力。
HttpAgentAdapter 发送:
{"case":"查询订单 A-1002 的状态","user_id":"u-1","seed":0}服务返回:
{
"final_text": "订单 A-1002 当前状态为 shipped。",
"final_state": {"orders":{"A-1002":{"status":"shipped"}}},
"trace": [
{"sequence":1,"kind":"tool","name":"get_order","arguments":{"order_id":"A-1002"},"result":"ok"}
],
"input_tokens": 120,
"output_tokens": 18,
"latency_ms": 840
}服务负责提供真实证据,Adapter 负责协议转换,Scorer 负责判断。
42.3 最小 HTTP 服务练习
你可以用 Python 标准库 http.server 写一个本地 /run 端点,先返回上面的 固定 JSON,再逐步接入真实 Agent。这样可以先验证 Adapter、Trace 和 Scorer, 避免一开始就被模型网络、密钥和业务数据库阻塞。
42.4 Inspect AI 的正确位置
Inspect 更适合做:
Task / Dataset / Solver / Scorer 执行
Sandbox / EvalLog / Hook / 并发GoClaw 或上层平台更适合做:
EvalSuite / Experiment / Baseline / ReleaseGate / 权限与审计本手册提供 agent-eval/integrations/inspect_goclaw.py 作为边界示例。没有 安装 Inspect 时,它应该明确输出 not_run,不能伪装成已执行。
42.5 真实系统接入前的安全检查
- 使用隔离数据库或 Sandbox;
- 禁止真实转账、删除和生产 Kubernetes 操作;
- 脱敏用户内容和令牌;
- 固定 Model / Prompt / Tool / Environment 版本;
- 保存原始 Trace,但不记录 secret;
- 先在小规模回归集运行,再进入 nightly 或发布门禁。
42.6 本章验收
- 我能为自己的 Agent 写一个 Adapter;
- 我能解释为什么 State 必须由系统提供;
- 我能区分 Inspect 的执行职责和平台治理职责;
- 我能让缺少 Inspect 依赖的环境安全地报告
not_run。