Гайд · TNWS AI
Как разобрать ошибку агента smolagents через replay и память
Диагностика smolagents через replay, memory.steps и get_full_steps: что смотреть, как обезличить данные и почему трасса не доказывает качество.
Задача и применимость
Актуальный поисковый запрос: «как посмотреть шаги и ошибки агента smolagents replay memory». Понять, на каком шаге агент выбрал неверный инструмент или аргумент. Официальная документация предоставляет agent.replay() для красивого повтора, agent.memory.steps и agent.memory.get_full_steps() для программного доступа. replay(detailed=True) резко увеличивает объём лога и предназначен только для отладки. Память может содержать пользовательские данные и ответы инструментов. Материал сверён 26 сентября 2026 года с официальной документацией Hugging Face smolagents. Документация прямо помечает API экспериментальным, поэтому перед производственным использованием закрепите версию пакета и повторите тесты. Примеры рассчитаны на Python 3.10+; доступ к конкретной модели и провайдеру проверяется в вашем аккаунте, а не предполагается этой инструкцией.
Пошаговая настройка
- Воспроизведите сбой на вымышленном минимальном входе.
- После run вызовите обычный
replay()и найдите первый расходящийся шаг. - Для автоматического отчёта получите полные шаги и извлеките только безопасные тип, ошибку и имя действия.
- Исправьте описание tool или обработку аргумента и повторите тот же эталон.
До сетевого запуска установите smolagents, настройте HF_TOKEN или другой документированный способ аутентификации и вынесите идентификатор модели в HF_MODEL_ID. Не вставляйте действующий токен в код, prompt, скриншот или статью. Сначала выполните детерминированную часть примера без модели, затем интеграционный run. Так ошибка схемы или бизнес-логики не смешивается с изменчивым поведением LLM.
Готовый шаблон
import os
from smolagents import InferenceClientModel, ToolCallingAgent
model = InferenceClientModel(model_id=os.environ.get("HF_MODEL_ID", "Qwen/Qwen3-Next-80B-A3B-Thinking"), token=os.getenv("HF_TOKEN"))
agent = ToolCallingAgent(tools=[], model=model, max_steps=2)
agent.run("Повтори учебную строку R-7.")
agent.replay()
steps = agent.memory.get_full_steps()
print("Число шагов:", len(steps))
Конкретный вход и ожидаемые данные
Вход «Повтори учебную строку R-7» не требует внешних данных. Ожидается, что после выполнения в памяти есть шаги, а replay() их показывает. Если в рабочем сценарии искали R-7, но tool получил R-8, важен первый шаг с неправильным аргументом; финальная фраза лишь следствие. В отчёт не нужно копировать полный системный промпт, токены или персональные данные.
Почему схема работает
Память разделяет постановку задачи, действия, наблюдения и ошибки. Это позволяет диагностировать выбор инструмента отдельно от сбоя самого инструмента. Однако внутренний ход не является достоверным объяснением причин модели и может содержать сгенерированный текст. Используйте его как техническую трассу событий. Для метрик лучше собирать заранее определённые поля через callbacks или telemetry, а не парсить оформление replay().
Фактическая проверка и пограничный случай
Сравнивайте два запуска по структурным событиям: имя вызванного инструмента, аргументы, тип ошибки и количество шагов. Текст размышлений между версиями модели может меняться без регрессии продукта. Перед сохранением заменяйте реальные идентификаторы тестовыми и обрезайте большие tool outputs. Если проблема касается доступа, не помещайте в отладочный отчёт секрет, который как раз должен был быть скрыт от агента.
Протокол воспроизводимости
Для каждого прогона запишите четыре независимых артефакта: точный обезличенный вход, ожидаемое действие, фактическое действие и предметно правильный результат. Не ограничивайтесь снимком финального ответа: он не показывает, был ли вызван нужный инструмент. Повторите опыт не менее трёх раз на одной модели с одинаковыми настройками, затем отдельно после смены версии. В отчёте различайте ошибку маршрутизации, неверный аргумент, сбой Python-кода и неподтверждённую генерацию. Если результат нестабилен, не выбирайте удачный прогон вручную: укажите долю успеха на фиксированном наборе. Настройки температуры и провайдера фиксируйте только если они действительно переданы вашему model-клиенту. Такой протокол позволяет повторить вывод и не превращает единичный удачный ответ в обещание качества.
Синтаксис Python проверяется до публикации через ast.parse. Выполнение с реальной моделью здесь не заявляется: без учётных данных нельзя честно подтвердить доступность конкретного inference provider и поведение модели. Проверяемая часть примера выполняется локально там, где она не требует LLM. Для сетевой части заранее запишите модель, версию smolagents, вход, ожидаемый tool call и предметный эталон, затем сохраните обезличенную трассу.
Критерии приёмки
- Минимальный пример воспроизводит сбой или явно показывает его отсутствие.
- Найден первый неверный вызов, а не только последний плохой ответ.
- Диагностический отчёт обезличен и не содержит секретов или полного пользовательского текста.
Успешное завершение Python-процесса не равно правильному ответу агента. Сверяйте три слоя отдельно: корректность аргументов tool, фактическое наблюдение из доверенного кода и соответствие финальной фразы этому наблюдению. Если хотя бы один слой не прошёл, результат не должен автоматически попадать в CRM, базу знаний или действие с побочным эффектом.
Типичные ошибки и чего не делать
- Не включайте
detailed=Trueв постоянное продуктивное логирование. - Не принимайте сгенерированное рассуждение за доказанную причину решения.
- Не сохраняйте память всех пользователей без политики срока хранения.
Не увеличивайте число шагов и повторов как универсальное лечение. Сначала найдите первый неверный вызов. Не обещайте одинаковое поведение другой модели или будущей версии библиотеки. Все коды и статусы в примерах вымышлены; заменяя их реальными, соблюдайте авторизацию, минимизацию данных и правила хранения журналов.
FAQ
Что делает replay?
Печатает удобное повторное представление шагов агента.
Когда нужен detailed=True?
Только для точечной отладки: лог становится значительно больше.
Как получить шаги программно?
Через объект памяти, включая get_full_steps() в текущей документации.
Официальные источники
Частые вопросы
Что делает replay?
Печатает удобное повторное представление шагов агента.
Когда нужен detailed=True?
Только для точечной отладки: лог становится значительно больше.
Как получить шаги программно?
Через объект памяти, включая `get_full_steps()` в текущей документации.
Читайте также
Как ограничить число шагов агента smolagents через max_steps
Настройка max_steps в smolagents на читающем инструменте: что именно ограничивается, тест успешного запроса, исчерпание бюджета и критерии.
Как проверить финальный ответ smolagents через final_answer_checks
Финальная проверка ответа smolagents на обязательную ссылку на код: сигнатура callback, точный пример, пределы булевой проверки и ошибки.
Как сбросить память smolagents между пользователями
Сброс memory в smolagents через run(reset=True): два пользователя, тест на отсутствие старого маркера, продолжение reset=False и правила изоляции.
Комментарии
Пока тихо. Скажите первое слово