工具API

概述

Gemini CLI 核心(packages/core)具有强大的工具定义、注册和执行系统。这些工具扩展了 Gemini 模型的功能,使其能够与本地环境交互、获取网络内容,并执行超越简单文本生成的各种操作。

核心概念

工具(Tool)

工具是一个接口和基类(BaseTool),定义了所有工具的契约。每个工具必须具有:

  • name: 唯一的内部名称(用于 Gemini API 调用)
  • displayName: 用户友好的名称
  • description: 工具功能的清晰说明,提供给 Gemini 模型
  • parameterSchema: 定义工具接受参数的 JSON 模式
  • validateToolParams(): 验证传入参数的方法
  • getDescription(): 提供人类可读的工具描述方法
  • shouldConfirmExecute(): 确定是否需要用户确认的方法
  • execute(): 执行工具操作并返回 ToolResult 的核心方法

ToolResult

定义工具执行结果结构的接口:

  • llmContent: 要包含在发送回 LLM 的历史记录中的事实字符串内容
  • returnDisplay: 用户友好的字符串(通常是 Markdown)或特殊对象(如 FileDiff)在 CLI 中显示

工具注册表(Tool Registry)

负责以下功能的类(ToolRegistry):

  • 注册工具: 保存所有可用内置工具的集合
  • 发现工具: 动态发现工具:
    • 基于命令的发现:通过 toolDiscoveryCommand 配置
    • 基于 MCP 的发现:通过 mcpServerCommand 配置
  • 提供模式: 向 Gemini 模型暴露所有注册工具的 FunctionDeclaration 模式
  • 检索工具: 允许核心按名称获取特定工具进行执行

内置工具

核心预定义了一套工具,通常位于 packages/core/src/tools/

文件系统工具

LSTool

列出目录内容

ReadFileTool

读取单个文件内容

WriteFileTool

将内容写入文件

GrepTool

在文件中搜索模式

GlobTool

查找匹配 glob 模式的文件

EditTool

对文件进行就地修改

ReadManyFilesTool

读取并连接多个文件内容

执行工具

ShellTool

执行任意 Shell 命令

网络工具

WebFetchTool

从 URL 获取内容

WebSearchTool

执行网络搜索

记忆工具

MemoryTool

与 AI 记忆系统交互

工具执行流程

1. 模型请求

Gemini 模型基于用户提示和提供的工具模式,决定使用工具并返回 FunctionCall

2. 核心接收请求

核心解析此 FunctionCall

3. 工具检索

ToolRegistry 中查找请求的工具。

4. 参数验证

调用工具的 validateToolParams() 方法。

5. 确认(如需要)

调用工具的 shouldConfirmExecute() 方法,如需要则提示用户确认。

6. 执行

如果验证通过且确认(或无需确认),调用工具的 execute() 方法。

7. 结果处理

核心接收来自 execute()ToolResult

8. 响应模型

ToolResultllmContent 被打包为 FunctionResponse 发送回 Gemini 模型。

9. 显示给用户

ToolResultreturnDisplay 被发送到 CLI 向用户显示工具的操作结果。

扩展自定义工具

虽然最终用户直接的编程注册新工具不是主要工作流程,但架构支持通过以下方式扩展:

基于命令的发现

高级用户或项目管理员可以在 settings.json 中定义 toolDiscoveryCommand。此命令应输出 FunctionDeclaration 对象的 JSON 数组。

MCP 服务器

对于更复杂的场景,可以设置一个或多个 MCP 服务器,并通过 settings.json 中的 mcpServers 设置配置。

多服务器支持: 如果您有多个 MCP 服务器,工具名称将以配置中的服务器名称为前缀(例如,serverAlias__actualToolName)。

总结

这个工具系统为增强 Gemini 模型的功能提供了灵活而强大的方式,使 Gemini CLI 成为各种任务的多功能助手。