Вызвать функцию из модели
При работе с моделями YandexGPT Pro и Llama 70B1 вы можете обращаться к внешним инструментам, API и базам данных с помощью вызова функций.
Например, у вас есть функция weatherTool
, которая в качестве входного параметра принимает название города и возвращает текущую температуру в нем. Обработку ответов модели, работу функции и формирование запросов вам нужно предусмотреть самостоятельно.
Чтобы модель могла вызвать функцию, если это будет необходимо:
-
Сформируйте запрос к модели, например, в файле
body.json
:{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt", "tools": [ { "function": { "name": "weatherTool", "description": "Получает текущую погоду в указанном городе.", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "Название города, например, Москва" } }, "required": [ "city" ] } } } ], "messages": [ { "role": "user", "text": "Какая погода в Санкт-Петербурге?" } ] }
Где:
modelUri
— идентификатор модели, которая будет использоваться для вызова функций. Параметр содержит идентификатор каталога Yandex Cloud или идентификатор дообученной модели.tools
— массив всех передаваемых модели функций.function
— описание и параметры функцииweatherTool
.
-
messages
— массив сообщений, которые задают контекст для модели:-
role
— роль отправителя сообщения:user
— предназначена для отправки пользовательских сообщений к модели.system
— позволяет задать контекст запроса и определить поведение модели.assistant
— используется для ответов, которые генерирует модель. При работе в режиме чата ответы модели, помеченные рольюassistant
, включаются в состав сообщения для сохранения контекста беседы. Не передавайте сообщения пользователя с этой ролью.
-
text
— текстовое содержимое сообщения.
-
-
Отправьте запрос к модели:
export FOLDER_ID=<идентификатор_каталога> export IAM_TOKEN=<IAM-токен> curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "x-folder-id: ${FOLDER_ID}" \ --data "@<путь_до_файла_json>" \ "https://llm.api.cloud.yandex.net/foundationModels/v1/completion"
Где:
FOLDER_ID
— идентификатор каталога, на который у вашего аккаунта есть рольai.languageModels.user
или выше.IAM_TOKEN
— IAM-токен вашего аккаунта.
-
Модель вернет ответ с полем
ToolCallList
, содержащим обращение к вызываемой функции и необходимые параметры в виде JSON Schema .Пример ответа:
{ "result": { "alternatives": [ { "message": { "role": "assistant", "toolCallList": { "toolCalls": [ { "functionCall": { "name": "weatherTool", "arguments": { "city": "Санкт-Петербург" } } } ] } }, "status": "ALTERNATIVE_STATUS_TOOL_CALLS" } ], "usage": { "inputTextTokens": "74", "completionTokens": "14", "totalTokens": "88", "completionTokensDetails": { "reasoningTokens": "0" } }, "modelVersion": "23.10.2024" } }
-
Обработайте ответ модели (поле
toolCallList
) и инициируйте работу функцииweatherTool
, передав в нее пришедшие параметры. -
Дополните массив
messages
в файлеbody.json
ответом модели и результатами вызова функции.Пример запроса
{ "modelUri": "gpt://<идентификатор_каталога>/yandexgpt", "tools": [ { "function": { "name": "weatherTool", "description": "Получает текущую погоду в указанном городе.", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "Название города, например, Москва" } }, "required": ["city"] } } } ], "messages": [ { "role": "user", "text": "Какая погода в Санкт-Петербурге?" }, { "role": "assistant", "toolCallList": { "toolCalls": [ { "functionCall": { "name": "weatherTool", "arguments": { "city": "Санкт-Петербург" } } } ] } }, { "role": "assistant", "toolResultList": { "toolResults": [ { "functionResult": { "name": "weatherTool", "content": "8°C" } } ] } } ] }
Где
toolResultList
— результаты вызова функции. -
Отправьте новый запрос к модели, повторив второй шаг инструкции. Модель сформулирует ответ с учетом результатов вызова функции:
{ "result": { "alternatives": [ { "message": { "role": "assistant", "text": "В Санкт-Петербурге сейчас 8°C." }, "status": "ALTERNATIVE_STATUS_FINAL" } ], "usage": { "inputTextTokens": "108", "completionTokens": "10", "totalTokens": "118", "completionTokensDetails": { "reasoningTokens": "0" } }, "modelVersion": "23.10.2024" } }
1 Llama создана компанией Meta. Meta признана экстремистской организацией, ее деятельность в России запрещена.