English translation is not available yet. Showing Russian content.
Как работает 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» без участия человека.
Алгоритм состоит из трёх шагов:
- Маскировка — в тексте определяются места, где вызов инструмента был бы полезен.
- Вызов API — для каждого замаскированного места реально вызывается инструмент и вставляется результат.
- Обучение — модель дообучается предсказывать последовательность токенов, соответствующую вызову инструмента, при этом 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. Пример работы в инференсе
Запрос пользователя: «Какое население у самого большого города Франции?»
Модель (уже обученная) генерирует:
- Сначала обычный текст: «Найду население...»
- Затем токены вызова:
[SEARCH_API(самый большой город Франции)] [SEARCH_RESULT(Париж)] - После получения результата (например, «Париж») модель продолжает: «население Парижа: [CALC_API(2.1e6)] [CALC_RESULT(2100000)]»
- Итог: «Около 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().
Шаги:
- Взять небольшой корпус текстов на русском (например, датасет википедийных предложений о времени и числах).
- Создать шаблоны:
[CALC_API(<expression>)] [CALC_RESULT(...)] [/CALC_API][TIME_API()] [TIME_RESULT(...)] [/TIME_API]
- Для каждого предложения сгенерировать 3–5 вариантов маскировки, вызвать инструменты, отобрать по perplexity.
- Собрать датасет (~1000 примеров), дообучить модель с маскированным loss.
- Протестировать: заставить модель генерировать ответы на вопросы вида «Сколько будет 15*4?», «Какое сейчас время?».
Ожидаемый результат Модель научится корректно вызывать инструменты в нужных местах и подставлять результаты, а не галлюцинировать.
13. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 895 | ReAct: рассуждения и действия |
| 896 | Планирование в агентных системах |
| 897 | Архитектура агентного RAG |
| 899 | Обучение агентов через reinforcement learning |
| 903 | Self-RAG и рефлексия агента |
14. Навигация
- Предыдущий: 897 — Архитектура агентного RAG
- Следующий: 899 — Обучение агентов через RL
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 897
- Следующий: 899
- Индекс: 00. Индекс разборов