Gemini 编程、工具调用与代码执行 (Coding & Tools)
Gemini 不仅仅是一个对话模型,它具备强大的工具交互能力。它可以编写并运行 Python 代码、搜索实时网页、甚至调用你定义的任何 API。这使得它能从一个“观察者”变成一个能解决实际问题的“行动者”。
[PROMPT_LAB_BANNER]
核心能力架构
Gemini 的编程与工具能力由三个支柱组成:代码执行 (Code Execution)、函数调用 (Function Calling) 和 内置工具 (Built-in Tools)。
┌─────────────────────────────────────────────────────────────┐
│ Gemini 工具交互工作流 │
├─────────────────────────────────────────────────────────────┤
│ │
│ [ 用户请求 ] ──→ [ 模型推理 (Reasoning) ] ──┬──→ [ 最终回答 ] │
│ │ │
│ 决策:是否需要工具? │ │
│ ↓ │ │
│ ┌────────────────────────┴───────────┴──────────┐ │
│ │ │ │
│ [ 代码执行 ] [ 函数调用 ] [ 内置工具 ] │ │
│ (Python Sandbox) (你的自定义 API) (搜索/文件/地图) │ │
│ │ │ │ │ │
│ └───────────────────────┬───────────────┘ │ │
│ ↓ │ │
│ [ 获取工具结果 ] ───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
1. 代码执行 (Code Execution)
Gemini 可以在受保护的沙箱环境中自动生成并运行 Python 代码。它不再通过“猜测”来解决数学问题,而是通过“计算”。
适用场景:
- 复杂数学计算:超越简单的算术,处理微积分、统计分析。
- 数据处理:清洗 CSV/JSON 数据,进行排序、过滤和聚合。
- 科学模拟:运行物理公式或逻辑模型。
示例:
“请计算 1 到 1000 之间所有质数的平均值。” Gemini 会生成 Python 代码,运行它,并告诉你最终结果。
2. 函数调用 (Function Calling)
这是将 Gemini 连接到你自己的业务逻辑的最佳方式。你告诉模型有哪些 API 可用,模型根据用户意图决定调用哪个。
| 特性 | 说明 |
|---|---|
| 精准控制 | 你定义输入参数的 Schema,模型严格遵守。 |
| 实时性 | 访问你的数据库、CRM 或实时订单系统。 |
| 闭环操作 | 不仅仅是查询,还可以执行动作(如下单、发邮件、重置密码)。 |
开发流程:
- 定义定义 (Declare):在代码中声明工具的名称、描述和参数。
- 生成调用 (Generate):模型返回
call_function指令。 - 执行结果 (Execute):你的代码运行本地逻辑。
- 总结回复 (Respond):将结果传回模型,生成自然语言回复。
3. 内置工具 (Built-in Tools)
Google 托管的高性能工具,无需配置即可使用。
| 工具名称 | 核心能力 | 典型用途 |
|---|---|---|
| Google Search | 实时网页检索 | 获取最新新闻、股票价格、事实校验。 |
| Code Interpreter | Python 沙箱 | 高级数据分析、文件转换、图表生成。 |
| 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):适合海量的结构化提取任务。
小结
- Code Execution 让 AI 具备了“计算能力”,不再胡说八道。
- Function Calling 是 AI 进入你业务系统的“钥匙”。
- 内置工具 扩展了 AI 的感官(如 Google Search)。
- 安全第一:在执行 AI 生成的代码或调用敏感 API 时,务必设置权限边界。