Как работает Toolformer (обучение агента использованию инструментов)?

Краткий тезис

Toolformer — это метод, предложенный Meta AI, который обучает языковую модель самостоятельно вызывать внешние инструменты (API), используя только текстовые примеры и механизм самоконтроля (self-supervised learning). Модель учится решать, когда и какой инструмент вызвать, маскируя в тексте места для вызова API, подставляя реальные ответы от инструмента и дообучаясь предсказывать эти API-токены. В результате LLM становится «агентом», способным использовать калькулятор, поисковик, переводчик и другие инструменты без явного программирования вызовов.


1. Мотивация: зачем LLM инструменты?

Современные LLM отлично генерируют текст, но не умеют:

  • выполнять точные арифметические действия (2 + 3 * 5)
  • получать актуальную информацию (погода, новости)
  • работать со специализированными базами данных

Решение — предоставить модели доступ к инструментам (tools) через API. Ранние подходы (например, React) требовали ручного написания промптов или fine-tuning с размеченными данными. Toolformer устраняет эту потребность, автоматически генерируя обучающие примеры.


2. Ключевая идея Toolformer: обучение на самоконтроле

Самоконтроль (self-supervision) означает, что модель сама создаёт для себя обучающие пары «текст → call|вызов API» без участия человека.
Алгоритм состоит из трёх шагов:

  1. Маскировка — в тексте определяются места, где вызов инструмента был бы полезен.
  2. Вызов API — для каждого замаскированного места реально вызывается инструмент и вставляется результат.
  3. Обучение — модель дообучается предсказывать последовательность токенов, соответствующую вызову инструмента, при этом loss считается только на токенах API.

3. Шаг 1: Маскировка мест для вызова API

Для каждого инструмента (например, калькулятор или поисковик) заранее заготавливаются шаблоны:

  • Погода в [MSFT_API(город)] [MSFT_RESULT] ... [/MSFT_API]
  • Сколько будет 2 + 3? [CALC_API(2+3)] [CALC_RESULT] ... [/CALC_API]

Модель (обычно GPT-3) генерирует несколько вариантов, где может потребоваться инструмент. Каждый вариант оценивается по приросту вероятности правильного продолжения текста после подстановки реального результата API.
Если положительный прирост (то есть с вызовом API текст становится более вероятным) — пример оставляется.


4. Шаг 2: Вызов API и вставка результата

Для отобранных примеров реально вызывается соответствующий API.
Например:

  • Калькулятор: [CALC_API(123 * 456)] → результат 56088 → в тексте [CALC_RESULT(56088)]
  • Поиск: [SEARCH_API(столица Франции)] → результат Париж[SEARCH_RESULT(Париж)]

Результат вставляется в текст, создавая полный пример:

Текст: "Население Москвы — [CALC_API(12*1000000)] [CALC_RESULT(12000000)] [/CALC_API] человек."

5. Шаг 3: Обучение модели предсказывать API-токены

Модель дообучается на полученных примерах (например, с помощью стандартного next-token prediction).
Ключевой трюк: loss вычисляется только на токенах, относящихся к вызову API (токены|специальные токены [TOOL_...], аргументы, результат). Токены обычного текста не участвуют в loss.

Таким образом модель учится:

  • когда инициировать вызов (узнаёт контекст)
  • какие аргументы передать
  • интерпретировать ответ инструмента и продолжать генерацию

6. Архитектура Toolformer

КомпонентОписание
Базовая модельGPT-3 (175B) или smaller — fine-tuning на API-примерах
API-функцииКалькулятор (eval), поиск (Wikipedia), перевод, календарь, QA
API-токеныСпециальные токены <TOOL_CALL>, <TOOL_RESULT> (или [API]...[/API])
Механизм отбораСравнение perplexity до и после подстановки API-ответа
Функция потерьCross-entropy только на API-токенах

7. Пример работы в инференсе

Запрос пользователя: «Какое население у самого большого города Франции?»
Модель (уже обученная) генерирует:

  1. Сначала обычный текст: «Найду население...»
  2. Затем токены вызова: [SEARCH_API(самый большой город Франции)] [SEARCH_RESULT(Париж)]
  3. После получения результата (например, «Париж») модель продолжает: «население Парижа: [CALC_API(2.1e6)] [CALC_RESULT(2100000)]»
  4. Итог: «Около 2,1 млн человек.»

Все вызовы происходят во время генерации — модель приостанавливает генерацию, получает ответ от API и продолжает.


8. Преимущества и ограничения

Преимущества

  • Без разметки — не нужны датасеты с вызовами API, модель сама генерирует примеры.
  • Масштабируемость — можно добавить любой новый инструмент, достаточно предоставить шаблон и примеры текстов.
  • Интеграция — модель сама решает, когда использовать инструмент, а не по жёстким правилам.

Ограничения

  • Зависимость от базовой модели — качество отбора примеров зависит от способности LLM генерировать удачные вызовы.
  • Только «чтение» — Toolformer не умеет изменять внешнее состояние (вызовы без сайд-эффектов).
  • Без планирования — модель делает один вызов за раз, нет цепочки вызовов с зависимостями.
  • Риск спама — если модель научится вызывать API без пользы, это увеличит latency и cost.

9. Сравнение с другими подходами

ПодходПримерыТребует размеченных данных?ПланированиеСамостоятельный выбор инструмента
Toolformer (Meta)Калькулятор, поискНетНетДа
ReAct (Yao et al.)Рассуждения + действияДа (мысли-действия)Да (цепочка)Да (через промпт)
HuggingGPTКоординация моделейНет (но нужен промпт)Да (агент)Да (через LLM)
GPT-4 FunctionsОпределение функций в APIНет (промпт)НетДа (через описание)
ToolLLMМассовое fine-tuningДа (инструкции)ДаДа

Toolformer уникален тем, что не требует ручного написания промптов или разметки — обучение происходит полностью автоматически на текстовых корпусах.


10. Экспериментальные результаты (из статьи Meta)

  • Калькулятор: точность математических вычислений выросла с ~40% до ~99% на тестах.
  • Поиск: модель научилась запрашивать Wikipedia для ответа на вопросы, где внутренние знания недостаточны.
  • Совместное использование: в некоторых случаях модель вызывала последовательно несколько инструментов (например, поиск города → калькулятор расстояния).

Toolformer с 175B параметрами превзошёл исходную GPT-3 на бенчмарках, требующих внешних знаний, и при этом сохранил общие способности к генерации.


11. Ключевые термины для собеседования

ТерминОбъяснение
Self-supervised API callsАвтоматическая генерация примеров вызова инструментов, без человека
Perplexity gainРазница в вероятности текста с API-ответом и без неё — критерий отбора примеров
Loss maskingИгнорирование обычных токенов при backpropagation; обновляются только веса, отвечающие за API-токены
ToolformerМетод, который учит LLM вызывать API, используя только текстовые данные

12. Пет-проект для закрепления

Задача Реализовать упрощённую версию Toolformer для TinyLLaMA (или GPT-2), обучив её вызывать два инструмента: калькулятор и поиск текущего времени.

Инструменты

  • Python eval (безопасный)
  • API datetime.now().

Шаги:

  1. Взять небольшой корпус текстов на русском (например, датасет википедийных предложений о времени и числах).
  2. Создать шаблоны:
    • [CALC_API(<expression>)] [CALC_RESULT(...)] [/CALC_API]
    • [TIME_API()] [TIME_RESULT(...)] [/TIME_API]
  3. Для каждого предложения сгенерировать 3–5 вариантов маскировки, вызвать инструменты, отобрать по perplexity.
  4. Собрать датасет (~1000 примеров), дообучить модель с маскированным loss.
  5. Протестировать: заставить модель генерировать ответы на вопросы вида «Сколько будет 15*4?», «Какое сейчас время?».

Ожидаемый результат Модель научится корректно вызывать инструменты в нужных местах и подставлять результаты, а не галлюцинировать.


13. Связь с другими вопросами

ВопросТема
895ReAct: рассуждения и действия
896Планирование в агентных системах
897Архитектура агентного RAG
899Обучение агентов через reinforcement learning
903Self-RAG и рефлексия агента

14. Навигация

  • Предыдущий: 897 — Архитектура агентного RAG
  • Следующий: 899 — Обучение агентов через RL
  • Индекс: 00. Индекс разборов

Навигация