Перейти к основному контенту

Практикум по API Gemini 3.8 Flash: уровни «мышления», извлечение из PDF и вызов функций на Python

Научитесь работать с API Gemini 3.8 Flash на Python: настройка Interactions API, настройка thinking_level, извлечение PDF→JSON и вызов функций с кодом.
Обновлено 7 сент. 2026 г.  · 15 мин читать

Изучить с помощью AI

ChatGPTClaudePerplexity

Google выпустила 3 модели Flash за 6 недель: 3.6 в конце июля, затем 3.7 Flash 13 августа и сейчас Gemini 3.8 Flash 2 сентября 2026 года. Если вы переходите с 3.7, обновление — это одна строка, так как поверхность API идентична. Более старые конфиги по-прежнему ломаются, если не скорректировать параметры.

Вместо латания легаси-кода это руководство предлагает чистую настройку с нуля. Мы инициализируем Python‑клиент на Interactions API, сравним 3 уровня «мышления» на практической задаче отладки с реальным подсчётом токенов, извлечём структурированный JSON по схеме из счёта‑фактуры в PDF и реализуем полный цикл вызова функций. В конце разберём чек‑лист миграции для разработчиков, обновляющихся с 3.6 Flash и более ранних версий.

Для повторения вам понадобится Python 3.10+ и ключ API Google AI Studio. Это руководство сосредоточено на реализации кода, а не на анонсах функций.

Коротко

  • Gemini 3.8 Flash (gemini-3.8-flash) использует Interactions API через client.interactions.create() в SDK google-genai

  • Глубина рассуждений задаётся строковыми значениями (thinking_level: low, medium, high). 

  • Легаси‑опции семплирования (temperature, top_p, top_k) больше не поддерживаются 

  • Состояние мульти‑диалога хранится на сервере через previous_interaction_id

  • Стартовая цена — $0.75 / $3.75 за миллион входных/выходных токенов до 31 декабря 2026 года. 

  • Если переходить с 3.7 Flash, меняется только строка с именем модели.

Что такое Gemini 3.8 Flash?

Gemini 3.8 Flash — рабочая лошадка от Google, общедоступная с 2 сентября 2026 года под идентификатором модели gemini-3.8-flash. Она вышла через 3 недели после 3.7 Flash, а Google позиционирует её для долгих циклов кодинга, агентных сценариев и многошаговых рассуждений в специализированных доменах, таких как финансы и юридическая практика.

Спецификации, важные для вызовов API, не изменились относительно 3.7: 

  • контекстное окно на 1 млн токенов
  • максимум 64k выходных токенов
  • мультимодальный ввод (текст, изображения, видео, аудио, PDF) с текстовым выводом
  • Та же стартовая цена: $0.75 за 1 млн входных токенов и $3.75 за 1 млн выходных токенов до 31 декабря 2026 года (с повышением до $1.50 и $7.50 с 1 января 2027 года)

Изменилось поведение, а не интерфейс: Google утверждает, что 3.8 усерднее работает над сложными задачами, делая дополнительные шаги рассуждений и итеративно вызывая инструменты, что может увеличивать расход токенов на более высоких уровнях усилий. 3.7 Flash полностью поддерживается для нагрузок, где эффективность важнее глубины.

Для бенчмарков и подробного прайсинга смотрите наш обзор Gemini 3.8 Flash или прочитайте гид Что такое Google Gemini? для обзора платформы.

Gemini 3.8 Flash vs. 3.8 Flash Cyber

Запуск включает 2 варианта, и только у одного из них есть вводимый идентификатор модели. 

  • Gemini 3.8 Flash — универсальная модель, доступная сегодня в Google AI Studio и Gemini API. 
  • Gemini 3.8 Flash Cyber — кибербезопасностный вариант, настроенный для поиска уязвимостей и автоматического патчинга.

Вариант Cyber недоступен в публичном API: доступ предоставляется через программу Fairwind Google, которая предоставляется только одобренным госорганам, операторам критической инфраструктуры и мейнтейнерам ПО.

Если вы следуете этому руководству, ваш ID модели — gemini-3.8-flash. Ничто далее не требует и не использует вариант Cyber.

Interactions API против generateContent

Чтобы вызвать Gemini 3.8 Flash, используйте client.interactions.create() в SDK google-genai. Google сделал Interactions API GA в июне 2026 года и рекомендует его для всех новых задач. Хотя generateContent ещё работает, это теперь наследие. Новые функции, такие как серверная история, фоновые выполнения и наблюдаемые шаги выполнения, впервые появляются в Interactions.

Главное практическое изменение — управление состоянием. Многоходовые вызовы теперь используют серверный previous_interaction_id: вы передаёте ID последнего взаимодействия, а сервер восстанавливает состояние. Больше не нужно вручную дополнять или пересылать всю историю чата с клиента. Также избегайте префиллинга ходов модели; это наследие generateContent и сломается на Gemini 3.x.

Есть ловушка, в которую почти все попадаются, и она вернётся в разделе про PDF: previous_interaction_id восстанавливает только историю диалога и ничего больше. tools, system_instruction, generation_config и response_format имеют область взаимодействия, поэтому любой ход, где они нужны, должен снова их передавать.

thinking_level заменяет ручки семплирования

В старых моделях Gemini разработчики использовали temperature, top_p и top_k для управления случайностью вывода. В Gemini 3.x эти ручки семплирования убраны и заменены на thinking_level — это теперь единственный регулятор.

Поддерживаются 3 значения:

  • low: минимум токенов рассуждений, быстрее и дешевле всего. Подходит для извлечения, классификации и всего, что вы будете проверять сами.

  • medium: значение по умолчанию, рекомендация Google для кода и агентных сценариев.

  • high: максимальный бюджет рассуждений для сложной многошаговой логики и задач с активным использованием инструментов.

Не отправляйте minimal. Это недопустимое значение, начиная с Gemini Flash 3.7, и приведёт к 400‑й ошибке валидации. 

Ещё одно правило, перешедшее из 3.7: frequency_penalty, presence_penalty и candidate_count теперь вызывают явную ошибку API, так что уберите их и из легаси‑конфигов.

Как настроить API Gemini 3.8 Flash?

Настройка окружения занимает около 2 минут. Нужен ключ API из Google AI Studio и обновлённая библиотека Python google-genai.

Получите ключ API в Google AI Studio

Откройте Google AI Studio в своём браузере и войдите под своей учётной записью Google. Нажмите Create API Key, выберите или создайте проект Google Cloud и скопируйте свой секретный ключ. 

Generating a Google AI Studio API key

Откройте терминал и сохраните ключ в переменной окружения командой export GEMINI_API_KEY=<your-key>.

Никогда не передавайте ключ как параметр ?key= в URL: строки запроса попадают в серверные логи, историю браузера и кэши прокси. Если хотите поэкспериментировать с моделью в песочнице до написания кода, в руководстве по Google AI Studio рассмотрены режимы Chat, Build и Stream; эта статья остаётся на API.

Для продакшен‑систем история аутентификации иная: Vertex AI (теперь часть Gemini Enterprise Agent Platform) предоставляет OAuth, роли IAM и региональные эндпоинты вместо «сырых» ключей API. В этом руководстве используются ключи AI Studio, потому что это самый быстрый путь для обучения, но миграцию на Vertex стоит планировать до того, как что‑либо коснётся реальных пользовательских данных.

Установите google-genai и создайте клиент

Во многих туториалах всё ещё советуют ставить google-generativeai. Это старый SDK без Interactions API. Установите google-genai (версии 2.3.0 или новее):

pip install -U google-genai

После установки убедитесь, что Python импортирует библиотеку и инициализирует клиент без ошибок:

from google import genai # reads GEMINI_API_KEY from the environment
client = genai.Client() 
print("Client initialized successfully.")

Сделайте первый вызов Interactions API

Каждый запрос к Interactions API создаёт ресурс Interaction, который фиксирует полный ход: ваш ввод, «мысли» модели, вызовы инструментов и финальный ответ. SDK даёт финальный текст через удобное свойство output_text, так что редко нужно разбирать шаги вручную.

from google import genai
client = genai.Client()
interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=(
        "Write a pandas one-liner that adds a 7-day rolling average "
        "revenue column per store_id to a DataFrame with columns "
        "date, store_id, revenue. Reply with only the code, no explanation."
    ),
    generation_config={"thinking_level": "medium"},
)
print(interaction.output_text)
usage = interaction.usage
print(
    f"input={usage.total_input_tokens} | output={usage.total_output_tokens} | "
    f"thinking={usage.total_thought_tokens} | total={usage.total_tokens}"
)

На моей машине модель ответила сцепленной one‑liner‑конструкцией pandas, а строка учёта была такой:

Make your first Interactions API call with Gemini Flash 3.8

За этими числами скрывается первое реальное отличие от 3.7. Я запустил ту же задачу снова с более длинным промптом и без ограничения на вывод, и 3.8 потратила 1 436 «мысленных» токенов против 870 выходных. С ограничением — 1 515 против 42. Бюджет рассуждений почти не изменился — в отличие от 3.7, где те же 2 промпта качнули «мысли» с 838 до 1 530.

Иными словами, 3.8 решает, насколько усердно думать, исходя из задачи, а не из формулировки задачи, что соответствует заявлению Google, будто модель осознанно больше рассуждает и проверяет. «Мысли» тарифицируются по ставке выходных токенов, так что в ограниченном вызове примерно 97% тарифицируемых токенов — это рассуждения, которых я не видел. Поэтому и существует следующий раздел. 

Стримьте ответ

Для чатов и всего, за чем человек наблюдает, ожидание полной генерации несколько секунд ощущается медленно. Передайте stream=True в client.interactions.create() и печатайте фрагменты по мере поступления:

	from google import genai

	client = genai.Client()

	stream = client.interactions.create(
	   model="gemini-3.8-flash",
	   input="Explain the difference between a JOIN and a correlated subquery in SQL.",
	   generation_config={"thinking_level": "low"},
	   stream=True,
	)

	for event in stream:
	   if event.event_type == "step.delta" and event.delta.type == "text":
	       print(event.delta.text, end="", flush=True)
	print() 

У меня модель вернула длинный, хорошо структурированный ответ при thinking_level: "low": концептуальное сравнение, сводную таблицу и 2 SQL‑примера поиска самого недавнего заказа клиента — один с JOIN на производной таблице и один с коррелированным подзапросом в списке SELECT. Первые слова появились почти мгновенно — в этом и был смысл.

Этот финальный print() там не случайно. Без него последний фрагмент заканчивается посреди строки, и zsh покажет лишний % перед вашим промптом, потому что поток обрывается ровно там, где заканчивается текст модели. Кроме того, дельты несут текст только если вы логируете токены на запрос; считывайте их из финального события завершения, а не суммируйте фрагменты.

Как thinking_level влияет на стоимость и качество?

thinking_level задаёт, сколько рассуждений Gemini 3.8 Flash выполнит до вывода ответа. Токены рассуждений тарифицируются по ставке выходных — $3.75 за 1 млн, поэтому выбранный уровень напрямую влияет на стоимость и задержку. По словам Google, 3.8 сознательно этим пользуется: делает дополнительные шаги на сложных задачах и может тратить больше токенов на высоких уровнях усилий, чем 3.7.

Запустите один промпт на low, medium и high

Тест — гонка условий в функции повтора платежа, отправленная с одним и тем же промптом на всех 3 уровнях. Ошибки конкурентности наказывают за «по диагонали», так что если уровни отличаются, это проявится здесь. Если вы выполните только один блок кода из статьи — пусть это будет он, потому что цифры убеждают лучше любой прозы.

import time

from google import genai

client = genai.Client()

BUGGY_CODE = '''
import threading

payment_attempts = {}

def retry_payment(order_id, charge_fn, max_retries=3):
    """Retry a failed payment up to max_retries times."""
    if order_id not in payment_attempts:
        payment_attempts[order_id] = 0

    while payment_attempts[order_id] < max_retries:
        success = charge_fn(order_id)
        if success:
            del payment_attempts[order_id]
            return True
        payment_attempts[order_id] += 1
    return False
'''

PROMPT = (
    "Two worker threads can call retry_payment() with the same order_id "
    "at the same time. Identify the concurrency bug that can double-charge "
    "a customer, and rewrite the function to fix it.\n\n" + BUGGY_CODE
)

for level in ["low", "medium", "high"]:
    start = time.perf_counter()
    interaction = client.interactions.create(
        model="gemini-3.8-flash",
        input=PROMPT,
        generation_config={"thinking_level": level},
    )
    elapsed = time.perf_counter() - start
    usage = interaction.usage
    print(f"\n=== thinking_level: {level} | {elapsed:.1f}s ===")
    print(interaction.output_text)
    print(
        f"input={usage.total_input_tokens} | output={usage.total_output_tokens} | "
        f"thinking={usage.total_thought_tokens}"
    )

Для контекста, уязвимость — неатомарный «проверил‑и‑сделал» на payment_attempts[order_id]. При конкурентности 2 потока могут оба пройти условие while и оба вызвать charge_fn() до инкремента счётчика. Исправление — обернуть чтение‑проверку‑списание‑инкремент в блокировку на заказ или использовать идемпотентный ключ на шлюзе.

Сравнение результатов

Мои результаты:

thinking_level

Поймал гонку?

Исправление верное?

Дизайн исправления

Задержка

Токены «мыслей»

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

Стоимость

low

Да

Да

Блокировки на заказ + множество завершённых

7.8 с

0

791

$0.0031

medium

Да

Да

Блокировки на заказ + словарь состояния по заказу

16.6 с

3,158

627

$0.0143

high

Да

Да

Запись на заказ (блокировка, попытки, завершено) с описанной веткой неудачи

25.5 с

4,512

896

$0.0204

Все 3 уровня обнаружили двойное списание и во всех трёх реализованы блокировки на заказ, чтобы несвязанные заказы шли параллельно. Это второй ключевой момент, если сравнивать с 3.7: там low оборачивал всё в одну глобальную блокировку, удерживаемую во время сетевого вызова, а блокировки на заказ появлялись только на medium. В 3.8 low выдаёт этот более грамотный дизайн при 0 токенов «мыслей», за 7.8 секунды и менее одной трети цента.

Так что дают уровни сейчас? Глубину аудита. В этом коде 4 разные ошибки (двойное списание, KeyError при конкурентном удалении, повторное списание после удаления состояния в ветке успеха и неатомарные инкременты счётчика), и только high назвал все 4; low пропустил повторное списание, а medium — счётчик. 

high также был единственным, кто прописал семантику ветки неудачи своего исправления: когда попытки исчерпаны, последующие вызовы возвращают False вместо повторного списания.

Колонка «мыслей» — это заявление Google «3.8 работает усерднее», проявившееся в терминале. На том же промпте в 3.7 medium вырос с 2 343 до 3 158 «мыслительных» токенов, а high — с 2 217 до 4 512, примерно вдвое, и дополнительные токены купили более полный анализ, а не иной вердикт. Задержка выросла соответственно в этом прогоне (7.8 с, 16.6 с, 25.5 с), но время одного запуска у этих моделей гуляет, так что сравнивайте токены, а не секунды.

Выберите значение по умолчанию и когда повышать уровень

Вот практическое правило для уровней рассуждений:

  • В 3.8 low заслужил более широкое применение, чем предлагает дефолт Google — medium: он дал корректное и хорошо спроектированное исправление при 0 токенов «мыслей», так что начинайте с него для всего, что человек прочитает до того, как это станет важно (триаж, черновики, саммари, код, который вы будете ревьюить). 

  • Оставляйте medium там, где вывод уходит, не будучи прочитанным, потому что дополнительное «думание» дало более полный анализ отказов, а в нечитаемой пайплайне именно неупомянутый режим отказа и срабатывает.

  • Резервируйте high для случаев, когда сама ветка отказа — это продукт, например, платёжные сценарии, миграции или всё, что ревьюер будет аудировать построчно. В моём прогоне это был единственный уровень, поймавший все 4 бага и задокументировавший поведение после исчерпания попыток.

При стоимости в 6.6 раза выше у high по сравнению с low, баланс выглядит совсем иначе при текущих $3.75 за 1 млн выходных токенов против $7.50 после 31 декабря 2026 года — повышайте уровень точечно по запросу, а не глобально.

Полезный выход — Google заявляет, что 3.7 Flash остаётся полностью поддерживаемой для задач, где на первом месте эффективность. Если дополнительная скрупулёзность 3.8 обходится дороже, чем нужно вашей задаче, остаться на gemini-3.7-flash для этой нагрузки — это поддерживаемый выбор, а не хак.

Как извлечь структурированные данные из PDF?

Gemini 3.8 Flash напрямую читает PDF‑файлы, так что вы можете отправить счёт или отчёт и задавать по нему вопросы. Я использовал одностраничный счёт поставщика с номером счёта, датами, 4 позициями и итогом.

Прикрепите PDF к промпту

Загрузка локального PDF счёта через Files API. Files API отвечает за хранение и кэширование файлов в инфраструктуре Google:

	from google import genai
	client = genai.Client()
	print("Uploading invoice...")
	doc = client.files.upload(file="invoice_aug_2026.pdf")
	print(f"File uploaded: {doc.uri}\n")

	interaction = client.interactions.create(
	   model="gemini-3.8-flash",
	   input=[
	       {
	           "type": "text",
	           "text": "Extract the invoice number, total amount due, and due date.",
	       },
	       {"type": "document", "uri": doc.uri, "mime_type": doc.mime_type},
	   ],
	)
	print(interaction.output_text)

Вывод для моего счёта:

Read a PDF with Gemini 3.8 Flash

Все 3 значения верные. Загрузка происходит один раз, и файл остаётся доступен для последующих запросов — это важно, как только вы задаёте более одного вопроса по одному и тому же документу. Ответ приходит в виде маркдаун‑списка — удобно для чтения, но неудобно для конвейера.

Принудите JSON через схему ответа

Чтобы получить JSON вместо прозы, передайте схему в response_format. В Interactions API это параметр верхнего уровня; настройка responseMimeType внутри generationConfig, которую вы увидите в старых туториалах, относится к легаси‑эндпоинту generateContent.

import json

from google import genai
from pydantic import BaseModel

client = genai.Client()


class Invoice(BaseModel):
    invoice_number: str
    total_due_usd: float
    due_date: str  # ISO 8601


doc = client.files.upload(file="invoice_aug_2026.pdf")

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {
            "type": "text",
            "text": "Extract the invoice number, total amount due in USD, and due date.",
        },
        {"type": "document", "uri": doc.uri, "mime_type": doc.mime_type},
    ],
    response_format={
        "type": "text",
        "mime_type": "application/json",
        "schema": Invoice.model_json_schema(),
    },
)

invoice = json.loads(interaction.output_text)
print(invoice)

Вот какой ответ я получил: 

Force JSON format

Ваш класс Pydantic задаёт обязательные поля и типы данных, а model_json_schema() генерирует JSON‑схему, требуемую Gemini API. Затем json.loads() превращает вывод модели в обычный словарь Python. С этого момента структурированные данные можно превратить в строку DataFrame, записать в базу или добавить в Google Sheet.

Задайте уточняющий вопрос с previous_interaction_id

Для второго вопроса по тому же документу передайте id первого взаимодействия в previous_interaction_id. У сервера уже есть PDF и первый обмен, так что ничего из этого снова не отправляете:

follow_up = client.interactions.create(
    model="gemini-3.8-flash",
    previous_interaction_id=interaction.id,
    input="List each line item on the invoice with its amount.",
)

print(follow_up.output_text)

Ask follow up to PDF

Вернулись все 4 позиции по порядку, включая повторяющуюся строку compute, без комментария о повторе. Это верное поведение для заданного вопроса; если хотите, чтобы отмечал аномалии — попросите об этом. 

К слову, 3.7 вёл себя здесь идентично, так что дополнительная скрупулёзность 3.8 относится к собственным рассуждениям, а не к инициативному аудиту, о котором вы не просили.

2 важных момента об этом вызове: 

  • response_format не перенёсся, потому что он в области взаимодействия, поэтому этот ход вернул прозу. 

  • И взаимодействия по умолчанию сохраняются (store=True) на 55 дней на платном тарифе и 1 день — на бесплатном; store=False делает вызов без сохранения состояния, но тогда от него нельзя продолжать через previous_interaction_id.

Как добавить вызов функций в Gemini 3.8 Flash?

Вызов функций в Gemini 3.8 Flash — это один цикл: модель запрашивает инструмент, ваш код его выполняет, вы отправляете результат обратно, и модель пишет финальный ответ. В этом разделе мы соберём цикл вручную.

Если хотите, чтобы Google выполнял цикл за вас с хостинговыми мультитул‑агентами, далее прочитайте наш туториал «Managed Agents» в Gemini API. А если вы планируете двигаться к агентам, курс Building AI Agents with Google ADK строит полноценного ассистента поддержки клиентов на тех же примитивах.

Определите инструмент и выполните цикл взаимодействия

Инструмент — это lookup_exchange_rate(currency, date), поддерживаемый небольшим словарём в памяти, чтобы пример работал без внешнего API. Объявление — это JSON‑схема. Модель никогда не запускает функцию; она возвращает шаг function_call с просьбой к вашему коду:

import json

from google import genai

client = genai.Client()

# Local "data source" standing in for a real FX API
RATES = {
    ("USD", "2026-08-03"): 87.42,
    ("USD", "2026-08-10"): 87.15,
    ("EUR", "2026-08-03"): 95.08,
}


def lookup_exchange_rate(currency: str, date: str) -> dict:
    rate = RATES.get((currency.upper(), date))
    if rate is None:
        return {"error": f"No rate for {currency} on {date}"}
    return {"currency": currency.upper(), "date": date, "inr_rate": rate}


rate_tool = {
    "type": "function",
    "name": "lookup_exchange_rate",
    "description": "Look up the INR exchange rate for a currency on a date (YYYY-MM-DD).",
    "parameters": {
        "type": "object",
        "properties": {
            "currency": {"type": "string", "description": "ISO code, e.g. USD"},
            "date": {"type": "string", "description": "YYYY-MM-DD"},
        },
        "required": ["currency", "date"],
    },
}

# Turn 1: the model decides to call the tool
interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input="What was the USD to INR exchange rate on 2026-08-03?",
    tools=[rate_tool],
)

fc_step = next(s for s in interaction.steps if s.type == "function_call")
print(f"Model requested: {fc_step.name}({fc_step.arguments})")

# Your code executes the function locally
result = lookup_exchange_rate(**fc_step.arguments)

# Turn 2: send the result back; tools must be re-specified (interaction-scoped)
final = client.interactions.create(
    model="gemini-3.8-flash",
    previous_interaction_id=interaction.id,
    input=[
        {
            "type": "function_result",
            "name": fc_step.name,
            "call_id": fc_step.id,
            "result": [{"type": "text", "text": json.dumps(result)}],
        }
    ],
    tools=[rate_tool],
)

print(final.output_text)

Вывод: 

Function calling Gemini 3.8 Flash

Здесь произошло 3 вещи:  

  1. На первом ходу вернулся шаг function_call с именем, структурными аргументами и id.

  2. Ваш Python выполнил поиск.

  3. На втором ходу отправили блок function_result, ссылающийся на тот вызов. 

Параметр tools снова передаётся на втором ходу по той же причине, что response_format пришлось передавать заново в разделе про PDF: previous_interaction_id несёт историю, а не конфиг.

Ошибки при вызове функций в Gemini 3.x

Если цикл инструмента ломается, почти всегда это одна из двух причин. 

Во‑первых, каждый результат должен сопоставляться со своим вызовом. В Interactions API это call_id и name в блоке function_result; в легаси‑API generateContent FunctionResponse должен соответствовать id и name предшествующего FunctionCall. В Gemini 3.x это не опционально.

Во‑вторых, ошибка Malformed_Function_Call обычно возникает, когда модель выдаёт комментарии до вызова инструмента. В руководстве разработчика 3.8 Google советует чистить ведущий текст до инструмента, форматировать встроенные инструкции через \n\n и оборачивать рабочие заметки в отдельный вызов функции, а не в сырой текст. Уточните системную инструкцию; не ретрайте вслепую.

Что ломается при переходе на Gemini 3.8 Flash?

Зависит от отправной точки. 

  • С Gemini 3.7 Flash: ничего. Поменяйте строку модели на gemini-3.8-flash, и любой фрагмент из этой статьи выполнится без изменений, так как поверхность API идентична. 

  • С Gemini 3.6 Flash и ранее настройка модели потребует той же 15‑минутной проверки, что и раньше.

Чек‑лист миграции (с 3.6 Flash и ранее)

Прорабатывайте по порядку. Пункты 1–3 вызывают немедленные 400‑е; пункты 4 и 5 приводят к тихим проблемам качества.

  1. Смените ID модели на gemini-3.8-flash.

  2. Удалите мёртвые параметры семплирования: temperature, top_p и top_k в Gemini 3.x игнорируются или отвергаются, а frequency_penalty, presence_penalty и candidate_count вызывают явную ошибку API. Уберите все 6 из легаси‑конфигов.

  3. Замените thinking_budget на thinking_level: используйте только low, medium или high. Старое значение minimal вернёт ошибку валидации. Отправка и thinking_budget, и thinking_level в одном запросе даст 400.

  4. Уберите префилл ходов модели: удалите их из любой собираемой истории, и убедитесь, что финальный ход пользователя содержит непустой текст. Пэйлоады истории не могут заканчиваться ходом модели.

  5. Стандартизируйте мульти‑диалоги: полагайтесь на previous_interaction_id вместо воспроизведения истории на клиенте. Инструменты, system_instruction и generation_config нужно указывать заново на каждом ходу, где они важны.

Актуальная версия от Google опубликована в документации по моделям Gemini API, включая автоматизированный путь, если ваш кодинговый агент поддерживает навыки. Всё равно прочитайте разок сами; автоматическая миграция не объяснит, зачем у вас стояло temperature=0.2.

Ошибки, с которыми вы столкнётесь в продакшене

Вот 4 статус‑кода, под которые стоит написать обработчики, и что они означают в этом API:

Статус

Типичная причина

Что делать

400 INVALID_ARGUMENT

Остатки легаси‑полей: temperature, thinking_budget, thinking_level: "minimal", frequency_penalty, presence_penalty, candidate_count, префилл ходов модели

Исправьте запрос; ретраи бессмысленны

403 PERMISSION_DENIED

Неверный, отсутствующий или ограниченный GEMINI_API_KEY, либо у проекта нет доступа к модели

Переэкспортируйте ключ; проверьте, что он задан, не ограничен для этого API и не закоммичен в git

429

Лимит запросов на вашем тарифе, часто при пакетном извлечении

Ретрай с экспоненциальным бэкофом и джиттером; подумайте о распределении нагрузки

503

Временная перегрузка на стороне Google

Тот же бэкоф с джиттером; алертите только если длится дольше нескольких минут

Ещё 2 момента:

  • Задавайте явные таймауты клиента при сочетании thinking_level: "high" с длинными циклами инструментов, потому что «зависший» запрос хуже упавшего, а дополнительная скрупулёзность 3.8 делает длинные рассуждения более вероятными, а не менее. 

  • И логируйте interaction.id в каждом запросе; это ваш хэндл для последующего получения, отладки или удаления сохранённых взаимодействий.

Заключение

Всё в этой статье сводится к трём сдвигам. Interactions API изменил конвенцию вызова, thinking_level заменил все прежние «крутилки» семплирования, а серверное состояние через previous_interaction_id и сделало как follow‑up по PDF, так и цикл инструментов «в один ход», а не упражнение по воспроизведению истории. Gemini 3.8 Flash ничего из этого интерфейса не менял; он изменил, насколько усердно модель работает внутри, поэтому измерения в этой статье сделаны заново на 3.8, а не перенесены с 3.7.

Прежде чем принимать мои рекомендации по уровням на веру, прогоните скрипт сравнения на задаче из вашего бэклога; уровень, победивший на гонке повторного списания, может проиграть на вашей генерации SQL. 

Когда одиночных вызовов API уже недостаточно и вам нужны продакшен‑системы ИИ, наш трек Associate AI Engineer for Developers покрывает весь путь, а трек Associate AI Engineer for Data Scientists делает то же с точки зрения данных.

FAQs

Какой пакет Python установить для Gemini 3.8 Flash?

Установите google-genai через pip (pip install -U google-genai). Более старая библиотека google-generativeai — легаси и падает, если передать конфигурацию Gemini 3.x.

Поддерживает ли Gemini 3.8 Flash temperature, top_p или top_k?

Нет. Параметры семплирования в Gemini 3.x мертвы, а 3.8 дополнительно выбрасывает явную ошибку API для frequency_penalty, presence_penalty и candidate_count. Управление поведением вывода осуществляется через thinking_level.

Какие значения thinking_level принимает Gemini 3.8 Flash?

Принимаются значения low, medium (по умолчанию) и high. Значение minimal недопустимо и возвращает ошибку валидации API.

Как Google тарифицирует токены рассуждений в Gemini 3.8 Flash?

Google считает токены «мыслей» как обычные выходные токены по $3.75 за 1 млн в период стартового прайсинга, который заканчивается 31 декабря 2026 года. Google также отмечает, что 3.8 может тратить больше токенов рассуждений на более высоких уровнях усилий, так что вы платите за дополнительные циклы верификации.

Что такое Gemini 3.8 Flash Cyber и могу ли я его использовать?

Это вариант для кибербезопасности, настроенный на поиск уязвимостей и автопатчинг. Он недоступен в публичном API; доступ ограничен одобренными защитниками через программу Fairwind от Google. Обычные разработчики используют gemini-3.8-flash.

Темы
Искусственный интеллект
Большие языковые модели

Изучайте ИИ с DataCamp!

Course

Introduction to Google Workspace with Gemini

30 мин
2.2K
You learn about the key features of Gemini and how they can be used to improve productivity and efficiency in Google Workspace.
ПодробнееRight Arrow
Начать Курс
Смотрите большеRight Arrow