CodexQA

行业与实践工具与框架

Inspect 里的 Agent:同一组件可以当求解器、工具或交接对象

CodexQA 团队阅读约 4 分钟

英国 AI Security Institute 的 Inspect 文档说明 Agent 协议:同一个 Agent 可以当任务求解器、用 run() 单独跑、用 as_tool() 当工具,或用 handoff() 把整段对话交给另一个 Agent。

本文目录

使用 Agent

概述

Agent 把规划、记忆和工具使用合在一起,去完成更复杂的任务(例如一场夺旗挑战)。Agent 是能自己决定下一步并调用工具的组件。Inspect 支持多种做 Agent 评测的办法,包括:

  1. 使用 Inspect 内置的 ReAct Agent。ReAct 是推理和行动交替进行的循环。
  1. 使用 Deep Agent 做长程任务,并支持把子任务交给下级 Agent、记忆和规划。
  1. 通过 Inspect SWE 包,使用 Claude Code、Codex CLI 这类软件工程 Agent。
  1. 实现一个完全 自定义 Agent,并可以把它组合成 多智能体 结构。
  1. 通过 Agent Bridge 接入外部 Agent 框架。
  1. 使用 Human Agent,让人来做同样的计算任务,作为对照基线。

Inspect 还有一些适合更复杂 Agent 评测的功能,包括用 检查点 从失败中恢复,用 干预 和正在运行的 Agent 通信,以及用 限额 给 Agent 执行设置 token、消息和时间上限。检查点是把当时状态存下来,失败后可以接着跑。

下面说明 Agent 在 Inspect 里的基本角色和用法。后续文章会分别写 ReAct Agent、Deep Agent、自定义 Agent 和多智能体系统。

Agent 基础

Inspect 的 Agent 协议用来做出可以在很多场合复用的 Agent 组件。Agent 和求解器类似,但接口更窄,因此更灵活。求解器(solver)是为每个样本产出答案的步骤。同一个 Agent 可以:

  1. 作为任务的顶层 求解器。
  1. 在一条 Agent 工作流里作为独立步骤运行。
  1. 在多智能体结构里被委派。
  1. 作为模型的一个普通 工具。工具(tool)是模型可以调用的函数。

agents 模块里有一个灵活、通用的 react agent,可以单独用,也可以用来编排一个 多智能体 系统。

示例

下面是一个简单的 web_surfer() Agent。它使用 web_search() 工具做开放式的网页调研。

from inspect_ai.agent import Agent, AgentState, agent
from inspect_ai.model import ChatMessageSystem, get_model
from inspect_ai.tool import web_search

@agent
def web_surfer() -> Agent:
    async def execute(state: AgentState) -> AgentState:
        """Web research assistant."""

        # some general guidance for the agent
        state.messages.append(
            ChatMessageSystem(
                content="You are an expert at using a " +
                "web browser to answer questions."
            )
        )

        # run a tool loop w/ the web_search tool
        messages, output = await get_model().generate_loop(
            state.messages, tools=[web_search()]
        )

        # update and return state
        state.output = output
        state.messages.extend(messages)
        return state

    return execute

这个 Agent 调用 generate_loop()。该函数让模型循环运行,直到它不再调用工具。在这个例子里,模型可能会多次调用 web_search() 来完成请求。

这个例子只说明 Agent 的基本机制。一般不必为了「一条系统提示加一个工具循环」去写自定义 Agent,因为 react() 已经提供了这一模式更完整、更灵活的版本。等价的 react() Agent 如下:

from inspect_ai.agent import Agent, agent, react
from inspect_ai.tool import web_search

@agent
def web_surfer() -> Agent:
    return react(
        name="web_surfer",
        description="Web research assistant",
        prompt="You are an expert at using a " +
            "web browser to answer questions.",
        tools=[web_search()]
    )

使用和定制 ReAct Agent 的细节见 ReAct Agent。

使用 Agent

Agent 可以这样用:

  1. 凡是接受求解器的 Inspect 接口,都可以把 Agent 当作 求解器 传入:
from inspect_ai import eval

eval("research_bench", solver=web_surfer())

如果某个接口不认识 Agent,可以用 as_solver() 把 Agent 转成求解器。

  1. 可以用 run() 直接执行 Agent(多步 Agent 工作流里会这样做):
from inspect_ai.agent import run

state = await run(
       web_surfer(), "What were the 3 most popular movies of 2020?"
)
print(f"The most popular movies were: {state.output.completion}")
  1. 可以用 as_tool() 把 Agent 当成普通工具:
from inspect_ai.agent import as_tool
from inspect_ai.solver import use_tools, generate

eval(
       task="research_bench",
       solver=[\
           use_tools(as_tool(web_surfer())),\
           generate()\
       ]
)
print(f"The most popular movies were: {state.output.completion}")
  1. Agent 可以参加多智能体系统,对话历史在 Agent 之间共享。用 handoff() 做成一个工具,把对话从一个 Agent 交给另一个。交接(handoff)是把到目前为止的对话整段转过去。
from inspect_ai.agent import handoff
from inspect_ai.solver import use_tools, generate
from math_tools import addition

eval(
       task="research_bench",
       solver=[\
           use_tools(addition(), handoff(web_surfer())),\
           generate()\
       ]
)

handoff() 和 as_tool() 的差别是:handoff() 把整段对话历史交给那个 Agent,并允许它往历史里追加;as_tool() 只给它一个字符串进、字符串出的接口。

进一步阅读

下面这些文章继续说明如何用 Inspect 做 Agent 评测:

  • ReAct Agent 说明如何使用和定制内置的 ReAct Agent。
  • Deep Agent 描述一个开箱可用、面向长程任务的 Agent。
  • 检查点 说明如何保存和恢复 Agent 状态,以便从基础设施或其他意外错误中恢复。
  • 干预 说明如何做有人在环的评测。有人在环是评测进行中人可以插入或改写。
  • 多智能体 说明把多个 Agent 组合在一起的几种办法。
  • Agent Bridge 让 OpenAI Agents SDK、LangChain、Pydantic AI 等第三方框架里的 Agent 能在 Inspect 里用。
  • Human Agent 是一个求解器,用来让人做计算任务,作为对照基线。
  • Agent 限额 说明如何给 Agent 执行设置 token、消息和时间上限。

UK AI Security Institute,Using Agents,2026-09-29,https://inspect.aisi.org.uk/agents.html,MIT License

觉得有用,转给同事

微信扫码

用微信扫一扫,在手机上打开后即可转发。

用 RSS 订阅

提交勘误