Справочник · Обновляется еженедельно Москва

Function calling: как связать нейросеть с вашими сервисами

Модель не знает остатков на вашем складе и статуса конкретного заказа. Если спросить напрямую, она выдумает правдоподобный ответ. Механизм вызова функций решает это иначе: модель говорит, какие данные ей нужны, а достаёт их ваш код.

ВЫЗОВ ФУНКЦИЙМодель не выдумывает данные, а запрашивает ихВы описываете инструменты, она решает, какой нуженМодель«Чтобы ответить,мне нужен остатокна складе»get_stock(sku)CRMкарточка клиентаСкладостатки и резервыПочтаотправка письма
Модель формулирует запрос к инструменту, выполняет его ваше приложение

Как это работает

Вы описываете доступные инструменты: название, назначение и параметры. Модель, получив вопрос, решает, нужен ли какой-то из них, и возвращает не текст, а структуру с именем функции и аргументами.

Дальше работает ваш код: выполняет запрос к базе или сервису и отправляет результат обратно. Модель формулирует человеческий ответ на основе полученных данных.

ОБМЕНЧетыре шага одного вызова1Вы описываете инструментыназвание, назначение, параметры2Модель просит вызоввозвращает имя функции и аргументы3Код выполняет запроск вашей базе или сервису4Результат уходит обратномодель формулирует ответМодель никогда не выполняет функцию сама — исполняет всегда ваш код, и права проверяете тоже вы.
Четыре шага одного обмена

Ключевой момент, который часто понимают неверно: модель никогда ничего не выполняет сама. Она только предлагает вызов. Исполняет всегда ваш код, и права проверяете тоже вы.

Как описывать инструменты

**Понятное имя и назначение.** Модель выбирает функцию по описанию, поэтому «получить остаток товара по артикулу» работает лучше, чем «метод №3».

**Минимум параметров.** Чем больше аргументов, тем чаще модель ошибается в их заполнении.

**Строгие типы.** Перечисления вместо свободных строк там, где значений конечное число.

**Немного инструментов.** Пять-семь штук модель различает уверенно, тридцать — начинает путать.

Что остаётся на вашей стороне

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

Валидация аргументов тоже ваша. Артикул, пришедший от модели, может не существовать, дата — оказаться в прошлом. Проверяйте так же строго, как данные из внешней формы.

Простое правило: относитесь к вызову функции как к запросу от недоверенного клиента. Никаких операций без проверки прав, никаких аргументов без валидации.

Типичные сценарии

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

Где ломается

Чаще всего — на цепочках. Задача требует двух вызовов подряд, модель делает первый и останавливается или путает порядок. Помогает явное описание последовательности в системной инструкции и ограничение числа шагов.

Второе место — молчаливые ошибки. Функция вернула пустой результат, модель истолковала это как «ничего нет» и уверенно сообщила об этом пользователю. Возвращайте различимые ответы: пусто, не найдено и ошибка выполнения — три разных случая.

Как это отлаживать

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

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

Типичные поломки и что с ними делать:

  • **Вызывается не та функция.** Уточните описания: чаще всего два инструмента описаны похожими словами.
  • **Аргументы заполнены неверно.** Сократите число параметров и замените свободные строки перечислениями.
  • **Функция вызывается по кругу.** Ограничьте число шагов в одном обмене, иначе модель может уйти в цикл и потратить бюджет.
  • **Вызова нет там, где он нужен.** Обычно помогает прямое указание в системной инструкции: при вопросах о статусе заказа всегда обращаться к соответствующему инструменту.

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

С чего начать

Возьмите один сценарий с одной функцией — обычно это статус заказа. Опишите инструмент, добавьте проверку прав и валидацию, соберите два десятка тестовых вопросов и посмотрите, в какой доле случаев модель вызывает функцию правильно.

Если результат устраивает, добавляйте второй инструмент. Наращивать по одному надёжнее, чем описать сразу двадцать и разбираться, почему модель выбирает не то.

Предыдущий материал Генерация изображений через API: практика для интернет-магазина Следующий материал Как проверять качество ответов модели: набор примеров вместо ощущений

Написать