Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#962

Как fine-tune модель для Function Calling (tool use)? Какую структуру данных (JSON schema) использовать?

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

Fine-tuning для Function Calling (tool use) требует специальной структуры обучающих данных, где в системном сообщении передается JSON schema доступных инструментов, а в ответе модели ожидается строгий JSON с полями name и arguments. Ключевая особенность — поддержка multi-turn сценариев, где модель может вызывать несколько функций последовательно или параллельно. Оценка качества фокусируется на точности выбора функции, корректности типов аргументов и соблюдении схемы.

2. Fine-tuning процесс

2.1 Формат обучающих примеров

Используем формат OpenAI compatible для передачи данных:

training_examples = [
    {
        "messages": [
            {
                "role": "system",
                "content": "Функции: get_weather(location: string, unit: string), send_email(to: string, subject: string)"
            },
            {
                "role": "user",
                "content": "Отправь письмо с темой 'Встреча' на адрес ivan@example.com"
            },
            {
                "role": "assistant",
                "content": None,
                "tool_calls": [
                    {
                        "id": "call_1",
                        "type": "function",
                        "function": {
                            "name": "send_email",
                            "arguments": "{\"to\": \"ivan@example.com\", \"subject\": \"Встреча\"}"
                        }
                    }
                ]
            }
        ]
    }
]

2.2 Multi-turn сценарии

Модель должна уметь вызывать несколько функций:

# Пример параллельного вызова
assistant_message = {
    "role": "assistant",
    "content": None,
    "tool_calls": [
        {
            "id": "call_1",
            "type": "function",
            "function": {
                "name": "get_weather",
                "arguments": "{\"location\": \"Москва\"}"
            }
        },
        {
            "id": "call_2",
            "type": "function",
            "function": {
                "name": "send_email",
                "arguments": "{\"to\": \"user@example.com\", \"subject\": \"Погода в Москве\"}"
            }
        }
    ]
}

3. Практические рекомендации

3.1 Баланс данных

Тип данныхПроцентПример
Только текст (без вызовов)30%Обычные диалоги
Один вызов функции40%Простые запросы
Множественные вызовы20%Сложные сценарии
Ошибки и исправления10%Неправильный выбор функции

3.2 Аугментация данных

Для улучшения робастности:

  • Ошибочные вызовы: модель вызывает функцию, но возвращается ошибка выполнения
  • Неоднозначные запросы: пользователь просит то, что не описано в функциях
  • Частичные параметры: модель должна запрашивать недостающие аргументы

4. Оценка качества

4.1 Метрики

МетрикаОписаниеЦелевое значение
Exact Match NameТочное совпадение имени функции>95%
Argument AccuracyКорректность типов и значений аргументов>90%
Multi-turn SuccessПроцент полных chain вызовов>85%
Schema ComplianceСоответствие JSON schema>98%

4.2 Тестовый набор

test_cases = [
    {
        "query": "Какая погода?",
        "expected": {
            "name": "get_weather",
            "args": {"location": "Требуется уточнение"}
        }
    },
    {
        "query": "Отправь письмо Ивану",
        "expected": {
            "name": "send_email",
            "args": {"to": "ivan@example.com", "subject": None}
        }
    }
]

5. Инструментарий

5.1 Фреймворки для fine-tuning

  • OpenAI Fine-tuning API
  • LoRA и QLoRA для эффективного обучения
  • Hugging Face Transformers с модулями для tool use
  • Unsloth для оптимизации

5.2 Датасеты

  • Glaive Functions Dataset — готовые примеры
  • ToolBench — бенчмарк для function calling

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

Задача: Создать dataset из 200 примеров для fine-tuning модели на вызов API погоды (3 функции) с поддержкой multi-turn.

Инструменты:

  • Python
  • JSON Schema генератор
  • OpenAI API для тестирования
  • LoRA + Hugging Face

Шаги:

  1. Определить 3 функции: get_weather, get_forecast, get_air_quality
  2. Сгенерировать 100 одношаговых примеров и 100 multi-turn цепочек
  3. Добавить 30 примеров с ошибками (неправильные параметры)
  4. Проверить schema compliance всех примеров

Ожидаемый результат:

  • Датасет в формате JSONL с корректными tool_calls
  • Тестовый скрипт для проверки exact match accuracy
  • Отчет по метрикам (accuracy >90%)

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

ВопросТема
38JSON Schema для валидации аргументов
150Agentic RAG — интеграция tool use

Навигация

  • Предыдущий: 961
  • Следующий: 963
  • Индекс: 00. Индекс разборов