Гайд · TNWS AI
Как ограничить число обращений агента Pydantic AI к модели через request_limit
Ограничение числа модельных шагов Pydantic AI: UsageLimits(request_limit), обработка исключения и тест на цикл инструмента.
Что решаем и кому подходит
Поисковый вопрос: «как ограничить число обращений к модели Pydantic AI request_limit». Предотвратить непредвиденно длинную цепочку вызовов модели при работе с инструментами. В официальном руководстве UsageLimits(request_limit=...) передаётся в run_sync либо другие методы запуска; когда следующий запрос нарушил бы лимит, возникает UsageLimitExceeded. Это ограничение числа модельных запросов в пределах одного запуска, а не месячная квота провайдера и не гарантированная верхняя граница денежных расходов. Инструкция опирается на актуальную официальную документацию Pydantic AI, проверенную 20 сентября 2026 года. Примеры предназначены для Python 3.10+ с пакетом pydantic-ai. Используйте модель и учётные данные, доступные именно вашему аккаунту; пример идентификатора из документации не является обещанием доступа. Демонстрационные коды, статусы и суммы вымышлены.
Порядок действий
- Задайте у агента только читающий инструмент и инструкции применять его при необходимости.
- При вызове агента передайте
UsageLimits(request_limit=3); конкретное значение здесь — вымышленная политика приложения, а не параметр провайдера. - Поймайте
UsageLimitExceededи отдайте пользователю нейтральный сигнал о невозможности завершить запрос. - Проверьте обычный короткий вопрос и тест, который может зациклить инструмент; отдельно измерьте число фактических запросов.
До сетевого запуска установите pydantic-ai и настройте ключ провайдера предусмотренным им способом. Примеры не содержат действующих секретов. Для воспроизводимого теста зафиксируйте версии Python, пакета и выбранной модели; после обновления снова выполните как удачный, так и отрицательный сценарий. Вызов run_sync использован для наглядного скрипта вне уже работающего асинхронного цикла. Там, где проект асинхронный, применяйте документированный await agent.run(...) и управляйте ресурсами на стороне приложения.
Готовый шаблон для запуска
from pydantic_ai import Agent, UsageLimitExceeded, UsageLimits
agent = Agent("openai:gpt-5.2",
instructions="Отвечай на вопрос; при нехватке данных не придумывай факты.")
try:
result = agent.run_sync("Что означает код R-7? Если справки нет, скажи об этом.",
usage_limits=UsageLimits(request_limit=3))
except UsageLimitExceeded:
print("Не удалось завершить запрос в установленный предел шагов")
else:
print(result.output)
print(result.usage.requests)
Конкретный вход и ожидаемый результат
Вход «Что означает код R-7?» без справочника. При отсутствии подтверждённых сведений содержательно ожидается признание неопределённости, а не придуманная расшифровка. Если агенту потребовалось больше трёх модельных обращений, приложение получает исключение и возвращает безопасное сообщение вместо неполного ответа. Само число 3 — лишь значение учебного ограничения, выбранное владельцем приложения. В производственной системе предел настраивают по тестовым траекториям и требованиям к обслуживанию.
Почему этот способ работает
Счётчик requests в сведениях об использовании помогает проверить, сколько раз модель была запрошена во время успешно завершённого запуска. Предел действует на один запуск, поэтому злоумышленник может начать много новых запусков; отдельно нужны учёт запросов пользователя, тайм-ауты и ограничение частоты на границе сервиса. Если агент вызывает инструмент, один пользовательский вопрос может включать несколько обращений к модели: первоначальный выбор инструмента, ответ инструмента и финальную генерацию. Чрезмерно маленький лимит способен оборвать нормальное действие. Для операций с реальными последствиями такая остановка не откатывает уже выполненные внешние действия; делайте их идемпотентными и контролируемыми.
Пограничный случай и предметная проверка
В тестовом журнале записывайте последовательность вызовов инструмента и число модельных запросов, но не весь закрытый текст клиента. Сначала выясните базовое число шагов на успешных примерах: агент, которому для чтения справки обычно требуется два обращения, будет плохо работать с лимитом в один. Затем проверьте патологические вопросы и недоступную справку; так станет понятно, где ограничение защищает от зацикливания. Этот механизм не заменяет контроль бюджета всей организации. Для длительного диалога каждый новый вызов агента имеет собственный лимит, поэтому суммарный объём работы отслеживайте отдельно на уровне приложения.
Критерии приёмки
- Обычный запрос либо завершается с количеством
requestsв пределах заданного, либо обрабатывается как исключение. - Приложение не показывает пользователю трассировку с ключами и внутренними объектами.
- Серия независимых запросов пользователя контролируется отдельной внешней квотой, а не считается защищённой этим лимитом.
Проверка успешного выполнения Python-программы не равна проверке верности ответа нейросети. Сопоставьте результат с входом и с доверенным источником данных, затем повторите тест на отрицательном примере. Формулировка текста может отличаться от образца; условия приёмки описывают наблюдаемое поведение, которое действительно нужно пользователю. Если один критерий не соблюдён, не скрывайте сбой повтором без ограничения: сохраните минимальный безопасный воспроизводимый пример и исправьте соответствующий слой — данные, схему, инструмент, инструкцию или обработку ошибки.
Частые ошибки и чего не делать
- Не путайте
request_limitс ограничением объёма ответа или стоимости: это разные показатели. - Не увеличивайте предел автоматически после исключения без понимания причины повторов.
- Не возвращайте случайный частичный ответ после исчерпания лимита как проверенный финальный.
Вопросы и ответы
Что именно считает request_limit?
Запросы к модели внутри одного выполнения агента.
Гарантирует ли это фиксированную цену?
Нет; цена зависит от модели, числа токенов и тарифа.
Что делать при превышении?
Обработать UsageLimitExceeded и завершить пользовательский запрос контролируемо.
Официальные источники
Частые вопросы
Что именно считает request_limit?
Запросы к модели внутри одного выполнения агента.
Гарантирует ли это фиксированную цену?
Нет; цена зависит от модели, числа токенов и тарифа.
Что делать при превышении?
Обработать `UsageLimitExceeded` и завершить пользовательский запрос контролируемо.
Читайте также
Как дать агенту Pydantic AI инструмент чтения справки без права записи
Инструмент tool_plain для чтения вымышленной справки: минимальные полномочия, пример вопроса, проверка вызова и защита от ложных ответов.
Как извлечь поля заявки из русского письма через Pydantic AI и output_type
Пошаговое извлечение темы и номера заявки в Pydantic AI: схема BaseModel, конкретное письмо, проверка полей и ошибки, которые не исправит одна валидация.
Как отклонить фактически неверный ответ Pydantic AI через output_validator
Выходной валидатор Pydantic AI на примере суммы заказа: проверка суммы по каталогу, ModelRetry, границы повторов и критерий приёмки.
Комментарии
Пока тихо. Скажите первое слово