Вызов функций в LLM
Автор: Ai Flowi · Опубликовано
Вызов функций в LLM позволяет языковой модели запросить именованную функцию или инструмент со структурированными аргументами. Приложение проверяет запрос, выполняет разрешённую операцию и возвращает результат. Запрос модели — предложение, а не доказательство выполнения функции или правильности её результата.
Например, модель может запросить поиск фрагмента политики по идентификатору документа с доступом только для чтения. Выполняющее приложение проверяет идентификатор и права доступа до извлечения данных. Такое разделение отделяет интерпретацию языка от кода, имеющего доступ к системе.
Этапы вызова инструмента
- Опишите доступную операцию. Дайте инструменту имя, узкое назначение и контракт аргументов. Объясните, чего он не может делать.
- Выберите инструмент или откажитесь от вызова. Модель решает, подходит ли доступная операция запросу пользователя. Для неизвестной задачи должен быть путь без вызова.
- Проверьте запрос. Приложение проверяет имя инструмента, структуру аргументов, допустимые значения и права вызывающей стороны.
- Выполните в установленных границах. Доверенный код вызывает разрешённый сервис и фиксирует завершение, сбой или неопределённый результат.
- Верните наблюдение. Результат становится основанием для следующего решения или ответа. Он должен сохранять понятное описание ошибки, а не выдумывать данные.
Провайдеры могут по-разному организовать эти этапы. Существенная граница неизменна: аргументы модели до проверки являются недоверенным вводом. Корректный объект может указывать ресурс, который вызывающей стороне запрещено читать, поэтому проверку синтаксиса и авторизацию нужно разделять.
Небольшой контракт инструмента только для чтения
Рассмотрим условную операцию 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 и моделей не включено.