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

In this piece
使用 Agent
概述
Agent 把规划、记忆和工具使用合在一起,去完成更复杂的任务(例如一场夺旗挑战)。Agent 是能自己决定下一步并调用工具的组件。Inspect 支持多种做 Agent 评测的办法,包括:
- 使用 Inspect 内置的 ReAct Agent。ReAct 是推理和行动交替进行的循环。
- 使用 Deep Agent 做长程任务,并支持把子任务交给下级 Agent、记忆和规划。
- 通过 Inspect SWE 包,使用 Claude Code、Codex CLI 这类软件工程 Agent。
- 通过 Agent Bridge 接入外部 Agent 框架。
- 使用 Human Agent,让人来做同样的计算任务,作为对照基线。
Inspect 还有一些适合更复杂 Agent 评测的功能,包括用 检查点 从失败中恢复,用 干预 和正在运行的 Agent 通信,以及用 限额 给 Agent 执行设置 token、消息和时间上限。检查点是把当时状态存下来,失败后可以接着跑。
下面说明 Agent 在 Inspect 里的基本角色和用法。后续文章会分别写 ReAct Agent、Deep Agent、自定义 Agent 和多智能体系统。
Agent 基础
Inspect 的 Agent 协议用来做出可以在很多场合复用的 Agent 组件。Agent 和求解器类似,但接口更窄,因此更灵活。求解器(solver)是为每个样本产出答案的步骤。同一个 Agent 可以:
- 作为任务的顶层 求解器。
- 在一条 Agent 工作流里作为独立步骤运行。
- 在多智能体结构里被委派。
- 作为模型的一个普通 工具。工具(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 可以这样用:
- 凡是接受求解器的 Inspect 接口,都可以把 Agent 当作 求解器 传入:
from inspect_ai import eval
eval("research_bench", solver=web_surfer())如果某个接口不认识 Agent,可以用 as_solver() 把 Agent 转成求解器。
- 可以用 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}")- 可以用 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}")- 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 说明用来写自定义 Agent 的 Inspect API。
- 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
Found it useful? Pass it on
Scan with WeChat to open it on your phone and forward it.