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

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

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

Включить выполнение кода

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

Питон

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);
  }
});

Идти

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())
}

ОТДЫХ

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 : Результат исполняемого кода

Соглашения об именовании этих частей различаются в зависимости от языка программирования.

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

Вы также можете использовать выполнение кода в рамках чата.

Питон

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);

Идти

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())
}

ОТДЫХ

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 в ответе. Выходные файлы возвращаются в виде встроенных изображений в ответе.

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

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

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

  • Подсказка пользователю

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

  • Код, сгенерированный моделью
  • Вывод выполнения кода в среде кода
  • Жетоны мышления
  • Сводка, созданная моделью

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

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

  • Максимальное время выполнения кодовой среды составляет 30 секунд.
  • Если среда кода генерирует ошибку, модель может решить перегенерировать вывод кода. Это может произойти до 5 раз.
  • Максимальный размер входного файла ограничен окном токенов модели. В AI Studio при использовании Gemini Flash 2.0 максимальный размер входного файла составляет 1 миллион токенов (примерно 2 МБ для текстовых файлов поддерживаемых типов входных данных). Если вы загрузите слишком большой файл, AI Studio не позволит вам его отправить.
  • Выполнение кода лучше всего работает с текстовыми и CSV-файлами.
  • Входной файл может быть передан в part.inlineData или part.fileData (загруженный через Files API ), а выходной файл всегда возвращается как part.inlineData .
Один поворот Двунаправленный (мультимодальный 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
Использование многофункционального инструмента Да (только выполнение кода + заземление) Да

Биллинг

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

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

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

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

модель биллинга за выполнение кода

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

Ограничения

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

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

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

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

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

Что дальше?