英伟达研究:Opus 5从30%飙到100%全靠harness,3步给你的Agent装上护栏

· 小白基础技术分享

英伟达 8 月 21 日发布的研究给出了一个反直觉的结论:同一款模型 Claude Opus 5,裸跑在 ARC-AGI-3 基准上只拿 30%,套上一个定制 harness(含记忆管理和”主管”组件)后直接冲到 100%。真正让模型变成”能干活 Agent”的,不是模型本身,而是包着它的那层 harness。这篇教程用 3 步,给只会裸调 API 的 Agent 装上护栏。

前置条件

– Python 3.9+,pip install openai

– 一个支持函数调用(function calling)的 OpenAI 兼容端点

– 一个真实的工具函数,比如查询天气的假接口

第 1 步:定义工具白名单

harness 的第一原则是最小权限:只给 Agent 它真正需要的工具,并用 JSON Schema 约束参数。比如你只想让它查天气,就只注册一个工具:

{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "查询指定城市天气",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {"type": "string", "description": "城市名"}
      },
      "required": ["city"]
    }
  }
}

第 2 步:接入函数调用并校验参数

函数调用是 harness 的”输入口”,校验则是”闸门”。两步缺一不可:第一步校验工具名是否在白名单,防止模型”编造”工具;第二步校验参数结构,防止模型传非法值(比如给天气接口传一个文件路径)。就算模型本身没问题,这两个校验也能挡住提示词注入——攻击者完全可能通过”系统提示词里说调用任意工具”的方式诱导模型越权。代码里把拦截原因打印出来,就是最早的审计日志:

from openai import OpenAI
import json

client = OpenAI(base_url="https://api.deepseek.com", api_key="你的KEY")
ALLOWED = {"get_weather"}  # 工具白名单

def call_agent(user_msg):
    resp = client.chat.completions.create(
        model="deepseek-chat",
        messages=[{"role": "user", "content": user_msg}],
        tools=[WEATHER_TOOL],  # 上一步的 schema
    )
    msg = resp.choices[0].message
    if msg.tool_calls:
        for tc in msg.tool_calls:
            fn = tc.function.name
            args = json.loads(tc.function.arguments)
            if fn not in ALLOWED:
                print(f"⛔ 拦截越权调用: {fn}")
                continue
            # 参数校验:city 必须是字符串
            if not isinstance(args.get("city"), str):
                print(f"⛔ 参数非法: {args}")
                continue
            print(f"✅ 放行: {fn}({args})")
    return msg

第 3 步:加”主管”人审与审计日志

英伟达研究里的 supervisor 组件,落到工程上就是高危操作执行前确认 + 全程留痕。把第二步的放行逻辑包一层:写操作、删除操作、涉及外部网络的操作,先打印给用户确认再执行;同时把每次工具调用写入 JSONL 日志(时间、工具名、参数、结果)。这样 Agent 再跑偏,也有完整的”黑匣子”可以复盘。

supervisor 在代码里长什么样

英伟达研究里的 supervisor 落到单 Agent 场景,就是”先审后批“:Agent 提出工具调用 → supervisor 校验合法性 → 高危操作弹确认 → 通过后才真正执行。如果 Agent 的调用被拦截,可以把拦截原因拼进下一条消息回给模型,让它自我修正。这套模式同样适用于多 Agent 场景——给每个子 Agent 分配独立白名单,再由总 supervisor 汇总结果,就能避免”一个 Agent 越权连累全局”。核心思想只有一个:模型的自由度由 harness 划定,而不是由模型自觉

成功验证与常见失败

成功标准:Agent 能完成任务,但调用白名单外的工具会被拦截,且每次调用都有日志。常见失败:一是模型不输出合法 JSON,直接拼文本,处理办法是开启强制结构化输出或让模型只输出可解析的 JSON 片段;二是误拦正常操作,处理办法是按需扩充白名单,而不是放开校验。记住英伟达的结论:模型决定上限,harness 决定你能不能摸到上限

🔥 关注LC智趣厅,每天一条硬核科技观察。

👇 关注不错过。


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

Scroll to Top
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅