Функция выполнения кода 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 промежуточное количество токенов, чтобы вы знали, почему вы получаете дополнительные входные токены помимо первоначального запроса.
Ограничения
- Модель может только генерировать и выполнять код. Он не может возвращать другие артефакты, такие как медиафайлы.
- В некоторых случаях включение выполнения кода может привести к регрессии в других областях вывода модели (например, при написании истории).
- Существуют некоторые различия в способности разных моделей успешно использовать выполнение кода.