Гайд · TNWS AI
Как ограничить число шагов агента smolagents через max_steps
Настройка max_steps в smolagents на читающем инструменте: что именно ограничивается, тест успешного запроса, исчерпание бюджета и критерии.
Задача и применимость
Актуальный поисковый запрос: «как ограничить количество шагов агента smolagents max_steps». Поставить конечный бюджет многошаговому агенту и не выдавать остановку по лимиту за подтверждённый ответ. Официальная сигнатура MultiStepAgent содержит max_steps с текущим значением по умолчанию 20, а run допускает разовое переопределение max_steps. Лимит шагов не равен лимиту токенов, времени, стоимости или числу HTTP-запросов всей системы. Материал сверён 26 сентября 2026 года с официальной документацией Hugging Face smolagents. Документация прямо помечает API экспериментальным, поэтому перед производственным использованием закрепите версию пакета и повторите тесты. Примеры рассчитаны на Python 3.10+; доступ к конкретной модели и провайдеру проверяется в вашем аккаунте, а не предполагается этой инструкцией.
Пошаговая настройка
- Измерьте минимальное число шагов на простых эталонах.
- Установите консервативный
max_stepsв конструкторе агента. - Для отдельного запроса меняйте лимит через
run(..., max_steps=...)только по принятой политике. - Проверяйте память и результат: остановленный запуск не должен автоматически менять внешнее состояние.
До сетевого запуска установите smolagents, настройте HF_TOKEN или другой документированный способ аутентификации и вынесите идентификатор модели в HF_MODEL_ID. Не вставляйте действующий токен в код, prompt, скриншот или статью. Сначала выполните детерминированную часть примера без модели, затем интеграционный run. Так ошибка схемы или бизнес-логики не смешивается с изменчивым поведением LLM.
Готовый шаблон
import os
from smolagents import InferenceClientModel, ToolCallingAgent, tool
@tool
def read_status(code: str) -> str:
"""Читает статус.
Args:
code: Полный учебный код.
"""
return {"R-7": "готово"}.get(code, "не найдено")
model = InferenceClientModel(model_id=os.environ.get("HF_MODEL_ID", "Qwen/Qwen3-Next-80B-A3B-Thinking"), token=os.getenv("HF_TOKEN"))
agent = ToolCallingAgent(tools=[read_status], model=model, max_steps=3, return_full_result=True)
result = agent.run("Проверь R-7 по инструменту.")
print(result)
Конкретный вход и ожидаемые данные
Успешный вход — «Проверь R-7 по инструменту», эталон — «готово». Негативный сценарий создают не выдуманным статусом, а задачей, для которой доступного инструмента недостаточно. Ожидается контролируемое завершение без записи данных. Конкретное число модельных обращений и форма RunResult зависят от версии и модели; тестируйте наблюдаемое поле результата в закреплённой версии.
Почему схема работает
Один шаг агента состоит из рассуждения, действия и наблюдения в цикле ReAct. Ограничение предотвращает бесконечное продолжение, но слишком малое число мешает корректному ответу. Увеличение лимита не исправляет отсутствующий инструмент или неверное описание. Для внешних сервисов дополнительно нужны таймауты, квоты и отмена на уровне HTTP-клиента. Если tool имеет побочный эффект, каждый повтор должен быть идемпотентным.
Фактическая проверка и пограничный случай
В отчёте теста храните распределение шагов, а не только среднее: один редкий вопрос на двадцать шагов может скрыться за средним в два. Сначала исправьте инструкции и инструменты для аномалий, затем выбирайте порог. После обновления модели повторите набор, потому что стратегия вызовов меняется. Не привязывайте пользовательское обещание времени ответа напрямую к max_steps: один внешний tool способен ждать дольше всех модельных шагов.
Протокол воспроизводимости
Для каждого прогона запишите четыре независимых артефакта: точный обезличенный вход, ожидаемое действие, фактическое действие и предметно правильный результат. Не ограничивайтесь снимком финального ответа: он не показывает, был ли вызван нужный инструмент. Повторите опыт не менее трёх раз на одной модели с одинаковыми настройками, затем отдельно после смены версии. В отчёте различайте ошибку маршрутизации, неверный аргумент, сбой Python-кода и неподтверждённую генерацию. Если результат нестабилен, не выбирайте удачный прогон вручную: укажите долю успеха на фиксированном наборе. Настройки температуры и провайдера фиксируйте только если они действительно переданы вашему model-клиенту. Такой протокол позволяет повторить вывод и не превращает единичный удачный ответ в обещание качества.
Синтаксис Python проверяется до публикации через ast.parse. Выполнение с реальной моделью здесь не заявляется: без учётных данных нельзя честно подтвердить доступность конкретного inference provider и поведение модели. Проверяемая часть примера выполняется локально там, где она не требует LLM. Для сетевой части заранее запишите модель, версию smolagents, вход, ожидаемый tool call и предметный эталон, затем сохраните обезличенную трассу.
Критерии приёмки
- Простой эталон завершается в установленном бюджете и использует справочник.
- Неразрешимая задача заканчивается управляемо, без бесконечного цикла.
- Лимит шагов документирован отдельно от лимитов токенов, времени и стоимости.
Успешное завершение Python-процесса не равно правильному ответу агента. Сверяйте три слоя отдельно: корректность аргументов tool, фактическое наблюдение из доверенного кода и соответствие финальной фразы этому наблюдению. Если хотя бы один слой не прошёл, результат не должен автоматически попадать в CRM, базу знаний или действие с побочным эффектом.
Типичные ошибки и чего не делать
- Не ставьте
max_steps=1без измерения реального цикла агента. - Не повышайте лимит после каждой ошибки автоматически.
- Не сохраняйте неполный финальный текст как проверенный бизнес-результат.
Не увеличивайте число шагов и повторов как универсальное лечение. Сначала найдите первый неверный вызов. Не обещайте одинаковое поведение другой модели или будущей версии библиотеки. Все коды и статусы в примерах вымышлены; заменяя их реальными, соблюдайте авторизацию, минимизацию данных и правила хранения журналов.
FAQ
Что ограничивает max_steps?
Число шагов цикла агента в данном запуске.
Можно ли изменить лимит на один run?
Да, официальная сигнатура run содержит аргумент max_steps.
Ограничивает ли он стоимость?
Лишь косвенно; токены, провайдерские вызовы и инструменты учитывают отдельно.
Официальные источники
Частые вопросы
Что ограничивает max_steps?
Число шагов цикла агента в данном запуске.
Можно ли изменить лимит на один run?
Да, официальная сигнатура run содержит аргумент max_steps.
Ограничивает ли он стоимость?
Лишь косвенно; токены, провайдерские вызовы и инструменты учитывают отдельно.
Читайте также
Как проверить финальный ответ smolagents через final_answer_checks
Финальная проверка ответа smolagents на обязательную ссылку на код: сигнатура callback, точный пример, пределы булевой проверки и ошибки.
Как разобрать ошибку агента smolagents через replay и память
Диагностика smolagents через replay, memory.steps и get_full_steps: что смотреть, как обезличить данные и почему трасса не доказывает качество.
Как сбросить память smolagents между пользователями
Сброс memory в smolagents через run(reset=True): два пользователя, тест на отсутствие старого маркера, продолжение reset=False и правила изоляции.
Комментарии
Пока тихо. Скажите первое слово