Гайд · TNWS AI
Как сбросить память smolagents между пользователями
Сброс memory в smolagents через run(reset=True): два пользователя, тест на отсутствие старого маркера, продолжение reset=False и правила изоляции.
Задача и применимость
Актуальный поисковый запрос: «как очистить память агента smolagents перед новым диалогом». Не переносить контекст одного пользователя в запрос другого при повторном использовании объекта агента. В официальной сигнатуре run параметр reset по умолчанию равен True: разговор сбрасывается перед новой задачей. Значение False сохраняет продолжение предыдущего запуска и должно применяться только внутри явно той же авторизованной сессии. Метод reset памяти очищает шаги, сохраняя системный промпт. Материал сверён 26 сентября 2026 года с официальной документацией Hugging Face smolagents. Документация прямо помечает API экспериментальным, поэтому перед производственным использованием закрепите версию пакета и повторите тесты. Примеры рассчитаны на Python 3.10+; доступ к конкретной модели и провайдеру проверяется в вашем аккаунте, а не предполагается этой инструкцией.
Пошаговая настройка
- Назначьте каждому диалогу серверный идентификатор сессии и владельца.
- Для независимого запроса оставляйте
reset=Trueили создавайте отдельный экземпляр. - Используйте
reset=Falseтолько после проверки владельца и намеренного продолжения. - Проведите перекрёстный тест с двумя вымышленными маркерами и проверьте память перед ответом.
До сетевого запуска установите 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)
first = agent.run("Запомни учебный маркер ALPHA-7.", reset=True)
second = agent.run("Повтори только текущий маркер BETA-9.", reset=True)
print(first)
print(second)
assert "ALPHA-7" not in str(second)
Конкретный вход и ожидаемые данные
Первый независимый вход содержит ALPHA-7, второй — BETA-9. Вторая выдача не должна содержать ALPHA-7. Для отдельного положительного теста продолжения запустите вопрос о предыдущем маркере с reset=False в той же тестовой сессии. Качество запоминания модели не является механизмом авторизации; главный критерий — какой контекст приложение ей передало.
Почему схема работает
Значение по умолчанию защищает типичный независимый run, но утечка всё равно возможна, если приложение вручную передаст чужую историю, общий tool cache или данные из внешнего хранилища. Поэтому тестируйте весь маршрут сессии. Для параллельных запросов не делите изменяемую память одного агента без синхронизации и архитектурной изоляции. Системный промпт после reset остаётся, так что он не должен содержать пользовательские секреты.
Фактическая проверка и пограничный случай
Запустите конкурентный тест, где два запроса начинают работу почти одновременно, и убедитесь, что общая память не перемешалась. Простого последовательного assert недостаточно для многопоточного сервера. Если каждый запрос создаёт новый агент, проверьте, что общий retriever всё равно применяет tenant-фильтр. После ошибки или отмены запроса также сбрасывайте состояние согласно жизненному циклу, иначе незавершённый шаг может попасть в следующий диалог.
Протокол воспроизводимости
Для каждого прогона запишите четыре независимых артефакта: точный обезличенный вход, ожидаемое действие, фактическое действие и предметно правильный результат. Не ограничивайтесь снимком финального ответа: он не показывает, был ли вызван нужный инструмент. Повторите опыт не менее трёх раз на одной модели с одинаковыми настройками, затем отдельно после смены версии. В отчёте различайте ошибку маршрутизации, неверный аргумент, сбой Python-кода и неподтверждённую генерацию. Если результат нестабилен, не выбирайте удачный прогон вручную: укажите долю успеха на фиксированном наборе. Настройки температуры и провайдера фиксируйте только если они действительно переданы вашему model-клиенту. Такой протокол позволяет повторить вывод и не превращает единичный удачный ответ в обещание качества.
Синтаксис Python проверяется до публикации через ast.parse. Выполнение с реальной моделью здесь не заявляется: без учётных данных нельзя честно подтвердить доступность конкретного inference provider и поведение модели. Проверяемая часть примера выполняется локально там, где она не требует LLM. Для сетевой части заранее запишите модель, версию smolagents, вход, ожидаемый tool call и предметный эталон, затем сохраните обезличенную трассу.
Критерии приёмки
- Второй независимый ответ не содержит маркер первого пользователя.
- Продолжение с reset=False разрешается только для того же владельца сессии.
- Тест проверяет также внешние инструменты и кэши, а не только agent.memory.
Успешное завершение Python-процесса не равно правильному ответу агента. Сверяйте три слоя отдельно: корректность аргументов tool, фактическое наблюдение из доверенного кода и соответствие финальной фразы этому наблюдению. Если хотя бы один слой не прошёл, результат не должен автоматически попадать в CRM, базу знаний или действие с побочным эффектом.
Типичные ошибки и чего не делать
- Не ставьте
reset=Falseглобально для удобства чата всех пользователей. - Не используйте содержимое вопроса как единственное доказательство владельца сессии.
- Не помещайте персональные данные в постоянный системный промпт.
Не увеличивайте число шагов и повторов как универсальное лечение. Сначала найдите первый неверный вызов. Не обещайте одинаковое поведение другой модели или будущей версии библиотеки. Все коды и статусы в примерах вымышлены; заменяя их реальными, соблюдайте авторизацию, минимизацию данных и правила хранения журналов.
FAQ
Каково значение reset по умолчанию?
В текущей официальной сигнатуре run — True.
Когда нужен reset=False?
Для намеренного продолжения той же проверенной сессии.
Очищается ли system prompt?
Метод сброса памяти сохраняет системный промпт.
Официальные источники
Частые вопросы
Каково значение reset по умолчанию?
В текущей официальной сигнатуре `run` — True.
Когда нужен reset=False?
Для намеренного продолжения той же проверенной сессии.
Очищается ли system prompt?
Метод сброса памяти сохраняет системный промпт.
Читайте также
Как ограничить число шагов агента smolagents через max_steps
Настройка max_steps в smolagents на читающем инструменте: что именно ограничивается, тест успешного запроса, исчерпание бюджета и критерии.
Как проверить финальный ответ smolagents через final_answer_checks
Финальная проверка ответа smolagents на обязательную ссылку на код: сигнатура callback, точный пример, пределы булевой проверки и ошибки.
Как разобрать ошибку агента smolagents через replay и память
Диагностика smolagents через replay, memory.steps и get_full_steps: что смотреть, как обезличить данные и почему трасса не доказывает качество.
Комментарии
Пока тихо. Скажите первое слово