Gemini API 提供了一个代码执行工具,可让模型生成和运行 Python 代码。然后,模型可以从代码执行结果中迭代学习,直到获得最终输出。您可以使用代码执行功能来构建可受益于基于代码的推理的应用。例如,您可以使用代码执行功能来求解方程式或处理文本。您还可以使用代码执行环境中包含的库来执行更专业的任务。
Gemini 只能执行 Python 代码。您仍然可以要求 Gemini 以其他语言生成代码,但模型无法使用代码执行工具来运行该代码。
启用代码执行功能
如需启用代码执行功能,请在模型上配置代码执行工具。这样一来,模型就可以生成并运行代码。
Python
from google import genai from google.genai import types client = genai.Client() response = client.models.generate_content( model="gemini-2.5-flash", contents="What is the sum of the first 50 prime numbers? " "Generate and run code for the calculation, and make sure you get all 50.", config=types.GenerateContentConfig( tools=[types.Tool(code_execution=types.ToolCodeExecution)] ), ) for part in response.candidates[0].content.parts: if part.text is not None: print(part.text) if part.executable_code is not None: print(part.executable_code.code) if part.code_execution_result is not None: print(part.code_execution_result.output)
JavaScript
import { GoogleGenAI } from "@google/genai"; const ai = new GoogleGenAI({}); let response = await ai.models.generateContent({ model: "gemini-2.5-flash", contents: [ "What is the sum of the first 50 prime numbers? " + "Generate and run code for the calculation, and make sure you get all 50.", ], config: { tools: [{ codeExecution: {} }], }, }); const parts = response?.candidates?.[0]?.content?.parts || []; parts.forEach((part) => { if (part.text) { console.log(part.text); } if (part.executableCode && part.executableCode.code) { console.log(part.executableCode.code); } if (part.codeExecutionResult && part.codeExecutionResult.output) { console.log(part.codeExecutionResult.output); } });
Go
package main import ( "context" "fmt" "os" "google.golang.org/genai" ) func main() { ctx := context.Background() client, err := genai.NewClient(ctx, nil) if err != nil { log.Fatal(err) } config := &genai.GenerateContentConfig{ Tools: []*genai.Tool{ {CodeExecution: &genai.ToolCodeExecution{}}, }, } result, _ := client.Models.GenerateContent( ctx, "gemini-2.5-flash", genai.Text("What is the sum of the first 50 prime numbers? " + "Generate and run code for the calculation, and make sure you get all 50."), config, ) fmt.Println(result.Text()) fmt.Println(result.ExecutableCode()) fmt.Println(result.CodeExecutionResult()) }
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \ -H "x-goog-api-key: $GEMINI_API_KEY" \ -H 'Content-Type: application/json' \ -d ' {"tools": [{"code_execution": {}}], "contents": { "parts": { "text": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50." } }, }'
输出可能如下所示,为了便于阅读,已对其进行格式设置:
Okay, I need to calculate the sum of the first 50 prime numbers. Here's how I'll approach this: 1. **Generate Prime Numbers:** I'll use an iterative method to find prime numbers. I'll start with 2 and check if each subsequent number is divisible by any number between 2 and its square root. If not, it's a prime. 2. **Store Primes:** I'll store the prime numbers in a list until I have 50 of them. 3. **Calculate the Sum:** Finally, I'll sum the prime numbers in the list. Here's the Python code to do this: def is_prime(n): """Efficiently checks if a number is prime.""" if n <= 1: return False if n <= 3: return True if n % 2 == 0 or n % 3 == 0: return False i = 5 while i * i <= n: if n % i == 0 or n % (i + 2) == 0: return False i += 6 return True primes = [] num = 2 while len(primes) < 50: if is_prime(num): primes.append(num) num += 1 sum_of_primes = sum(primes) print(f'{primes=}') print(f'{sum_of_primes=}') primes=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229] sum_of_primes=5117 The sum of the first 50 prime numbers is 5117.
此输出结合了模型在使用代码执行功能时返回的多个内容部分:
text
:模型生成的内嵌文本executableCode
:模型生成的旨在执行的代码codeExecutionResult
:可执行代码的结果
这些部分的命名惯例因编程语言而异。
在对话中使用代码执行
您还可以在对话中使用代码执行。
Python
from google import genai from google.genai import types client = genai.Client() chat = client.chats.create( model="gemini-2.5-flash", config=types.GenerateContentConfig( tools=[types.Tool(code_execution=types.ToolCodeExecution)] ), ) response = chat.send_message("I have a math question for you.") print(response.text) response = chat.send_message( "What is the sum of the first 50 prime numbers? " "Generate and run code for the calculation, and make sure you get all 50." ) for part in response.candidates[0].content.parts: if part.text is not None: print(part.text) if part.executable_code is not None: print(part.executable_code.code) if part.code_execution_result is not None: print(part.code_execution_result.output)
JavaScript
import {GoogleGenAI} from "@google/genai"; const ai = new GoogleGenAI({}); const chat = ai.chats.create({ model: "gemini-2.5-flash", history: [ { role: "user", parts: [{ text: "I have a math question for you:" }], }, { role: "model", parts: [{ text: "Great! I'm ready for your math question. Please ask away." }], }, ], config: { tools: [{codeExecution:{}}], } }); const response = await chat.sendMessage({ message: "What is the sum of the first 50 prime numbers? " + "Generate and run code for the calculation, and make sure you get all 50." }); console.log("Chat response:", response.text);
Go
package main import ( "context" "fmt" "os" "google.golang.org/genai" ) func main() { ctx := context.Background() client, err := genai.NewClient(ctx, nil) if err != nil { log.Fatal(err) } config := &genai.GenerateContentConfig{ Tools: []*genai.Tool{ {CodeExecution: &genai.ToolCodeExecution{}}, }, } chat, _ := client.Chats.Create( ctx, "gemini-2.5-flash", config, nil, ) result, _ := chat.SendMessage( ctx, genai.Part{Text: "What is the sum of the first 50 prime numbers? " + "Generate and run code for the calculation, and " + "make sure you get all 50.", }, ) fmt.Println(result.Text()) fmt.Println(result.ExecutableCode()) fmt.Println(result.CodeExecutionResult()) }
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \ -H "x-goog-api-key: $GEMINI_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"tools": [{"code_execution": {}}], "contents": [ { "role": "user", "parts": [{ "text": "Can you print \"Hello world!\"?" }] },{ "role": "model", "parts": [ { "text": "" }, { "executable_code": { "language": "PYTHON", "code": "\nprint(\"hello world!\")\n" } }, { "code_execution_result": { "outcome": "OUTCOME_OK", "output": "hello world!\n" } }, { "text": "I have printed \"hello world!\" using the provided python code block. \n" } ], },{ "role": "user", "parts": [{ "text": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50." }] } ] }'
输入/输出 (I/O)
从 Gemini 2.0 Flash 开始,代码执行支持文件输入和图表输出。利用这些输入和输出功能,您可以上传 CSV 和文本文件,询问有关这些文件的问题,并让系统生成 Matplotlib 图表作为回答的一部分显示出来。输出文件以内嵌图片的形式在响应中返回。
I/O 定价
使用代码执行 I/O 时,您需要为输入 token 和输出 token 支付费用:
输入 token:
- 用户提示
输出 token 数:
- 模型生成的代码
- 代码环境中的代码执行输出
- 思考令牌
- 模型生成的摘要
I/O 详情
使用代码执行 I/O 时,请注意以下技术细节:
- 代码环境的最长运行时间为 30 秒。
- 如果代码环境生成错误,模型可能会决定重新生成代码输出。此过程最多可重复 5 次。
- 文件输入大小上限受模型 token 窗口的限制。在 AI Studio 中,使用 Gemini Flash 2.0 时,输入文件大小上限为 100 万个 token(对于支持的输入类型的文本文件,约为 2MB)。如果您上传的文件过大,AI Studio 将不允许您发送该文件。
- 代码执行最适合处理文本文件和 CSV 文件。
- 输入文件可以采用
part.inlineData
或part.fileData
格式(通过 Files API 上传),输出文件始终以part.inlineData
格式返回。
单轮 | 双向(Multimodal Live API) | |
---|---|---|
支持的型号 | 所有 Gemini 2.0 和 2.5 模型 | 仅限 Flash 实验性模型 |
支持的文件输入类型 | .png、.jpeg、.csv、.xml、.cpp、.java、.py、.js、.ts | .png、.jpeg、.csv、.xml、.cpp、.java、.py、.js、.ts |
支持的绘图库 | Matplotlib、seaborn | Matplotlib、seaborn |
多工具使用 | 是(仅限代码执行 + 接地) | 是 |
结算
通过 Gemini API 启用代码执行不会产生额外的费用。系统会根据您使用的 Gemini 模型,按当前的输入和输出令牌费率向您收费。
以下是关于代码执行结算的一些其他注意事项:
- 您只需为您传递给模型的输入 token 支付一次费用,并需要为模型返回给您的最终输出 token 支付费用。
- 表示生成的代码的令牌计为输出令牌。生成的代码可以包含文本和多模态输出(例如图片)。
- 代码执行结果也计为输出 token。
结算模式如下图所示:
- 系统会根据您使用的 Gemini 模型,按当前的输入和输出令牌费率向您收费。
- 如果 Gemini 在生成回答时使用代码执行,则原始提示、生成的代码以及执行的代码的结果会被标记为中间令牌,并按输入令牌计费。
- 然后,Gemini 会生成摘要,并返回生成的代码、执行的代码的结果以及最终摘要。这些数据按输出令牌计费。
- Gemini API 在 API 响应中包含中间 token 数,因此您可以了解为什么会获得除初始提示之外的其他输入 token。
限制
- 模型只能生成和执行代码。它无法返回其他制品,例如媒体文件。
- 在某些情况下,启用代码执行可能会导致模型输出的其他方面(例如,撰写故事)出现回归问题。
- 不同模型成功使用代码执行功能的能力各不相同。
受支持的库
代码执行环境包含以下库:
- attrs
- 国际象棋
- contourpy
- fpdf
- geopandas
- imageio
- jinja2
- joblib
- jsonschema
- jsonschema-specifications
- lxml
- matplotlib
- mpmath
- numpy
- opencv-python
- openpyxl
- 打包
- pandas
- pillow
- protobuf
- pylatex
- pyparsing
- PyPDF2
- python-dateutil
- python-docx
- python-pptx
- reportlab
- scikit-learn
- scipy
- seaborn
- six
- striprtf
- sympy
- 制表
- tensorflow
- toolz
- xlrd
您无法安装自己的库。
后续步骤
- 试用代码执行 Colab。
- 了解其他 Gemini API 工具: