CodexQA

行业与实践工具与框架

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

CodexQA 团队阅读约 4 分钟

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

本文目录

工具基础

概述

现在许多模型都能调用客户端的 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)

觉得有用,转给同事

微信扫码

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

用 RSS 订阅

提交勘误