Выполнение кода

API Gemini предоставляет инструмент выполнения кода, позволяющий модели генерировать и запускать код Python. Затем модель может итеративно обучаться на основе результатов выполнения кода, пока не получит конечный результат. Вы можете использовать выполнение кода для создания приложений, которые выигрывают от рассуждений на основе кода. Например, вы можете использовать выполнение кода для решения уравнений или обработки текста. Вы также можете использовать библиотеки, включенные в среду выполнения кода, для выполнения более специализированных задач.

Gemini может выполнять код только на Python. Вы можете попросить Gemini сгенерировать код на другом языке, но модель не сможет использовать инструмент выполнения кода для его запуска.

Разрешить выполнение кода

Для включения выполнения кода настройте инструмент выполнения кода в модели. Это позволит модели генерировать и запускать код.

Python

from google import genai

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3-flash-preview",
    input="What is the sum of the first 50 prime numbers? "
          "Generate and run code for the calculation, and make sure you get all 50.",
    tools=[{"type": "code_execution"}]
)

for step in interaction.steps:
    if step.type == "model_output":
        for content_block in step.content:
            if content_block.type == "text":
                print(content_block.text)
    elif step.type == "code_execution_call":
        print(step.arguments.code)
    elif step.type == "code_execution_result":
        print(step.result)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

const interaction = await client.interactions.create({
    model: "gemini-3-flash-preview",
    input: "What is the sum of the first 50 prime numbers? " +
           "Generate and run code for the calculation, and make sure you get all 50.",
    tools: [{ type: "code_execution" }]
});

for (const step of interaction.steps) {
    if (step.type === "model_output") {
        for (const contentBlock of step.content) {
            if (contentBlock.type === "text") {
                console.log(contentBlock.text);
            }
        }
    } else if (step.type === "code_execution_call") {
        console.log(step.arguments.code);
    } else if (step.type === "code_execution_result") {
        console.log(step.result);
    }
}

ОТДЫХ

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "gemini-3-flash-preview",
    "input": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50.",
    "tools": [{"type": "code_execution"}]
}'

Результат может выглядеть примерно так (форматирован для удобства чтения):

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 : Встроенный текст, сгенерированный моделью.
  • code_execution_call : Код, сгенерированный моделью, который должен быть выполнен.
  • code_execution_result : Результат выполнения исполняемого кода

Выполнение кода с использованием образов (Gemini 3)

Теперь модель Gemini 3 Flash может писать и выполнять код на языке Python для активного манипулирования и анализа изображений.

Варианты использования

  • Увеличение и детальный просмотр : модель неявно определяет, когда детали слишком малы (например, при считывании показаний удаленного датчика), и пишет код для обрезки и повторного изучения области с более высоким разрешением.
  • Визуальная математика : модель может выполнять многошаговые вычисления с помощью кода (например, суммирование позиций в чеке).
  • Аннотирование изображений : Модель может аннотировать изображения для ответа на вопросы, например, рисовать стрелки, чтобы показать взаимосвязи.

Включение выполнения кода с использованием изображений

В Gemini 3 Flash официально поддерживается выполнение кода с использованием изображений. Вы можете активировать эту функцию, включив одновременно «Выполнение кода как инструмент» и «Размышление».

Python

from google import genai
import requests
import base64
from PIL import Image
import io

image_path = "https://goo.gle/instrument-img"
image_bytes = requests.get(image_path).content

client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3-flash-preview",
    input=[
        {"type": "image", "data": base64.b64encode(image_bytes).decode('utf-8'), "mime_type": "image/jpeg"},
        {"type": "text", "text": "Zoom into the expression pedals and tell me how many pedals are there?"}
    ],
    tools=[{"type": "code_execution"}]
)

for step in interaction.steps:
    if step.type == "model_output":
        for content_block in step.content:
            if content_block.type == "text":
                print(content_block.text)
            elif content_block.type == "image":
                # Display generated image
                display(Image.open(io.BytesIO(base64.b64decode(content_block.data))))
    elif step.type == "code_execution_call":
        print(step.arguments.code)
    elif step.type == "code_execution_result":
        print(step.result)

JavaScript

async function main() {
  const client = new GoogleGenAI({});

  // 1. Prepare Image Data
  const imageUrl = "https://goo.gle/instrument-img";
  const response = await fetch(imageUrl);
  const imageArrayBuffer = await response.arrayBuffer();
  const base64ImageData = Buffer.from(imageArrayBuffer).toString('base64');

  // 2. Call the API with Code Execution enabled
  const interaction = await client.interactions.create({
    model: "gemini-3-flash-preview",
    input: [
      {
        type: "image",
        data: base64ImageData,
        mimeType: "image/jpeg"
      },
      { type: "text", text: "Zoom into the expression pedals and tell me how many pedals are there?" }
    ],
    tools: [{ type: "code_execution" }]
  });

  // 3. Process the response (Text, Code, and Execution Results)
  for (const step of interaction.steps) {
    if (step.type === "model_output") {
      for (const contentBlock of step.content) {
        if (contentBlock.type === "text") {
          console.log("Text:", contentBlock.text);
        }
      }
    } else if (step.type === "code_execution_call") {
      console.log(`\nGenerated Code:\n`, step.arguments.code);
    } else if (step.type === "code_execution_result") {
      console.log(`\nExecution Output:\n`, step.result);
    }
  }
}

main();

ОТДЫХ

IMG_URL="https://goo.gle/instrument-img"
MODEL="gemini-3-flash-preview"

MIME_TYPE=$(curl -sIL "$IMG_URL" | grep -i '^content-type:' | awk -F ': ' '{print $2}' | sed 's/\r$//' | head -n 1)
if [[ -z "$MIME_TYPE" || ! "$MIME_TYPE" == image/* ]]; then
  MIME_TYPE="image/jpeg"
fi

if [[ "$(uname)" == "Darwin" ]]; then
  IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -b 0)
elif [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  IMAGE_B64=$(curl -sL "$IMG_URL" | base64)
else
  IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -w0)
fi

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3-flash-preview",
      "input": [
        {
          "type": "image",
          "data": "'"$IMAGE_B64"'",
          "mime_type": "'"$MIME_TYPE"'"
        },
        {"type": "text", "text": "Zoom into the expression pedals and tell me how many pedals are there?"}
      ],
      "tools": [{"type": "code_execution"}]
    }'

Используйте выполнение кода в многоходовых взаимодействиях.

Вы также можете использовать выполнение кода в рамках многоэтапного диалога, используя previous_interaction_id .

Python

from google import genai

client = genai.Client()

# First turn
interaction1 = client.interactions.create(
    model="gemini-3-flash-preview",
    input="I have a math question for you.",
    tools=[{"type": "code_execution"}]
)
print(interaction1.steps[-1].content[0].text)

# Second turn - follow-up with code execution
interaction2 = client.interactions.create(
    model="gemini-3-flash-preview",
    previous_interaction_id=interaction1.id,
    input="What is the sum of the first 50 prime numbers? "
          "Generate and run code for the calculation, and make sure you get all 50.",
    tools=[{"type": "code_execution"}]
)

for step in interaction2.steps:
    if step.type == "model_output":
        for content_block in step.content:
            if content_block.type == "text":
                print(content_block.text)
    elif step.type == "code_execution_call":
        print(step.arguments.code)
    elif step.type == "code_execution_result":
        print(step.result)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

// First turn
const interaction1 = await client.interactions.create({
    model: "gemini-3-flash-preview",
    input: "I have a math question for you.",
    tools: [{ type: "code_execution" }]
});
console.log(interaction1.steps.at(-1).content[0].text);

// Second turn - follow-up with code execution
const interaction2 = await client.interactions.create({
    model: "gemini-3-flash-preview",
    previousInteractionId: interaction1.id,
    input: "What is the sum of the first 50 prime numbers? " +
           "Generate and run code for the calculation, and make sure you get all 50.",
    tools: [{ type: "code_execution" }]
});

for (const step of interaction2.steps) {
    if (step.type === "model_output") {
        for (const contentBlock of step.content) {
            if (contentBlock.type === "text") {
                console.log(contentBlock.text);
            }
        }
    } else if (step.type === "code_execution_call") {
        console.log(step.arguments.code);
    } else if (step.type === "code_execution_result") {
        console.log(step.result);
    }
}

ОТДЫХ

# First turn
RESPONSE1=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "gemini-3-flash-preview",
    "input": "I have a math question for you.",
    "tools": [{"type": "code_execution"}]
}')

INTERACTION_ID=$(echo $RESPONSE1 | jq -r '.id')

# Second turn with previous_interaction_id
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "gemini-3-flash-preview",
    "previous_interaction_id": "'"$INTERACTION_ID"'",
    "input": "What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50.",
    "tools": [{"type": "code_execution"}]
}'

Ввод/вывод (I/O)

Начиная с Gemini 2.0 Flash , выполнение кода поддерживает ввод файлов и вывод графиков. Используя эти возможности ввода и вывода, вы можете загружать CSV-файлы и текстовые файлы, задавать вопросы о файлах и получать графики Matplotlib в качестве части ответа. Выходные файлы возвращаются в виде встроенных изображений в ответе.

Ценообразование ввода/вывода

При использовании операций ввода-вывода для выполнения кода взимается плата за входные и выходные токены:

Входные токены:

  • Запрос пользователя

Выходные токены:

  • Код, сгенерированный моделью.
  • Результаты выполнения кода в среде выполнения кода
  • Мыслительные жетоны
  • Сводная информация, сгенерированная моделью.

Подробности ввода/вывода

При работе с операциями ввода-вывода при выполнении кода следует учитывать следующие технические детали:

  • Максимальное время выполнения среды выполнения кода составляет 30 секунд.
  • Если в среде выполнения кода возникает ошибка, модель может принять решение о повторной генерации выходных данных кода. Это может происходить до 5 раз.
  • Максимальный размер входного файла ограничен окном токенов модели. В AI Studio, использующей Gemini Flash 2.0, максимальный размер входного файла составляет 1 миллион токенов (примерно 2 МБ для текстовых файлов поддерживаемых типов ввода). Если вы загрузите файл слишком большого размера, AI Studio не позволит вам его отправить.
  • Наилучшие результаты выполнения кода достигаются при работе с текстовыми и CSV-файлами.
  • Входной файл может быть передан в виде встроенных данных или загружен с помощью Files API , а выходной файл всегда возвращается в виде встроенных данных.

Выставление счетов

За включение выполнения кода через API Gemini дополнительная плата не взимается. Оплата будет производиться по текущему тарифу на входные и выходные токены в зависимости от используемой вами модели Gemini.

Вот еще несколько моментов, которые следует знать о выставлении счетов за выполнение кода:

  • С вас взимается плата только один раз за входные токены, которые вы передаете модели, и плата взимается за конечные выходные токены, возвращаемые вам моделью.
  • Токены, представляющие сгенерированный код, учитываются как выходные токены. Сгенерированный код может включать текст и мультимодальный вывод, например, изображения.
  • Результаты выполнения кода также учитываются как выходные токены.

Модель выставления счетов представлена ​​на следующей диаграмме:

модель выставления счетов за выполнение кода

  • С вас взимается плата по текущему тарифу за входящие и исходящие токены в соответствии с используемой вами моделью Gemini.
  • Если Gemini использует выполнение кода при генерации вашего ответа, исходный запрос, сгенерированный код и результат выполнения кода помечаются как промежуточные токены и оплачиваются как входные токены .
  • Затем Gemini генерирует сводку и возвращает сгенерированный код, результат выполнения кода и итоговую сводку. Оплата производится в виде выходных токенов .
  • API Gemini включает в ответ API промежуточный счетчик токенов, поэтому вы знаете, почему получаете дополнительные входные токены помимо первоначального запроса.

Ограничения

  • Модель может только генерировать и выполнять код. Она не может возвращать другие артефакты, такие как медиафайлы.
  • В некоторых случаях включение выполнения кода может привести к регрессии в других областях вывода модели (например, при написании истории).
  • Способность различных моделей успешно использовать выполнение кода несколько различается.

Поддерживаемые комбинации инструментов

Инструмент выполнения кода можно комбинировать с функцией Grounding with Google Search для реализации более сложных сценариев использования.

Модели Gemini 3 поддерживают комбинирование встроенных инструментов (например, выполнение кода) с пользовательскими инструментами (вызов функций).

Поддерживаемые библиотеки

Среда выполнения кода включает следующие библиотеки:

  • атрибуты
  • шахматы
  • контурный
  • fpdf
  • геопанды
  • изображение
  • jinja2
  • joblib
  • jsonschema
  • jsonschema-specifications
  • lxml
  • matplotlib
  • mpmath
  • numpy
  • opencv-python
  • openpyxl
  • упаковка
  • панды
  • подушка
  • протобуф
  • пилатекс
  • pyparsing
  • PyPDF2
  • python-dateutil
  • python-docx
  • python-pptx
  • репортабл
  • scikit-learn
  • сципи
  • морской
  • шесть
  • striprtf
  • симпи
  • составить таблицу
  • тензорфлоу
  • инструмент
  • кслрд

Вы не можете установить собственные библиотеки.

Что дальше?