07d - API 集成指南
本文是《AI Agent 实战手册》第 7 章第 4 节。 上一节:多模态能力实战 | 下一节:Claude-GPT-Gemini 对比
概述
Gemini API 是 Google 提供的开发者接口,用于访问从 Gemini 2.5 Flash-Lite 到 Gemini 3.1 Pro 的完整模型家族。API 提供三种接入层级——免费层(适合原型开发)、付费层(适合生产应用)和企业层(Vertex AI,适合大规模部署)。本节将系统讲解认证设置、价格体系、速率限制和 SDK 使用,帮助你从零开始将 Gemini 集成到实际项目中。
1. 认证设置
Gemini API 提供三种认证方式,适用于不同场景:API Key(最简单)、OAuth 2.0(团队协作)和 Service Account(生产部署)。
工具推荐
| 工具 | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| Google AI Studio | API Key 生成与在线测试 | 免费 | 快速获取 API Key、Prompt 调试 |
| Google Cloud Console | 项目管理与凭证配置 | 免费(平台本身) | OAuth、Service Account 配置 |
| gcloud CLI | 命令行认证管理 | 免费 | 本地开发 ADC 认证、自动化脚本 |
| Vertex AI | 企业级 API 接入 | 按用量计费 | 生产部署、合规需求、VPC 内访问 |
操作步骤
方式 1:API Key(推荐入门)
最简单的认证方式,适合个人开发和原型验证。
步骤 1:获取 API Key
- 访问 Google AI Studio
- 登录 Google 账号
- 点击左侧菜单 “API Keys” → “Create API Key”
- 选择或创建一个 Google Cloud 项目
- 复制生成的 API Key
步骤 2:安全存储 API Key
# 方式 A:环境变量(推荐)
export GEMINI_API_KEY="your-api-key-here"
# 方式 B:.env 文件(配合 dotenv 库)
echo 'GEMINI_API_KEY=your-api-key-here' >> .env
# 确保 .env 已加入 .gitignore
echo '.env' >> .gitignore步骤 3:API Key 安全限制
在 Google Cloud Console 中为 API Key 添加限制:
- 应用限制:按 IP 地址、HTTP Referrer 或 Android/iOS 应用限制
- API 限制:仅允许访问 “Generative Language API”
方式 2:OAuth 2.0(团队协作)
适合需要用户级权限控制的应用,如多人协作平台。
# 1. 在 Google Cloud Console 创建 OAuth 2.0 客户端 ID
# APIs & Services → Credentials → Create Credentials → OAuth client ID
# 2. 下载客户端配置文件
# 保存为 client_secret.json
# 3. 使用 gcloud 进行本地 OAuth 认证
gcloud auth application-default login# Python:使用 OAuth 认证访问 Gemini API(通过 Vertex AI)
from google import genai
# ADC(Application Default Credentials)自动检测本地 OAuth 凭证
client = genai.Client(
vertexai=True,
project="your-project-id",
location="us-central1"
)
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="你好,请介绍一下你自己。"
)
print(response.text)方式 3:Service Account(生产部署)
适合服务器端应用、CI/CD 管线和无人值守的自动化场景。
# 1. 创建 Service Account
gcloud iam service-accounts create gemini-api-sa \
--display-name="Gemini API Service Account"
# 2. 授予 Vertex AI 权限
gcloud projects add-iam-policy-binding your-project-id \
--member="serviceAccount:gemini-api-sa@your-project-id.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
# 3. 生成密钥文件
gcloud iam service-accounts keys create key.json \
--iam-account=gemini-api-sa@your-project-id.iam.gserviceaccount.com
# 4. 设置环境变量
export GOOGLE_APPLICATION_CREDENTIALS="./key.json"# Python:使用 Service Account 认证
from google import genai
# 自动读取 GOOGLE_APPLICATION_CREDENTIALS 环境变量
client = genai.Client(
vertexai=True,
project="your-project-id",
location="us-central1"
)
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="分析以下代码的安全漏洞..."
)认证方式对比
| 认证方式 | 复杂度 | 安全性 | 适用场景 | 支持 Vertex AI |
|---|---|---|---|---|
| API Key | ⭐ 最简单 | 中等 | 个人开发、原型验证 | ❌ 仅 Developer API |
| OAuth 2.0 | ⭐⭐ 中等 | 高 | 团队协作、用户级权限 | ✅ |
| Service Account | ⭐⭐⭐ 较复杂 | 最高 | 生产部署、CI/CD、自动化 | ✅ |
提示词模板
你是一位 DevOps 工程师,请帮我为以下场景选择最合适的 Gemini API 认证方式:
场景描述:[描述你的应用场景,如:一个 SaaS 产品的后端服务,需要调用 Gemini API 处理用户上传的文档]
请考虑以下因素:
1. 安全性要求
2. 部署环境(本地/云端/容器)
3. 团队规模
4. 是否需要 Vertex AI 的企业功能
输出:推荐的认证方式、配置步骤、安全注意事项。2. 价格体系
Gemini API 采用按 token 计费的模式,不同模型和上下文长度有不同的价格阶梯。2026 年 2 月的最新价格如下。
2.1 核心模型价格对比
| 模型 | 输入(≤200K) | 输入(>200K) | 输出(含思考) | 上下文缓存输入 | Batch 输入折扣 |
|---|---|---|---|---|---|
| Gemini 3.1 Pro | $2.00/1M | $4.00/1M | $12.00/1M(≤200K)$18.00/1M(>200K) | $0.20/1M | 50% off |
| Gemini 3 Pro | $2.00/1M | $4.00/1M | $12.00/1M(≤200K)$18.00/1M(>200K) | $0.20/1M | 50% off |
| Gemini 3 Flash | $0.50/1M | — | $3.00/1M | $0.05/1M | 50% off |
| Gemini 2.5 Pro | $1.25/1M | $2.50/1M | $10.00/1M(≤200K)$15.00/1M(>200K) | $0.125/1M | 50% off |
| Gemini 2.5 Flash | $0.30/1M | — | $2.50/1M | $0.03/1M | 50% off |
| Flash-Lite | $0.10/1M | — | $0.40/1M | $0.01/1M | 50% off |
💡 关键发现:Gemini 3.1 Pro 与 3 Pro 价格完全相同,但推理性能翻倍(ARC-AGI-2 从 31.1% 到 77.1%)。这意味着升级到 3.1 Pro 是”免费”的性能提升。
2.2 免费层 vs 付费层
| 特性 | 免费层 | 付费层 |
|---|---|---|
| 费用 | $0 | 按用量计费 |
| 可用模型 | 2.5 Pro/Flash/Flash-Lite(3 Pro/3.1 Pro 不可用) | 全部模型 |
| 速率限制 | 5-15 RPM | 150-4,000+ RPM |
| 上下文缓存 | ❌ | ✅ |
| Batch API | ❌ | ✅(50% 折扣) |
| 数据用于改进产品 | ✅ 是 | ❌ 否 |
| 适用场景 | 学习、原型验证 | 生产应用 |
2.3 成本优化策略
| 策略 | 节省幅度 | 适用场景 |
|---|---|---|
| 上下文缓存 | 输入成本降低 90% | 重复分析同一文档/代码库 |
| Batch API | 所有成本降低 50% | 非实时批量处理(24h 内返回) |
| 模型降级 | 75-95% | 简单任务用 Flash-Lite 替代 Pro |
| 200K 阈值管理 | 输入成本降低 50% | 控制 prompt 在 200K tokens 以内 |
| 思考预算控制 | 输出成本降低 30-70% | 简单任务设置 thinking_level: "LOW" |
实战案例:月度成本估算
假设一个中型 SaaS 产品,每天处理 1,000 次用户请求:
场景:AI 代码审查助手
- 每次请求:平均 5,000 输入 tokens + 2,000 输出 tokens
- 日请求量:1,000 次
- 月请求量:30,000 次
方案 A:全部使用 Gemini 3.1 Pro
输入:30,000 × 5,000 / 1M × $2.00 = $300
输出:30,000 × 2,000 / 1M × $12.00 = $720
月总计:$1,020
方案 B:简单请求用 Flash,复杂请求用 Pro(70/30 分流)
Flash 输入:21,000 × 5,000 / 1M × $0.50 = $52.50
Flash 输出:21,000 × 2,000 / 1M × $3.00 = $126
Pro 输入:9,000 × 5,000 / 1M × $2.00 = $90
Pro 输出:9,000 × 2,000 / 1M × $12.00 = $216
月总计:$484.50(节省 52%)
方案 C:方案 B + Batch API(非实时部分)
月总计:约 $290(节省 72%)3. 速率限制与配额层级
Gemini API 通过四个维度控制速率:RPM(每分钟请求数)、TPM(每分钟 token 数)、RPD(每日请求数)和 IPM(每分钟图片数)。
3.1 配额层级体系
| 层级 | 解锁条件 | RPM 范围 | TPM | RPD |
|---|---|---|---|---|
| Free | 无需付费 | 5-15 | 250,000 | 100-1,000 |
| Tier 1 | 绑定付费账号 | 150-300 | 1,000,000-4,000,000 | 10,000-30,000 |
| Tier 2 | 累计消费 $250 + 30 天 | 1,000-2,000 | 4,000,000+ | 无限制 |
| Tier 3 | 累计消费 $1,000 + 30 天 | 4,000+ | 自定义 | 无限制 |
3.2 各模型免费层速率限制
| 模型 | RPM | RPD | TPM |
|---|---|---|---|
| Gemini 2.5 Pro | 5 | 100 | 250,000 |
| Gemini 2.5 Flash | 10 | 250 | 250,000 |
| Flash-Lite | 15 | 1,000 | 250,000 |
| Gemini 3 Pro / 3.1 Pro | — | — | —(免费层不可用) |
| Gemini 3 Flash | 10 | 250 | 250,000 |
3.3 速率限制错误处理
当超过速率限制时,API 返回 HTTP 429 错误。推荐使用指数退避策略:
import time
import random
from google import genai
client = genai.Client(api_key="your-api-key")
def call_with_retry(prompt: str, max_retries: int = 5) -> str:
"""带指数退避的 API 调用"""
for attempt in range(max_retries):
try:
response = client.models.generate_content(
model="gemini-3.1-pro",
contents=prompt
)
return response.text
except Exception as e:
if "429" in str(e) and attempt < max_retries - 1:
wait_time = (2 ** attempt) + random.uniform(0, 1)
print(f"速率限制,等待 {wait_time:.1f}s 后重试...")
time.sleep(wait_time)
else:
raise
return ""import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
async function callWithRetry(prompt: string, maxRetries = 5): Promise<string> {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const response = await ai.models.generateContent({
model: "gemini-3.1-pro",
contents: prompt,
});
return response.text ?? "";
} catch (error: any) {
if (error?.status === 429 && attempt < maxRetries - 1) {
const waitTime = Math.pow(2, attempt) + Math.random();
console.log(`速率限制,等待 ${waitTime.toFixed(1)}s 后重试...`);
await new Promise((r) => setTimeout(r, waitTime * 1000));
} else {
throw error;
}
}
}
return "";
}4. SDK 安装与基础使用
Google 于 2025 年初推出了全新的 Google GenAI SDK(google-genai / @google/genai),取代了旧版 google-generativeai / @google/generative-ai 库。新 SDK 提供统一的 Client 架构,支持在 Developer API 和 Vertex AI 之间无缝切换。
工具推荐
| 工具 | 用途 | 价格 | 适用场景 |
|---|---|---|---|
| google-genai(Python) | Python SDK | 免费(开源) | Python 后端、数据处理、脚本 |
| @google/genai(Node.js) | TypeScript/JS SDK | 免费(开源) | Node.js 后端、全栈应用 |
| Gemini API Cookbook | 官方代码示例集 | 免费(开源) | 学习参考、快速上手 |
| Gemini CLI | 终端 AI 助手 | 免费(开源) | 命令行快速测试、脚本集成 |
操作步骤
步骤 1:安装 SDK
# Python
pip install -U google-genai
# Node.js / TypeScript
npm install @google/genai
# Go
go get google.golang.org/genai⚠️ 注意:如果你之前使用的是旧版 SDK(
google-generativeai或@google/generative-ai),请迁移到新版。旧版已停止更新。
步骤 2:基础文本生成(Python)
import os
from google import genai
# 创建客户端(Developer API)
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 基础文本生成
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="请用 Python 实现一个线程安全的 LRU 缓存。"
)
print(response.text)
# 查看 token 使用量
print(f"输入 tokens: {response.usage_metadata.prompt_token_count}")
print(f"输出 tokens: {response.usage_metadata.candidates_token_count}")
print(f"总 tokens: {response.usage_metadata.total_token_count}")步骤 3:基础文本生成(TypeScript)
import { GoogleGenAI } from "@google/genai";
// 创建客户端
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// 基础文本生成
const response = await ai.models.generateContent({
model: "gemini-3.1-pro",
contents: "请用 TypeScript 实现一个线程安全的 LRU 缓存。",
});
console.log(response.text);
// 查看 token 使用量
console.log(`输入 tokens: ${response.usageMetadata?.promptTokenCount}`);
console.log(`输出 tokens: ${response.usageMetadata?.candidatesTokenCount}`);
console.log(`总 tokens: ${response.usageMetadata?.totalTokenCount}`);步骤 4:流式输出(Python)
import os
from google import genai
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 流式生成——逐块返回,适合实时展示
for chunk in client.models.generate_content_stream(
model="gemini-3.1-pro",
contents="请详细解释 Rust 的所有权系统。"
):
print(chunk.text, end="", flush=True)
print() # 换行步骤 5:流式输出(TypeScript)
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
// 流式生成
const stream = await ai.models.generateContentStream({
model: "gemini-3.1-pro",
contents: "请详细解释 Rust 的所有权系统。",
});
for await (const chunk of stream) {
process.stdout.write(chunk.text ?? "");
}
console.log(); // 换行步骤 6:系统指令与生成配置(Python)
import os
from google import genai
from google.genai import types
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="审查以下 Python 代码的安全性:\n```python\nimport os\nos.system(input('Enter command: '))\n```",
config=types.GenerateContentConfig(
system_instruction="你是一位资深安全工程师,专注于代码安全审查。对每个发现的问题,给出严重等级(Critical/High/Medium/Low)、问题描述和修复建议。",
temperature=0.2, # 低温度 = 更确定性的输出
max_output_tokens=4096, # 最大输出长度
top_p=0.95,
top_k=40,
response_mime_type="application/json", # 结构化 JSON 输出
)
)
print(response.text)步骤 7:系统指令与生成配置(TypeScript)
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const response = await ai.models.generateContent({
model: "gemini-3.1-pro",
contents: '审查以下 Python 代码的安全性:\n```python\nimport os\nos.system(input("Enter command: "))\n```',
config: {
systemInstruction:
"你是一位资深安全工程师,专注于代码安全审查。对每个发现的问题,给出严重等级(Critical/High/Medium/Low)、问题描述和修复建议。",
temperature: 0.2,
maxOutputTokens: 4096,
topP: 0.95,
topK: 40,
responseMimeType: "application/json",
},
});
console.log(response.text);5. 高级功能
5.1 思考模式(Thinking)
Gemini 3.1 Pro 支持三级思考控制(Low / Medium / High),可根据任务复杂度调整推理深度。
from google import genai
from google.genai import types
import os
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 高思考模式——适合复杂推理任务
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="证明:对于所有正整数 n,1² + 2² + ... + n² = n(n+1)(2n+1)/6",
config=types.GenerateContentConfig(
thinking_config=types.ThinkingConfig(thinking_level="HIGH")
)
)
# 查看思考过程(如果可用)
for part in response.candidates[0].content.parts:
if part.thought:
print(f"💭 思考过程:\n{part.text}\n")
else:
print(f"📝 最终回答:\n{part.text}")import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const response = await ai.models.generateContent({
model: "gemini-3.1-pro",
contents: "证明:对于所有正整数 n,1² + 2² + ... + n² = n(n+1)(2n+1)/6",
config: {
thinkingConfig: { thinkingLevel: "HIGH" },
},
});
// 查看思考过程
for (const part of response.candidates?.[0]?.content?.parts ?? []) {
if (part.thought) {
console.log(`💭 思考过程:\n${part.text}\n`);
} else {
console.log(`📝 最终回答:\n${part.text}`);
}
}5.2 上下文缓存
对于需要重复分析同一大型文档或代码库的场景,上下文缓存可将输入成本降低 90%。
from google import genai
from google.genai import types
import os
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 上传大型代码库文件
code_file = client.files.upload(file="./large_codebase.zip")
# 创建缓存(有效期 2 小时)
cache = client.caches.create(
model="gemini-3.1-pro",
config=types.CreateCachedContentConfig(
display_name="codebase-review",
system_instruction="你是一位高级代码审查员。基于提供的代码库回答问题。",
contents=[code_file],
ttl="7200s", # 2 小时有效期
)
)
# 第一轮:架构分析(缓存命中,输入成本降低 90%)
r1 = client.models.generate_content(
model="gemini-3.1-pro",
contents="请分析这个代码库的整体架构,画出模块依赖图。",
config=types.GenerateContentConfig(cached_content=cache.name)
)
print(r1.text)
# 第二轮:安全审查(同一缓存,无需重新上传)
r2 = client.models.generate_content(
model="gemini-3.1-pro",
contents="请检查代码中的安全漏洞,重点关注 SQL 注入和 XSS。",
config=types.GenerateContentConfig(cached_content=cache.name)
)
print(r2.text)
# 缓存存储费用:$4.50/1M tokens/小时
# 对比直接输入:如果代码库 500K tokens,每次查询输入成本 $2.00
# 使用缓存:首次 $2.00 + 后续每次 $0.10 + 存储 $2.25/小时5.3 函数调用(Function Calling)
让 Gemini 调用你定义的外部函数,实现 Agent 工作流。
from google import genai
from google.genai import types
import os, json
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 定义工具
tools = [
types.Tool(function_declarations=[
types.FunctionDeclaration(
name="get_weather",
description="获取指定城市的当前天气信息",
parameters=types.Schema(
type="OBJECT",
properties={
"city": types.Schema(type="STRING", description="城市名称"),
"unit": types.Schema(
type="STRING",
enum=["celsius", "fahrenheit"],
description="温度单位"
),
},
required=["city"],
),
),
types.FunctionDeclaration(
name="search_flights",
description="搜索航班信息",
parameters=types.Schema(
type="OBJECT",
properties={
"origin": types.Schema(type="STRING", description="出发城市"),
"destination": types.Schema(type="STRING", description="目的城市"),
"date": types.Schema(type="STRING", description="出发日期 YYYY-MM-DD"),
},
required=["origin", "destination", "date"],
),
),
])
]
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="我下周三想从北京飞上海,帮我查一下航班和上海的天气。",
config=types.GenerateContentConfig(tools=tools)
)
# 处理函数调用
for part in response.candidates[0].content.parts:
if part.function_call:
print(f"调用函数: {part.function_call.name}")
print(f"参数: {json.dumps(dict(part.function_call.args), ensure_ascii=False)}")5.4 Developer API 与 Vertex AI 无缝切换
新版 SDK 的核心优势之一是可以在 Developer API 和 Vertex AI 之间无缝切换,代码几乎不需要修改。
from google import genai
# 方式 A:Developer API(API Key 认证)
client_dev = genai.Client(api_key="your-api-key")
# 方式 B:Vertex AI(ADC / Service Account 认证)
client_vertex = genai.Client(
vertexai=True,
project="your-project-id",
location="us-central1"
)
# 两种方式的调用代码完全相同
for client in [client_dev, client_vertex]:
response = client.models.generate_content(
model="gemini-3.1-pro",
contents="Hello, Gemini!"
)
print(response.text)import { GoogleGenAI } from "@google/genai";
// 方式 A:Developer API
const aiDev = new GoogleGenAI({ apiKey: "your-api-key" });
// 方式 B:Vertex AI
const aiVertex = new GoogleGenAI({
vertexai: true,
project: "your-project-id",
location: "us-central1",
});
// 调用代码完全相同
for (const ai of [aiDev, aiVertex]) {
const response = await ai.models.generateContent({
model: "gemini-3.1-pro",
contents: "Hello, Gemini!",
});
console.log(response.text);
}5.5 Token 计数与成本预估
在发送请求前预估 token 消耗,避免意外成本。
from google import genai
import os
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
# 预估 token 数量
count_response = client.models.count_tokens(
model="gemini-3.1-pro",
contents="这是一段需要预估 token 数量的文本..."
)
print(f"预估 token 数: {count_response.total_tokens}")
# 成本计算
input_tokens = count_response.total_tokens
estimated_output = 2000 # 预估输出 tokens
input_cost = input_tokens / 1_000_000 * 2.00 # $2.00/1M
output_cost = estimated_output / 1_000_000 * 12.00 # $12.00/1M
print(f"预估成本: ${input_cost + output_cost:.4f}")6. 模型选择指南
6.1 Gemini 模型家族速查
| 模型 | 模型 ID | 上下文窗口 | 最佳用途 | 性价比 |
|---|---|---|---|---|
| Gemini 3.1 Pro | gemini-3.1-pro | 1M tokens | 复杂推理、Agentic 编码、数学证明 | ⭐⭐⭐ |
| Gemini 3 Pro | gemini-3-pro | 1M tokens | 多模态理解、Computer Use | ⭐⭐⭐ |
| Gemini 3 Flash | gemini-3-flash | 1M tokens | 高速推理、搜索增强、日常编码 | ⭐⭐⭐⭐ |
| Gemini 2.5 Pro | gemini-2.5-pro | 1M tokens | 稳定生产、长文档分析 | ⭐⭐⭐⭐ |
| Gemini 2.5 Flash | gemini-2.5-flash | 1M tokens | 高吞吐、实时应用 | ⭐⭐⭐⭐⭐ |
| Flash-Lite | gemini-2.5-flash-lite | 1M tokens | 大规模分类、简单提取 | ⭐⭐⭐⭐⭐ |
6.2 场景选择决策树
你的任务是什么?
│
├─ 复杂推理 / 数学 / 竞赛编程
│ └─ → Gemini 3.1 Pro(thinking_level: HIGH)
│
├─ Agentic 工作流 / 自主编码
│ └─ → Gemini 3.1 Pro 或 3 Pro
│
├─ 多模态理解(图像/视频/音频)
│ ├─ 需要精确分析 → Gemini 3 Pro
│ └─ 够用就好 → Gemini 3 Flash
│
├─ 长文档分析(>200K tokens)
│ ├─ 预算充足 → Gemini 3.1 Pro
│ └─ 控制成本 → Gemini 2.5 Flash
│
├─ 实时对话 / 低延迟
│ └─ → Gemini 3 Flash 或 2.5 Flash
│
├─ 大规模批量处理
│ ├─ 需要高质量 → Gemini 3.1 Pro + Batch API
│ └─ 简单任务 → Flash-Lite + Batch API
│
└─ 学习 / 原型验证(免费)
└─ → Gemini 2.5 Flash(免费层)实战案例:从零搭建 AI 代码审查服务
场景
搭建一个自动化代码审查服务:接收 GitHub PR webhook,使用 Gemini 3.1 Pro 审查代码变更,将审查结果作为 PR 评论发布。
操作流程
import os, json
from google import genai
from google.genai import types
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
def review_code_changes(diff: str, file_path: str) -> dict:
"""使用 Gemini 3.1 Pro 审查代码变更"""
# 预估 token 数量
count = client.models.count_tokens(
model="gemini-3.1-pro",
contents=diff
)
# 根据 diff 大小选择模型
model = "gemini-3.1-pro" if count.total_tokens > 5000 else "gemini-3-flash"
response = client.models.generate_content(
model=model,
contents=f"请审查以下代码变更(文件:{file_path}):\n\n```diff\n{diff}\n```",
config=types.GenerateContentConfig(
system_instruction="""你是一位资深代码审查员。请从以下维度审查代码:
1. 安全性(注入、泄露、权限)
2. 性能(N+1、内存泄漏、阻塞)
3. 可维护性(命名、复杂度、重复)
4. 正确性(边界条件、错误处理)
对每个发现返回 JSON 格式:
{
"issues": [{"severity": "high/medium/low", "line": 行号, "description": "描述", "suggestion": "建议"}],
"summary": "总体评价",
"approve": true/false
}""",
temperature=0.1,
response_mime_type="application/json",
thinking_config=types.ThinkingConfig(thinking_level="MEDIUM")
)
)
result = json.loads(response.text)
result["model_used"] = model
result["tokens_used"] = response.usage_metadata.total_token_count
return result
# 使用示例
diff_content = """
- password = request.form['password']
+ password = hashlib.sha256(request.form['password'].encode()).hexdigest()
+ if len(password) < 8:
+ return "Password too short", 400
"""
review = review_code_changes(diff_content, "auth/login.py")
print(json.dumps(review, ensure_ascii=False, indent=2))案例分析
- 智能模型路由:小 diff 用 Flash($0.50/1M),大 diff 用 Pro($2.00/1M),平均节省 60% 成本
- 思考模式选择:代码审查用 MEDIUM 思考级别,平衡质量和速度;安全审计可升级到 HIGH
- 结构化输出:
response_mime_type: "application/json"确保输出可直接解析,无需额外处理 - 成本控制:通过
count_tokens预估后选择模型,避免简单任务浪费 Pro 的算力
避坑指南
❌ 常见错误
-
使用旧版 SDK(
google-generativeai)- 问题:旧版 SDK 已停止更新,不支持 Gemini 3.x 系列模型和新功能(思考模式、Computer Use 等)
- 正确做法:迁移到新版
google-genai(Python)或@google/genai(Node.js),参考 迁移指南
-
在代码中硬编码 API Key
- 问题:API Key 泄露到 Git 仓库,可能被恶意使用产生高额费用
- 正确做法:使用环境变量或密钥管理服务(如 Google Secret Manager、AWS Secrets Manager);在 Google Cloud Console 中为 API Key 添加 IP/Referrer 限制
-
忽略 200K token 价格阶梯
- 问题:超过 200K tokens 的 prompt,输入价格翻倍($2→$4/1M),输出价格也上涨($12→$18/1M)
- 正确做法:使用
count_tokens预估;对于大型输入,考虑使用上下文缓存或分块处理
-
免费层用于生产环境
- 问题:免费层速率极低(5-15 RPM),且数据会被用于改进 Google 产品
- 正确做法:生产环境必须使用付费层;敏感数据场景考虑 Vertex AI 企业层
-
不处理 429 速率限制错误
- 问题:突发流量导致大量请求失败,用户体验差
- 正确做法:实现指数退避重试;使用请求队列控制并发;监控 RPM/TPM 使用率
-
所有任务都用最贵的模型
- 问题:简单的文本分类、摘要任务用 Gemini 3.1 Pro,成本是 Flash-Lite 的 20 倍
- 正确做法:建立模型路由策略——简单任务用 Flash-Lite,中等任务用 Flash,复杂任务用 Pro
✅ 最佳实践
- 建立模型路由策略:根据任务复杂度自动选择模型,可节省 50-80% 成本
- 善用 Batch API:非实时任务(报告生成、批量分析)使用 Batch API 可节省 50%
- 上下文缓存常态化:对于重复分析同一文档的场景,缓存可将输入成本降低 90%
- 监控 token 使用量:在每次请求后记录
usage_metadata,建立成本仪表板 - 设置预算告警:在 Google Cloud Console 中设置月度预算上限和告警阈值
- 思考预算精细化:简单任务用
thinking_level: "LOW",复杂推理用"HIGH",日常用"MEDIUM"
免费资源最大化利用指南
Google AI Studio 是目前全球最慷慨的免费 AI 开发资源之一。以下是如何最大化利用免费额度的实战策略。
Google AI Studio 免费层详解
| 资源 | 免费额度 | 限制 | 备注 |
|---|---|---|---|
| Gemini 2.5 Pro | 5 RPM / 100 RPD | 250K TPM | 旗舰级推理能力,开发阶段够用 |
| Gemini 2.5 Flash | 10 RPM / 250 RPD | 250K TPM | 速度快,适合日常开发 |
| Gemini 2.5 Flash-Lite | 15 RPM / 1,000 RPD | 250K TPM | 极低延迟,适合高频轻量任务 |
| Gemini 3 Flash | 10 RPM / 250 RPD | 250K TPM | 新一代 Flash,编码能力接近 Pro |
| Gemini 图像生成 | 约 500 张/天 | 速率限制 | 免费生成高质量图像 |
| Gemma 3 全系列 | 通过 Ollama 本地运行完全免费 | 仅受本地硬件限制 | 1B/4B/12B/27B 四种尺寸 |
💡 Gemma 3 是隐藏的宝藏:虽然 Gemma 3 不是 Gemini,但 Google 的 Gemma 3 开源模型家族(1B 到 27B 参数)可以通过 Ollama 在本地完全免费运行,无速率限制、无数据隐私顾虑。Gemma 3 27B 的编码和推理能力已接近 GPT-4o mini 水平,对于开发阶段的 Prompt 调试和本地测试非常实用。
免费层实战策略
# 策略 1:本地 Gemma 3 + 云端 Gemini 混合使用
# 安装 Ollama 并下载 Gemma 3
ollama pull gemma3:27b # 27B 参数,需要 16GB+ 内存
ollama pull gemma3:12b # 12B 参数,需要 8GB+ 内存
ollama pull gemma3:4b # 4B 参数,需要 4GB+ 内存
# 日常开发用本地 Gemma 3(无限制)
ollama run gemma3:27b "请用 Python 实现一个 LRU 缓存"
# 复杂任务用云端 Gemini 2.5 Pro 免费层
curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents":[{"parts":[{"text":"分析这段代码的安全漏洞..."}]}]}'策略 2:免费层速率限制下的开发工作流
开发阶段($0 成本):
├── Prompt 调试 → Google AI Studio 在线 Playground(无需 API 调用)
├── 本地测试 → Ollama + Gemma 3 27B(无限制)
├── 复杂推理 → Gemini 2.5 Pro 免费层(5 RPM,够用)
├── 快速迭代 → Gemini 2.5 Flash 免费层(10 RPM)
└── 图像生成 → Gemini 图像 API 免费层(~500 张/天)
生产阶段(按需付费):
├── 升级到付费层(绑定信用卡即可,按用量计费)
├── 使用 Gemini 3 Flash($0.50/1M 输入,性价比极高)
└── 批量任务用 Batch API(额外 50% 折扣)注意事项
- 免费层数据可能用于 Google 模型改进,生产环境建议使用付费层
- 速率限制在高峰期可能更严格,建议实现重试逻辑
- Gemini 3 Pro 和 3.1 Pro 目前不提供免费层,需要付费使用
- Google 可能随时调整免费额度(2025 年 12 月曾大幅削减),建议关注官方公告
相关资源与延伸阅读
| 资源 | 类型 | 说明 |
|---|---|---|
| Gemini API 官方文档 | 官方文档 | 完整的 API 参考、教程和指南 |
| Gemini API 定价页面 | 官方文档 | 最新价格表,包含所有模型和工具定价 |
| Gemini API 速率限制 | 官方文档 | 各层级速率限制详情和升级指南 |
| Google GenAI SDK 迁移指南 | 官方指南 | 从旧版 SDK 迁移到新版的完整指南 |
| Gemini API Cookbook | GitHub 仓库 | 官方代码示例集,覆盖各种使用场景 |
| google-genai Python SDK | PyPI 包 | Python SDK 安装和版本信息 |
| @google/genai NPM 包 | NPM 包 | TypeScript/JavaScript SDK |
| Gemini CLI | GitHub 仓库 | 开源终端 AI 助手,支持 Gemini 全系列模型 |
| Google AI Studio | 在线工具 | 免费在线测试平台,可生成 API Key |
| Vertex AI Gemini 快速入门 | 官方文档 | 企业级 Vertex AI 接入指南 |
参考来源
- Gemini Developer API Pricing (持续更新,Google 官方定价页面,最后验证 2026-02-19)
- Gemini API Rate Limits (持续更新,Google 官方速率限制文档)
- Migrate to the Google GenAI SDK (持续更新,Google 官方 SDK 迁移指南)
- Gemini 3 Developer Guide (持续更新,Gemini 3 系列开发者指南)
- Gemini 3.1 Pro on Gemini CLI, Gemini Enterprise, and Vertex AI — Google Cloud Blog (2026-02-19,Gemini 3.1 Pro 发布公告)
- Gemini 3.1 Pro Is Here: Benchmarks, Pricing, and How It Stacks Up — FelloAI (2026-02-20,Gemini 3.1 Pro 基准测试与定价分析)
- Google releases Gemini 3.1 Pro with improved reasoning capabilities — The Decoder (2026-02-19,Gemini 3.1 Pro 推理能力分析)
- Gemini API Quota Upgrade Guide — AIFreeAPI (2026-02,配额升级指南,层级体系详解)
📖 返回 总览与导航 | 上一节:多模态能力实战 | 下一节:Claude-GPT-Gemini 对比