Гайд · TNWS AI
Почему лимит токенов Pydantic AI не всегда останавливает запрос до отправки
Разбираем UsageLimits для токенов Pydantic AI: когда проверка происходит после ответа, как отдельно ограничить вход одного запроса и чего не обещать.
Что решаем и кому подходит
Поисковый вопрос: «почему Pydantic AI input_tokens_limit может сработать после запроса». Не принять лимит токенов за гарантию того, что большой текст никогда не уйдёт провайдеру. Официальная документация указывает, что по умолчанию per_request_input_tokens_limit сравнивается с учтёнными провайдером токенами уже после ответа; слишком большой запрос при этом мог быть отправлен и учтён. Предварительный подсчёт доступен через count_tokens_before_request=True, однако его применимость зависит от модели и механизма подсчёта. Отдельно существуют лимиты суммарного входа и выхода за один запуск. Инструкция опирается на актуальную официальную документацию Pydantic AI, проверенную 20 сентября 2026 года. Примеры предназначены для Python 3.10+ с пакетом pydantic-ai. Используйте модель и учётные данные, доступные именно вашему аккаунту; пример идентификатора из документации не является обещанием доступа. Демонстрационные коды, статусы и суммы вымышлены.
Порядок действий
- Определите, что вы ограничиваете: размер конкретного входного контекста или суммарное использование одного запуска.
- Для проверки одного запроса передайте
UsageLimits(per_request_input_tokens_limit=...); в тесте поставьте небольшой порог и обработайте исключение. - Если важно проверять до передачи запроса, изучите и включите документированную предварительную оценку, отдельно протестировав её с выбранной моделью.
- Дополните защиту локальным ограничением длины пользовательского текста и правилом работы с длинной историей.
До сетевого запуска установите pydantic-ai и настройте ключ провайдера предусмотренным им способом. Примеры не содержат действующих секретов. Для воспроизводимого теста зафиксируйте версии Python, пакета и выбранной модели; после обновления снова выполните как удачный, так и отрицательный сценарий. Вызов run_sync использован для наглядного скрипта вне уже работающего асинхронного цикла. Там, где проект асинхронный, применяйте документированный await agent.run(...) и управляйте ресурсами на стороне приложения.
Готовый шаблон для запуска
from pydantic_ai import Agent, UsageLimitExceeded, UsageLimits
agent = Agent("openai:gpt-5.2")
limits = UsageLimits(per_request_input_tokens_limit=100,
count_tokens_before_request=True)
try:
result = agent.run_sync("Кратко объясни, что означает проверка входа.",
usage_limits=limits)
except UsageLimitExceeded:
print("Контекст превысил заданный предел")
else:
print(result.output)
print(result.usage.input_tokens)
Конкретный вход и ожидаемый результат
Вход — короткий русский вопрос длиной в одну строку и порог 100 токенов в учебном коде. Ожидается, что короткий пример пройдёт при подходящей модели, но фактическое число токенов зависит также от инструкции, служебных данных и токенизации. Для отрицательного теста приложите к истории большой вымышленный текст и проверьте обработку UsageLimitExceeded. Не рассчитывайте число токенов через количество символов: эта величина не соответствует токенизатору модели.
Почему этот способ работает
У лимитов разные моменты проверки. Суммарный вход за несколько запросов — один критерий, максимальный вход одного конкретного запроса — другой; при повторной передаче истории суммарный счёт может расти быстрее, чем длина нового вопроса. В документации прямо отмечена особенность постфактум-проверки у провайдерского счётчика по умолчанию. Поэтому утверждение «при лимите 100 токенов сервис никогда не получит 101-й токен» без проверки выбранного режима будет ложным. Даже предварительная оценка требует реального теста на модели, особенно если в запрос входят инструменты, изображения или нестандартные сообщения. Стоимость также не равна одному числу токенов и регулируется отдельно.
Пограничный случай и предметная проверка
Проведите три измерения на своём приложении: вопрос без истории, тот же вопрос с полной историей и тот же вопрос после обработки истории вашим процессором. Сравните показатель input_tokens и время выполнения. Если история содержит большие инструментарные ответы, простое удаление части текста может разорвать пары вызова и результата инструмента; изменять историю следует с учётом её структуры. Храните короткий тестовый протокол для каждой модели после обновления библиотеки. Цель практики — управляемая ошибка и предсказуемая политика передачи данных, а не создание видимости математически точного тарифа по одному порогу.
Критерии приёмки
- Короткий вопрос или завершается контролируемо, или даёт понятную ошибку по реальному счётчику.
- Для большого входа предусмотрена обработка исключения; предварительную отсечку проверяют отдельно в тестовой среде.
- В интерфейсе не обещается невозможность отправки большого запроса при режиме проверки после ответа.
Проверка успешного выполнения Python-программы не равна проверке верности ответа нейросети. Сопоставьте результат с входом и с доверенным источником данных, затем повторите тест на отрицательном примере. Формулировка текста может отличаться от образца; условия приёмки описывают наблюдаемое поведение, которое действительно нужно пользователю. Если один критерий не соблюдён, не скрывайте сбой повтором без ограничения: сохраните минимальный безопасный воспроизводимый пример и исправьте соответствующий слой — данные, схему, инструмент, инструкцию или обработку ошибки.
Частые ошибки и чего не делать
- Не используйте число символов как точный эквивалент числа токенов.
- Не путайте
output_tokens_limitсper_request_input_tokens_limit. - Не рассчитывайте на лимиты Pydantic AI как на единственную защиту от очень больших HTTP-тел запроса.
Вопросы и ответы
Всегда ли лимит срабатывает до API-вызова?
Нет; документированная проверка по умолчанию может выполняться после ответа.
Как проверять до отправки?
Использовать поддерживаемый предварительный подсчёт и протестировать конкретную модель.
Считает ли он историю?
Да, вход конкретного обращения включает переданный контекст, не только последнюю фразу.
Официальные источники
Частые вопросы
Всегда ли лимит срабатывает до API-вызова?
Нет; документированная проверка по умолчанию может выполняться после ответа.
Как проверять до отправки?
Использовать поддерживаемый предварительный подсчёт и протестировать конкретную модель.
Считает ли он историю?
Да, вход конкретного обращения включает переданный контекст, не только последнюю фразу.
Читайте также
Как дать агенту Pydantic AI инструмент чтения справки без права записи
Инструмент tool_plain для чтения вымышленной справки: минимальные полномочия, пример вопроса, проверка вызова и защита от ложных ответов.
Как извлечь поля заявки из русского письма через Pydantic AI и output_type
Пошаговое извлечение темы и номера заявки в Pydantic AI: схема BaseModel, конкретное письмо, проверка полей и ошибки, которые не исправит одна валидация.
Как ограничить число обращений агента Pydantic AI к модели через request_limit
Ограничение числа модельных шагов Pydantic AI: UsageLimits(request_limit), обработка исключения и тест на цикл инструмента.
Комментарии
Пока тихо. Скажите первое слово