Вызов функций в LLM

Автор: Ai Flowi · Опубликовано

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

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

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

  1. Опишите доступную операцию. Дайте инструменту имя, узкое назначение и контракт аргументов. Объясните, чего он не может делать.
  2. Выберите инструмент или откажитесь от вызова. Модель решает, подходит ли доступная операция запросу пользователя. Для неизвестной задачи должен быть путь без вызова.
  3. Проверьте запрос. Приложение проверяет имя инструмента, структуру аргументов, допустимые значения и права вызывающей стороны.
  4. Выполните в установленных границах. Доверенный код вызывает разрешённый сервис и фиксирует завершение, сбой или неопределённый результат.
  5. Верните наблюдение. Результат становится основанием для следующего решения или ответа. Он должен сохранять понятное описание ошибки, а не выдумывать данные.

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

Небольшой контракт инструмента только для чтения

Рассмотрим условную операцию lookup_policy_excerpt. Она возвращает фрагмент утверждённого комплекта документов с политиками. Единственный аргумент, document_id, указывает один источник в комплекте. Операция не может редактировать документ, обращаться к произвольным ресурсам или принимать решение по политике.

{
  "name": "lookup_policy_excerpt",
  "purpose": "Read one authorised policy excerpt",
  "arguments": {
    "document_id": "identifier from the approved source list"
  },
  "on_unknown_document": "return a not-found result without guessing"
}

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

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

Что нужно проверять в аргументах

Отдельные проверки перед выполнением
ПроверкаПример ошибкиПредусмотренная реакция
Известная операцияЗапрошенное имя отсутствует в списке разрешённых инструментов.Отклонить вызов; не создавать произвольную операцию.
Структура аргументовИдентификатор представлен объектом, а не текстом.Вернуть причину ошибки проверки без обращения к источнику.
Разрешённый ресурсИдентификатор относится к комплекту другого аккаунта.Запретить доступ, даже если объект в остальном корректен.
Соответствие задачеПоиск не может ответить на заданный вопрос.Сообщить об отсутствующей возможности или запросить уточнение.
Результат выполненияСервис источника возвращает ошибку.Отличать ошибку от успешного пустого результата.

Описания инструментов помогают выбору; ограничения доступа должны применяться там, где происходит доступ к ресурсу. Не полагайтесь на промпт, велящий модели использовать только разрешённые идентификаторы. Извлечённый текст также может содержать инструкции агенту. Рассматривайте их как содержимое источника, а не разрешение вызвать другой инструмент.

Как вызов функций используется в AI Flowi Workflow

Flow as Tool описан в каталоге так: Создаёт Tool из функции, запускающей загруженный Flow. В нём перечислены flow_name, tool_name, tool_description и return_direct. Его выход api_build_tool имеет тип Tool, совпадающий с допустимым типом входа tools компонента Agent.

пример конфигурации, а не зафиксированный тест

Flow as Tool
flow_name: select your existing read-only lookup flow
tool_name: lookup_policy_excerpt
tool_description: Read an approved policy excerpt; cannot edit policies.
return_direct: false

Agent
tools: connect Flow as Tool.api_build_tool
system_prompt: Use lookup only for supported read-only questions.
               Explain when no available tool fits the request.

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

В справочнике Agent описан интерфейс модели и ответа для этого подключения Tool.

Меры защиты при выполнении описаны в статье о защитных ограничениях агента.

Конфигурация вызова функций документирована в каталоге; не протестирована Ai Flowi в производственной среде. Используйте свой аккаунт модели и API-ключ и оплачивайте провайдера отдельно.

Чем вызов функций отличается от структурированного вывода?

Вызов функций запрашивает операцию. Структурированный вывод организует ответ модели в поля. Модель может выдать правильно оформленный ответ без запроса инструментов, а вызов инструмента может вернуть данные, всё ещё требующие интерпретации.

Читайте о структурированном выводе LLM для проверки полей ответа, а не запросов операций.

Отсутствующие и неожиданные аргументы

Для предлагаемого поиска отсутствие идентификатора документа должно вызвать уточнение без выполнения. Идентификатор вне разрешённого списка должен приводить к отказу. Дополнительное поле, например replacement_text, нарушает контракт даже при допустимом document_id: молчаливое игнорирование может скрыть выбор инструмента чтения для запроса редактирования. Ограничивайте назначение операции, не добавляя необязательные поля для несвязанных задач.

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

Проверяйте наблюдения и сценарии ошибок

Сохраняйте доступную для проверки запись запрошенной операции, принятых аргументов и результата, удаляя чувствительные значения. Заявления модели «Я проверил политику» недостаточно, если нет результата поиска. Результат «не найдено» должен оставаться таким, а не заменяться правдоподобным фрагментом политики.

Перед разрешением внешних изменений протестируйте неверные аргументы, отказ в доступе, недоступные сервисы и неопределённое завершение. Для предлагаемого выше поиска не заявлен результат выполнения. Агенты ReAct объясняют, как наблюдения направляют ограниченный цикл, а навыки ИИ-агента отделяют повторно используемые инструкции от исполняемых инструментов. Раздел сценариев применения содержит описанные примеры с их собственными ограничениями.

Использование рабочего процесса

Тарифы: Go от USD8 в месяц при годовой оплате (USD10 помесячно), Plus от USD16 (USD20 помесячно), Pro 100 от USD80 (USD100 помесячно), Pro 200 от USD160 (USD200 помесячно) и Pro 500 от USD400 (USD500 помесячно), от 5,000 до 250,000 Flowi Tokens в месяц с возможностью пополнения; 1 токен за каждый запуск узла; использование сторонних API и моделей не включено.