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

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

Выполнение кода доступно как в AI Studio, так и в Gemini API. В AI Studio вы можете включить выполнение кода на правой панели в разделе «Инструменты» . Gemini API обеспечивает выполнение кода как инструмент, аналогичный вызову функций . После того как вы добавите выполнение кода в качестве инструмента, модель сама решит, когда его использовать.

Среда выполнения кода включает в себя следующие библиотеки: altair , chess , cv2 , matplotlib , mpmath , numpy , pandas , pdfminer , reportlab , seaborn , sklearn , statsmodels , striprtf , sympy и tabulate . Вы не можете устанавливать свои собственные библиотеки.

Начало работы с выполнением кода

Также доступен блокнот выполнения кода:

В этом разделе предполагается, что вы выполнили шаги по установке и настройке, показанные в кратком руководстве .

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

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

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

response = client.models.generate_content(
  model='gemini-2.0-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
    )]
  )
)

В блокноте вы можете отобразить все в формате Markdown с помощью этой вспомогательной функции:

def display_code_execution_result(response):
  for part in response.candidates[0].content.parts:
    if part.text is not None:
      display(Markdown(part.text))
    if part.executable_code is not None:
      code_html = f'<pre style="background-color: #BBBBEE;">{part.executable_code.code}</pre>' # Change code color
      display(HTML(code_html))
    if part.code_execution_result is not None:
      display(Markdown(part.code_execution_result.output))
    if part.inline_data is not None:
      display(Image(data=part.inline_data.data, format="png"))
    display(Markdown("---"))

display_code_execution_result(response)

Вывод может выглядеть примерно так:

Хорошо, мне нужно посчитать сумму первых 50 простых чисел. Я буду использовать скрипт Python для генерации первых 50 простых чисел, а затем суммировать их.

```python
def is_prime(n):
  """Checks if a number is prime."""
  if n <= 1:
    return False
  for i in range(2, int(n**0.5) + 1):
    if n % i == 0:
      return False
  return True

def sum_of_primes(n):
  """Calculates the sum of the first n prime numbers."""
  primes = []
  i = 2
  while len(primes) < n:
    if is_prime(i):
      primes.append(i)
    i += 1
  return sum(primes)

# Calculate the sum of the first 50 prime numbers
sum_of_first_50_primes = sum_of_primes(50)

print(f"The sum of the first 50 prime numbers is: {sum_of_first_50_primes}")
```

**Output:**

```
The sum of the first 50 prime numbers is: 5117
```

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

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

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

chat = client.chats.create(
    model='gemini-2.0-flash',
    config=types.GenerateContentConfig(
      tools=[types.Tool(
        code_execution=types.ToolCodeExecution
      )]
    )
)

response = chat.send_message("Can you run some code to bogo-sort this list of numbers?: [2,34,1,65,4]")
display_code_execution_result(response)

Разговор можно было бы продолжить так:

Я понимаю, что вы хотите, чтобы я отсортировал список [2, 34, 1, 65, 4]. Bogo-sort — заведомо неэффективный алгоритм сортировки. Он работает путем многократного перемешивания списка, пока он не будет отсортирован. Из-за крайне низкой производительности он непрактичен для списков значительного размера.

Однако в демонстрационных целях я могу запустить упрощенную версию с очень ограниченным количеством итераций, просто чтобы показать процесс. Должен ли я идти вперед?

response = chat.send_message("Yes, please create the code.")
display_code_execution_result(response)

Хорошо, я продолжу функцию, которая перемешивает список и проверяет, отсортирован ли он. Я запущу его максимум на 10 итераций. ...

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

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

Цены ввода-вывода

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

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

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

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

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

Детали ввода/вывода

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

  • Максимальное время выполнения среды кода — 30 секунд.
  • Если среда кода генерирует ошибку, модель может решить повторно сгенерировать выходные данные кода. Это может произойти до 5 раз.
  • Максимальный размер входного файла ограничен окном токена модели. В AI Studio с использованием Gemini Flash 2.0 максимальный размер входного файла составляет 1 миллион токенов (примерно 2 МБ для текстовых файлов поддерживаемых типов ввода). Если вы загрузите слишком большой файл, AI Studio не позволит вам его отправить.
Одиночный поворот Двунаправленный (мультимодальный Live API)
Поддерживаемые модели Все модели Близнецов 2.0 Только экспериментальные модели Flash
Поддерживаемые типы ввода файлов .png, .jpeg, .csv, .xml, .cpp, .java, .py, .js, .ts .png, .jpeg, .csv, .xml, .cpp, .java, .py, .js, .ts
Поддерживаются библиотеки печати Матплотлиб Матплотлиб
Использование нескольких инструментов Нет Да

Биллинг

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

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

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

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

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

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

Ограничения

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