Вызовы инструментов (также известные как вызовы функций) предоставляют LLM доступ к внешним инструментам. LLM не вызывает инструменты напрямую. Вместо этого он предлагает инструмент для вызова. Затем пользователь вызывает инструмент отдельно и передает результаты обратно в LLM. Наконец, LLM форматирует ответ в ответ на исходный вопрос пользователя. LLMSTORE стандартизирует интерфейс вызова инструментов для разных моделей и поставщиков, что упрощает интеграцию внешних инструментов с любой поддерживаемой моделью. Поддерживаемые модели: Вы можете найти модели, поддерживающие вызов инструментов, с помощью фильтрации на llmstore.ru/models?supported_parameters=tools. Если вы предпочитаете учиться на полном комплексном примере, продолжайте читать.

Примеры тела запроса

Вызов инструмента с помощью LLMSTORE включает три ключевых шага. Вот основные форматы тела запроса для каждого шага:

Шаг 1. Запрос вывода с помощью инструментов

Шаг 2. Выполнение инструмента (на стороне клиента)

После получения ответа модели с tool_calls, запустите запрошенный инструмент локально и подготовьте результат:

Шаг 3: Запрос на вывод с результатами инструмента

Примечание: Параметр tools должен быть включен в каждый запрос (шаги 1 и 3), чтобы маршрутизатор мог проверять схему инструмента при каждом вызове.

Пример вызова инструмента

Вот код Python, который дает LLM возможность вызывать внешний API - в данном случае Project Gutenberg, для поиска книг. Для начала давайте выполним базовую настройку:

Определите инструмент

Далее мы определяем инструмент, который хотим вызвать. Помните, что инструмент получит запрос от LLM, но код, который мы здесь пишем, в конечном итоге отвечает за выполнение вызова и возврат результатов в LLM. Обратите внимание, что “инструмент” - это обычная функция. Затем мы пишем «спецификацию» JSON, совместимую с параметром вызова функции OpenAI. Мы передадим эту спецификацию LLM, чтобы он знал, что этот инструмент доступен и как его использовать. При необходимости он запросит инструмент вместе с любыми аргументами. Затем мы локально маршализуем вызов инструмента, выполним вызов функции и вернем результаты в LLM.

Использование инструмента и результаты использования инструмента

Давайте выполним первый вызов модели через API LLMSTORE: LLM отвечает окончательной причиной: tool_calls, и tool_calls массив. В общем обработчике ответов LLM вы хотели бы проверить finish_reason перед обработкой вызовов инструментов, но здесь мы предполагаем, что это так. Продолжим, обрабатывая вызов инструмента: Массив сообщений теперь имеет:
  1. Наш первоначальный запрос
  2. Ответ LLM (содержащий запрос на вызов инструмента)
  3. Результат вызова инструмента (объект json, возвращенный из API Project Gutenberg)
Теперь мы можем сделать второй вызов LLMSTORE API и, надеюсь, получим результат! Вывод будет примерно таким:
Мы сделали это! Мы успешно использовали инструмент в командной строке.

Чередованное мышление

Чередование мышления позволяет моделям рассуждать между вызовами инструментов, позволяя принимать более сложные решения после получения результатов работы инструмента. Эта функция помогает моделям объединять несколько вызовов инструментов с промежуточными этапами рассуждения и принимать тонкие решения на основе промежуточных результатов. Важно: чередующееся мышление увеличивает использование токенов и задержку ответа. При включении этой функции учитывайте свой бюджет и требования к производительности.

Как работает чередующееся мышление

Благодаря чередующемуся мышлению модель может: — Обоснование результатов вызова инструмента, прежде чем решить, что делать дальше. — связывайте несколько вызовов инструментов с промежуточными этапами рассуждения. — Принимайте более тонкие решения на основе промежуточных результатов.
  • Обеспечить прозрачное обоснование процесса выбора инструмента.

Пример: многоэтапное исследование с рассуждением

Вот пример, показывающий, как модель может использовать чередующееся мышление для исследования темы в нескольких источниках: Первоначальный запрос:
Рассуждения модели и вызовы инструментов:
  1. Первоначальное мышление: «Мне нужно изучить воздействие электромобилей на окружающую среду. Позвольте мне начать с научных статей, чтобы получить рецензируемые исследования».
  2. Первый вызов инструмента: search_academic_papers({"query": "electric vehicle lifecycle environmental impact", "field": "environmental science"})
  3. После первого результата: «В статьях показаны неоднозначные результаты о влиянии производства. Мне нужна текущая статистика, чтобы дополнить это академическое исследование».
  4. Второй вызов инструмента: get_latest_statistics({"topic": "electric vehicle carbon footprint", "year": 2024})
  5. После второго результата инструмента: «Теперь у меня есть как научные исследования, так и текущие данные. Позвольте мне поискать исследования, посвященные конкретному производству, чтобы устранить обнаруженные мной пробелы».
  6. Третий вызов инструмента: search_academic_papers({"query": "electric vehicle battery manufacturing environmental cost", "field": "materials science"})
  7. Окончательный анализ: Обобщает всю собранную информацию в комплексный ответ.

Лучшие практики чередующегося мышления

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

Рекомендации по реализации

При реализации чередующегося мышления:
  • Моделям может потребоваться больше времени для ответа из-за дополнительных аргументов.
  • Использование токенов будет выше из-за процесса рассуждения.
  • Качество рассуждений зависит от возможностей модели
  • Некоторые модели могут лучше подходить для этого подхода, чем другие.

Простой агентский цикл

В приведенном выше примере вызовы выполняются явно и последовательно. Для обработки широкого спектра пользовательских входных данных и вызовов инструментов вы можете использовать агентный цикл. Вот пример простого агентного цикла (с использованием того же tools и начальный messages как указано выше):

Лучшие практики и расширенные шаблоны

Рекомендации по определению функций

При определении инструментов для LLM следуйте следующим рекомендациям: Четкие и описательные имена. Используйте описательные имена функций, которые четко обозначают назначение инструмента.
Подробные описания: предоставьте подробные описания, которые помогут модели понять, когда и как использовать инструмент.

Потоковая передача с помощью вызовов инструментов

При использовании потоковой передачи ответов с вызовами инструментов обрабатывайте различные типы контента соответствующим образом:

Конфигурация выбора инструмента

Управление использованием инструментов с помощью tool_choice параметр:

Параллельные вызовы инструментов

Управляйте возможностью одновременного вызова нескольких инструментов с помощью Параметр parallel_tool_calls (по умолчанию верно для большинства моделей):
Когда parallel_tool_calls это false, модель будет запрашивать только один вызов инструмента за раз вместо потенциально нескольких параллельных вызовов.

Рабочие процессы с несколькими инструментами

Инструменты проектирования, которые хорошо работают вместе:
Это позволяет модели естественным образом объединять операции: поиск → получение подробной информации → проверка запасов.

Отслеживание надежности

LLMSTORE отслеживает, насколько надежно каждый поставщик выполняет вызовы инструментов, и отображает это как Частота ошибок при вызове инструментов на вкладке «Производительность» каждой страницы модели. Тот же сигнал управляет Auto Exacto заказ поставщика по запросам на вызов инструментов. Точный валидатор, черновой вариант схемы JSON, семантику регулярных выражений и классификацию вызовов каждого инструмента см. в разделе Как измеряется вероятность успешного вызова инструмента. Более подробную информацию о формате сообщения LLMSTORE и параметрах инструмента см. в Справочнике API.