CodexQA

Industry & PracticeTools & Frameworks

Inspect 工具基础:把 Python 函数登记成模型能调用的工具

CodexQA 团队4 min read

英国 AI Security Institute 的 Inspect 文档:用 @tool 把 Python 函数登记成工具,经 use_tools 交给模型。说明标准工具、MCP、类型注解为何必填,以及模型并不直接调用函数。

In this piece

工具基础

概述

现在许多模型都能调用客户端的 Python 函数,从而扩大自己能做的事。这样你就可以给模型配上一套自己的自定义工具,让它完成更多种类的任务。工具(tool)是模型可以请求调用的函数,参数由模型给出,真正执行仍由评测程序完成。

Inspect 原生支持把 Python 函数登记成工具,并提供给支持工具调用的模型。Inspect 也自带若干标准工具,用于代码执行、文本编辑、电脑操作、网页搜索和网页浏览。

注意:工具与 Agent

工具的一种用法,是放进智能体支架(agent scaffold,包住模型、在多轮交互里追求一个目标的外层程序)里跑。支架用模型帮忙决定用哪个工具、何时用,并编排对模型的调用去使用这些工具。更完整的说明见 Agents。

标准工具

Inspect 有用于计算和智能体规划的内置工具。计算类工具包括:

  • Web Search:用搜索提供方(可以是模型内置的,也可以是外部的)执行网页搜索并做摘要。
  • Bash and Python:执行任意 shell 和 Python 代码(需要沙箱)。沙箱(sandbox)是隔离执行模型生成代码的环境。
  • Bash Session:创建一个有状态的 bash shell,模型多次调用之间保留状态(需要沙箱)。
  • Text Editor:查看、创建和编辑文本文件(需要沙箱)。
  • Computer:给模型一台通过截图查看的桌面电脑,支持鼠标和键盘(需要沙箱)。
  • Code Execution:给模型一个跑在模型提供方基础设施里的 Python 执行环境,而不是 Inspect 沙箱。
  • Web Browser:给模型一个无头 Chromium 浏览器,支持导航、历史以及鼠标和键盘操作(需要沙箱)。已弃用:请改用 Web Search、Computer,或沙箱里的浏览器 MCP 服务。

智能体类工具包括:

  • Skill:把针对特定任务的专门知识和技能说明提供给模型(需要沙箱)。
  • Todo Write:帮助模型在更长程的任务里跟踪步骤和进度。
  • Memory:通过一个记忆文件目录存取信息。
  • Think:让模型在得出最终答案之前可以多做一步思考。
  • Intervention:让模型可以向用户提问或发送通知。

如果只想用标准工具,按上面的文档链接查看即可。要自己写工具,继续往下读。

MCP 工具

Model Context Protocol 是向大语言模型提供能力的一种标准方式。MCP(Model Context Protocol)把外部能力以统一协议交给模型。已有数百个 MCP 服务,用途包括网页搜索和浏览、文件系统、数据库、git 等。

MCP 服务暴露的工具可以方便地接进 Inspect。详见 MCP Tools。

自定义工具

下面是一个把两个数相加的简单工具。用 @tool 装饰器把它登记进系统:

from inspect_ai.tool import tool

@tool
def add():
    async def execute(x: int, y: int):
        """
        Add two numbers.

        Args:
            x: First number to add.
            y: Second number to add.

        Returns:
            The sum of the two numbers.
        """
        return x + y

    return execute

注解

注意两个参数都写了类型注解:

async def execute(x: int, y: int)

文档注释里还要写每个参数的说明:

Args:
    x: First number to add.
    y: Second number to add.

类型注解和说明是工具声明的必填项,这样模型才知道该把什么类型传回工具函数,以及每个参数是干什么的。

虽然必须在文档注释里给出工具及其参数的默认说明,也可以让使用该工具的人动态改这些说明(做法见 Tool Descriptions)。

使用工具

可以在评测里把 addition() 工具传给 use_tools() 求解器来使用。求解器(solver)是评测里负责出提示、调用模型的那一段。上面登记的函数名是 add(),下面示例调用的也是 add():

from inspect_ai import Task, task
from inspect_ai.dataset import Sample
from inspect_ai.solver import generate, use_tools
from inspect_ai.scorer import match

@task
def addition_problem():
    return Task(
        dataset=[Sample(input="What is 1 + 1?", target=["2"])],
        solver=[
            use_tools(add()), 
            generate()
        ],
        scorer=match(numeric=True),
    )

这个工具不做网络请求,也不做重计算,因此作为内联 Python 代码运行即可。如果工具要做更重的事,就要和 Inspect 的并发机制配合。网络请求应使用 httpx 的 async HTTP 调用。更重的计算应按下一节所述使用子进程。

注意:

模型使用工具时,并不是直接调用 Python 函数。模型生成的是一份带函数参数的结构化请求,然后由 Inspect 调用函数,再把结果交回模型。

更进一步的自定义工具能力,包括沙箱、错误处理和动态工具定义,见 Custom Tools。

进一步阅读

  • Standard Tools 说明 Inspect 内置的代码执行、文本编辑、电脑操作、网页搜索和网页浏览工具。
  • Custom Tools 说明更进一步的自定义工具能力,包括沙箱、错误处理和动态工具定义。

UK AI Security Institute,Tool Basics,文档页无单独发布日期(检索于 2026-10-06),https://inspect.aisi.org.uk/tools.html ,MIT License(Copyright (c) 2024 UK AI Security Institute)

Found it useful? Pass it on

WeChat

Scan with WeChat to open it on your phone and forward it.

Subscribe via RSS

Submit a correction