API429 / LangChain Python

LangChain с API429: ChatOpenAI и точное тело запроса

Для простого текстового обращения из LangChain Python здесь используется ChatOpenAI с явным base_url API429 и моделью gemini-3.8-flash. Пример фиксирует Chat Completions и отключает автоматические повторы SDK. Особое внимание уделено сериализации max_tokens: одноимённый параметр конструктора не обязательно отправляет поле с тем же именем. Удалённая генерация этим руководством не подтверждается.

Настройка сверена с публичной документацией приложения и API429. Полный запуск в LangChain Python, импорт в установленный клиент и агентные сценарии здесь не подтверждены. Начните с короткого несекретного запроса и проверьте ответ в своей версии.

Параметры подключения

Протокол
OpenAI Chat Completions
Режим соединения
LangChain ChatOpenAI
Base URL
https://gateway.api429.com/v1
Точный ID для проверки
gemini-3.8-flash

Доступ конкретного ключа проверяйте через GET /v1/models. Публичная карточка модели не гарантирует её доступность в приложении. Храните ключ в предусмотренном приложением защищённом хранилище или в окружении текущей сессии. Не передавайте значение ключа аргументом команды и не сохраняйте его в общих файлах проекта.

Отдельное окружение и фиксированный пакет

Подготовьте отдельное виртуальное окружение Python версии 3.10 или новее и установите langchain-openai==1.7.2. Фиксация версии нужна потому, что SDK меняет поля при построении HTTP-запроса. Перед обновлением повторите проверку фактического тела и поведения при ошибках; пример для другой версии нельзя считать эквивалентным только по совпадению имён аргументов. Не устанавливайте пакет поверх рабочего окружения без обычной проверки зависимостей проекта.

Используется адаптер ChatOpenAI из langchain_openai, а не Google-адаптер. Он отправляет OpenAI-совместимый запрос к API429 с точным ID модели Google. Из этого не следует доступность всех возможностей OpenAI или нативного Google SDK. Отдельные инструменты, embeddings, Responses, мультимодальность и агентные графы требуют собственных контрактов и проверок. Начальный пример намеренно ограничен одним текстовым invoke без внешних интеграций.

Параметры соединения и секрет

Укажите base_url=https://gateway.api429.com/v1, api_key через скрытый getpass и use_responses_api=False. Последний параметр явно сохраняет путь Chat Completions. max_retries=0 отключает автоматические повторы клиента; timeout=30 задаёт ожидание сети, а не гарантированный предел оплаты или количества токенов. streaming=False и stream_usage=False убирают потоковый режим и дополнительные stream options из начального запроса. temperature=None оставляет это поле незаданным.

Не используйте переменную OPENAI_API_KEY от другого проекта как случайный источник авторизации. В примере ключ передаётся явно после скрытого ввода, без сохранения в исходнике и аргументах процесса. Перед запуском проверьте настройки трассировки своего окружения: сторонние callbacks и наблюдаемость могут сохранять запросы и ответы. Для первой проверки используйте только короткий несекретный текст и не печатайте заголовки или полное содержимое исключений.

Почему max_tokens передаётся через extra_body

У проверенного пакета параметр конструктора max_tokens преобразуется в max_completion_tokens. Для опубликованного Chat Completions примера API429 нужен max_tokens, поэтому конструктор оставляет этот параметр незаданным, а extra_body содержит только max_tokens: 256. Одновременно задавать оба варианта не следует: это меняет проверенное тело и создаёт неоднозначность. Не переносите такую рецептуру в Responses или нативный Google метод, где используются другие поля.

Реальный пакет версии 1.7.2 проверен offline через httpx.MockTransport при заблокированных сетевых сокетах. Зафиксирован POST /v1/chat/completions с model, stream, messages и max_tokens. Контрольный вариант с constructor max_tokens отправил max_completion_tokens. Отдельный mock-ответ 429 вызвал ровно одно обращение при max_retries=0. Это доказательство сериализации и политики повторов в изолированном тесте, а не выполнения запроса шлюзом или успешной генерации текста.

Ручной запуск, диагностика и бюджет

Перед invoke проверьте доступ точного ID для своего ключа по документации API429. Первый запуск отправит платный запрос; успешная установка пакета и разбор Python-синтаксиса его не заменяют. При 401 проверьте выбранный ключ, при 404 — base URL и путь, при ошибке поля — фактическое тело с удалёнными чувствительными данными. При 429 остановите ручную проверку и выясните причину ограничения, не добавляя скрытый цикл повторов в прикладной код.

После ответа сопоставьте использование с личным кабинетом и отдельно решите, нужен ли более длинный контекст. Числовой пример ниже считает гипотетическую нагрузку именно модели Google; он не заимствует ставки OpenAI из названия адаптера. timeout и max_tokens не ограничивают суммарные расходы приложения при последующих вызовах. Кеш, инструменты, сервисы наблюдаемости и дополнительные действия цепочки требуют отдельной оценки и не входят в этот начальный пример.

Настройки и примеры

Создание окружения и фиксированная версия

python3 -m venv .venv
. .venv/bin/activate
python -m pip install langchain-openai==1.7.2

Один ручной Chat Completions запрос; запуск оплачивается

"""Public example syntax checked only; running this file sends a paid request."""
from getpass import getpass
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model='gemini-3.8-flash',
    base_url='https://gateway.api429.com/v1',
    api_key=getpass('API429 key: '),
    use_responses_api=False,
    max_retries=0,
    timeout=30,
    streaming=False,
    stream_usage=False,
    temperature=None,
    extra_body={'max_tokens': 256},
)
answer = model.invoke('Ответь одним предложением: что такое API?')
print(answer.content)

Расход и следующие шаги

Гипотетический объём за час: 30 запросов к gemini-3.8-flash, каждый с 5 000 обычных входных и 512 выходными токенами, — около $0.05 по текущим ставкам API429. Кеш, инструменты, повторы, подписка приложения и другие сборы не включены. Дата каталога: .

Фактический расход зависит от числа запросов, длины контекста и ответов — смотрите его в личном кабинете API429.

Общий протокол OpenAI Compatible · Документация API429 · Помощь и диагностика

Оплата и тест $10

  • Карта российского банка. Пополнение баланса в личном кабинете.
  • Счёт для юрлиц. Безналичная оплата с закрывающими документами.
  • USDT и TON. Пополнение криптовалютой.

Тест $10. Подпишитесь на наш Telegram-канал через бота — получите $10 на баланс для первых запросов. Получить $10 в боте

Частые вопросы

Почему модель Gemini подключается через ChatOpenAI?

Здесь выбирается OpenAI-совместимый Chat Completions контракт API429. Имя адаптера определяет формат запроса, а точный model и семейство Google определяют выбранную модель и расчёт токенов.

Почему нельзя задать max_tokens прямо в ChatOpenAI?

В проверенной версии 1.7.2 конструктор переименовывает его в max_completion_tokens. Пример оставляет параметр конструктора незаданным и передаёт max_tokens через extra_body.

Что именно доказала offline-проверка LangChain?

Реальный пакет сформировал ожидаемый HTTP-запрос в MockTransport при заблокированной сети. Контроль подтвердил переименование поля, а mock 429 — одно обращение. Удалённая генерация не выполнялась.

Является ли timeout=30 пределом бюджета?

Нет. Timeout задаёт ожидание запроса, а не оплату или количество следующих вызовов. Проверяйте usage и фактический расход; max_retries=0 отключает только автоматические повторы клиента.

Источники

Справочник приложения определяет его интерфейс и ограничения; документация API429 — адреса, авторизацию и клиентские методы. Дата сверки: .

Telegram