logo

Gemini 编程、工具调用与代码执行 (Coding & Tools)

Gemini 真正值得拿来做编程相关任务的,不只是“会写代码”,而是它可以在一些场景里把“推理、调工具、拿结果、继续判断”串成一个更完整的闭环。

这点很重要。因为只会生成代码的模型,和能在工具链里继续做事的模型,差别其实很大。前者更像一个回答者,后者更接近一个能推进任务的执行体。

[PROMPT_LAB_BANNER]


核心能力架构

Gemini 的编程与工具能力,我会拆成三块来看:代码执行 (Code Execution)函数调用 (Function Calling)内置工具 (Built-in Tools)

┌─────────────────────────────────────────────────────────────┐
│                    Gemini 工具交互工作流                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   [ 用户请求 ] ──→ [ 模型推理 (Reasoning) ] ──┬──→ [ 最终回答 ]  │
│                                            │                │
│                         决策:是否需要工具?   │                │
│                                ↓           │                │
│       ┌────────────────────────┴───────────┴──────────┐     │
│       │                                               │     │
│   [ 代码执行 ]         [ 函数调用 ]        [ 内置工具 ]     │     │
│   (Python Sandbox)    (你的自定义 API)    (搜索/文件/地图)   │     │
│       │                       │               │       │     │
│       └───────────────────────┬───────────────┘       │     │
│                               ↓                       │     │
│                        [ 获取工具结果 ] ───────────────┘     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1. 代码执行 (Code Execution)

代码执行最核心的价值,不是“哇,它还能跑 Python”,而是它终于不用只靠猜来回答可计算问题。

适用场景:

  • 复杂数学计算:超越简单的算术,处理微积分、统计分析。
  • 数据处理:清洗 CSV/JSON 数据,进行排序、过滤和聚合。
  • 科学模拟:运行物理公式或逻辑模型。

示例:

“请计算 1 到 1000 之间所有质数的平均值。” Gemini 会生成 Python 代码,运行它,并告诉你最终结果。

这类能力特别适合那些“如果只靠语言模型直觉回答,很容易一本正经答错”的任务。


2. 函数调用 (Function Calling)

如果你想让 Gemini 真正进入业务系统,而不只是生成建议,函数调用几乎是最关键的一步。

它的价值不在于“模型能调用函数”这个动作本身,而在于你终于可以把模型决策和真实业务逻辑连起来。

特性说明
精准控制你定义输入参数的 Schema,模型严格遵守。
实时性访问你的数据库、CRM 或实时订单系统。
闭环操作不仅仅是查询,还可以执行动作(如下单、发邮件、重置密码)。

开发流程:

  1. 定义定义 (Declare):在代码中声明工具的名称、描述和参数。
  2. 生成调用 (Generate):模型返回 call_function 指令。
  3. 执行结果 (Execute):你的代码运行本地逻辑。
  4. 总结回复 (Respond):将结果传回模型,生成自然语言回复。

3. 内置工具 (Built-in Tools)

内置工具的好处是,很多场景你不需要先自己搭完整基础设施,就能先把能力跑起来。

工具名称核心能力典型用途
Google Search实时网页检索获取最新信息、事实核验
Code InterpreterPython 沙箱数据分析、计算、文件处理
File Search语义检索 (RAG)在文档集合中找答案
URL Context网页内容抓取总结网页、提取站点信息

实战案例:构建一个 AI 运维助手

场景:用户想知道“服务器 CPU 占用是否过高,如果过高请重启”。

Step 1: 定义 Function

{
  "name": "get_server_metrics",
  "description": "获取指定服务器的实时指标(CPU, Memory)",
  "parameters": {
    "type": "object",
    "properties": { "server_id": { "type": "string" } }
  }
}

Step 2: 编写 Prompt (CRDO)

# Role
你是一个资深的云原生运维专家。

# Task
分析用户提供的服务器 ID 的状态。如果 CPU 占用超过 80%,请解释原因并询问用户是否需要执行优化操作。

# Constraints
- 必须先调用 `get_server_metrics` 获取真实数据。
- 不要猜测数据。
- 给出专业的优化建议。

API 调用示例 (Node.js)

使用 @google/generative-ai 实现 Function Calling:

const { GoogleGenerativeAI } = require("@google/generative-ai");

const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// 1. 定义工具函数
const controlLight = {
  name: "controlLight",
  parameters: {
    type: "object",
    properties: {
      brightness: { type: "number", description: "亮度 0-100" },
      color: { type: "string", description: "颜色十六进制" }
    }
  }
};

// 2. 初始化模型并传入工具
const model = genAI.getGenerativeModel({
  model: "gemini-1.5-pro",
  tools: [{ functionDeclarations: [controlLight] }],
});

// 3. 开始对话
const chat = model.startChat();
const result = await chat.sendMessage("帮我把灯调亮一点,设置成暖黄色。");
const response = result.response;

// 4. 处理 Tool Call (模型会返回指令,你需要执行后传回)
const call = response.functionCalls()[0];
if (call) {
  // 在此处调用你真实的智能家居 API...
  console.log(`执行工具: ${call.name}, 参数:`, call.args);
}

常见问题与解决方案 (Troubleshooting)

问题常见原因解决方案
模型频繁调用错误的参数参数描述 (Description) 过于模糊。提供参数的枚举值 (Enum) 或正则表达式约束。
代码执行结果不符合预期模型生成的 Python 逻辑有误。在 Prompt 中要求模型“分步骤写代码”并加入异常处理。
模型拒绝调用工具任务意图与工具描述不匹配。在系统提示词中明确:“当用户询问状态时,必须使用 get_status 工具。”
安全风险代码执行可能涉及敏感操作。使用官方沙箱或限制自定义函数的权限范围。

这些问题基本都指向同一个事实:工具能力越强,你越要把边界写清楚。否则模型不是“更聪明”,而是“更有机会做错事”。


进阶技巧:模型选型建议

  • 全能型 (1.5 Pro):适合多步、复杂的 Function Calling,逻辑严密,适合企业级 Agent。
  • 性能型 (1.5 Flash):响应极快,适合简单的代码执行和单步工具调用,成本极低。
  • 轻量型 (Flash-Lite):适合海量的结构化提取任务。

如果你的任务里既要速度又要工具交互稳定,我通常会先从 Flash 系列开始试,只有在复杂推理明显不够时再往上换。因为很多流程问题,未必真的要靠更贵的模型解决。


小结

Gemini 在编程和工具调用上的真正价值,不是单点能力,而是它能把“推理 + 执行 + 回传结果”串成一个任务闭环。

  1. Code Execution 解决可计算问题。
  2. Function Calling 连接业务逻辑。
  3. 内置工具 让你更快把流程跑起来。
  4. 权限和边界 决定它能不能安全上线。

相关资源

Gemini 使用指南
Vibe Coding

Gemini 使用指南

Google Gemini 是 Google 最新的多模态 AI 模型,支持文本、图像、音频和视频理解。

Gemini 使用指南编程辅助

Gemini 编程、工具调用与代码执行 (Coding & Tools)

Gemini 真正值得拿来做编程相关任务的,不只是“会写代码”,而是它可以在一些场景里把“推理、调工具、拿结果、继续判断”串成一个更完整的闭环。

这点很重要。因为只会生成代码的模型,和能在工具链里继续做事的模型,差别其实很大。前者更像一个回答者,后者更接近一个能推进任务的执行体。

Prompt Lab

把这章的知识,直接变成实战能力

进入交互式实验室,用真实任务练 Prompt,10 分钟快速上手。

进入 Prompt Lab →

#核心能力架构

Gemini 的编程与工具能力,我会拆成三块来看:代码执行 (Code Execution)函数调用 (Function Calling)内置工具 (Built-in Tools)

text
┌─────────────────────────────────────────────────────────────┐ │ Gemini 工具交互工作流 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ [ 用户请求 ] ──→ [ 模型推理 (Reasoning) ] ──┬──→ [ 最终回答 ] │ │ │ │ │ 决策:是否需要工具? │ │ │ ↓ │ │ │ ┌────────────────────────┴───────────┴──────────┐ │ │ │ │ │ │ [ 代码执行 ] [ 函数调用 ] [ 内置工具 ] │ │ │ (Python Sandbox) (你的自定义 API) (搜索/文件/地图) │ │ │ │ │ │ │ │ │ └───────────────────────┬───────────────┘ │ │ │ ↓ │ │ │ [ 获取工具结果 ] ───────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

#1. 代码执行 (Code Execution)

代码执行最核心的价值,不是“哇,它还能跑 Python”,而是它终于不用只靠猜来回答可计算问题。

#适用场景:

  • 复杂数学计算:超越简单的算术,处理微积分、统计分析。
  • 数据处理:清洗 CSV/JSON 数据,进行排序、过滤和聚合。
  • 科学模拟:运行物理公式或逻辑模型。

示例:

“请计算 1 到 1000 之间所有质数的平均值。” Gemini 会生成 Python 代码,运行它,并告诉你最终结果。

这类能力特别适合那些“如果只靠语言模型直觉回答,很容易一本正经答错”的任务。


#2. 函数调用 (Function Calling)

如果你想让 Gemini 真正进入业务系统,而不只是生成建议,函数调用几乎是最关键的一步。

它的价值不在于“模型能调用函数”这个动作本身,而在于你终于可以把模型决策和真实业务逻辑连起来。

特性说明
精准控制你定义输入参数的 Schema,模型严格遵守。
实时性访问你的数据库、CRM 或实时订单系统。
闭环操作不仅仅是查询,还可以执行动作(如下单、发邮件、重置密码)。

#开发流程:

  1. 定义定义 (Declare):在代码中声明工具的名称、描述和参数。
  2. 生成调用 (Generate):模型返回 call_function 指令。
  3. 执行结果 (Execute):你的代码运行本地逻辑。
  4. 总结回复 (Respond):将结果传回模型,生成自然语言回复。

#3. 内置工具 (Built-in Tools)

内置工具的好处是,很多场景你不需要先自己搭完整基础设施,就能先把能力跑起来。

工具名称核心能力典型用途
Google Search实时网页检索获取最新信息、事实核验
Code InterpreterPython 沙箱数据分析、计算、文件处理
File Search语义检索 (RAG)在文档集合中找答案
URL Context网页内容抓取总结网页、提取站点信息

#实战案例:构建一个 AI 运维助手

场景:用户想知道“服务器 CPU 占用是否过高,如果过高请重启”。

#Step 1: 定义 Function

json
{ "name": "get_server_metrics", "description": "获取指定服务器的实时指标(CPU, Memory)", "parameters": { "type": "object", "properties": { "server_id": { "type": "string" } } } }

#Step 2: 编写 Prompt (CRDO)

markdown
# Role 你是一个资深的云原生运维专家。 # Task 分析用户提供的服务器 ID 的状态。如果 CPU 占用超过 80%,请解释原因并询问用户是否需要执行优化操作。 # Constraints - 必须先调用 `get_server_metrics` 获取真实数据。 - 不要猜测数据。 - 给出专业的优化建议。

#API 调用示例 (Node.js)

使用 @google/generative-ai 实现 Function Calling:

javascript
const { GoogleGenerativeAI } = require("@google/generative-ai"); const genAI = new GoogleGenerativeAI(process.env.API_KEY); // 1. 定义工具函数 const controlLight = { name: "controlLight", parameters: { type: "object", properties: { brightness: { type: "number", description: "亮度 0-100" }, color: { type: "string", description: "颜色十六进制" } } } }; // 2. 初始化模型并传入工具 const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro", tools: [{ functionDeclarations: [controlLight] }], }); // 3. 开始对话 const chat = model.startChat(); const result = await chat.sendMessage("帮我把灯调亮一点,设置成暖黄色。"); const response = result.response; // 4. 处理 Tool Call (模型会返回指令,你需要执行后传回) const call = response.functionCalls()[0]; if (call) { // 在此处调用你真实的智能家居 API... console.log(`执行工具: ${call.name}, 参数:`, call.args); }

#常见问题与解决方案 (Troubleshooting)

问题常见原因解决方案
模型频繁调用错误的参数参数描述 (Description) 过于模糊。提供参数的枚举值 (Enum) 或正则表达式约束。
代码执行结果不符合预期模型生成的 Python 逻辑有误。在 Prompt 中要求模型“分步骤写代码”并加入异常处理。
模型拒绝调用工具任务意图与工具描述不匹配。在系统提示词中明确:“当用户询问状态时,必须使用 get_status 工具。”
安全风险代码执行可能涉及敏感操作。使用官方沙箱或限制自定义函数的权限范围。

这些问题基本都指向同一个事实:工具能力越强,你越要把边界写清楚。否则模型不是“更聪明”,而是“更有机会做错事”。


#进阶技巧:模型选型建议

  • 全能型 (1.5 Pro):适合多步、复杂的 Function Calling,逻辑严密,适合企业级 Agent。
  • 性能型 (1.5 Flash):响应极快,适合简单的代码执行和单步工具调用,成本极低。
  • 轻量型 (Flash-Lite):适合海量的结构化提取任务。

如果你的任务里既要速度又要工具交互稳定,我通常会先从 Flash 系列开始试,只有在复杂推理明显不够时再往上换。因为很多流程问题,未必真的要靠更贵的模型解决。


#小结

Gemini 在编程和工具调用上的真正价值,不是单点能力,而是它能把“推理 + 执行 + 回传结果”串成一个任务闭环。

  1. Code Execution 解决可计算问题。
  2. Function Calling 连接业务逻辑。
  3. 内置工具 让你更快把流程跑起来。
  4. 权限和边界 决定它能不能安全上线。

#相关资源