llmRequest
Бета
Этот тип ответа позволяет использовать LLM в телефонном канале с минимальными паузами.
С помощью llmRequest
бот в потоковом режиме получает текст от LLM и синтезирует речь.
Ответ поддерживается только в телефонном канале.
Чтобы узнать подробнее об использовании этого ответа в сценарии, смотрите раздел LLM в телефонии.
Свойства
Свойство | Тип | Обязательное | Описание |
---|---|---|---|
provider | Строка | Да | Провайдер LLM:
|
tokenSecret | Строка | Да | Название токена для обращения к LLM:
CUSTOM_LLM , вы можете ссылаться на этот токен в параметре headers . |
url | Строка | Нет | URL метода, который возвращает ответ LLM на запрос пользователя. Например, если вы хотите отправлять запросы в YandexGPT, укажите: https://llm.api.cloud.yandex.net/foundationModels/v1/completion. Заполните свойство, только если используетеCUSTOM_LLM . |
headers | Объект | Нет | Заголовки, которые нужно передать с запросом. Формат заголовков и требования к авторизации зависят от вашего провайдера. Вместо API-ключа в заголовках указывайте название токена из проекта JAICP. Например: CUSTOM_LLM . |
model | Строка | Да | Модель для генерации текста:
|
temperature | Число | Нет | Регулирует креативность ответов. При высоких значениях результаты будут более творческими и менее предсказуемыми. Мы рекомендуем устанавливать значения от0.0 до 1.0 . Эти значения поддерживаются всеми провайдерами, при них модель дает предсказуемые результаты. Подробнее о других возможных значениях смотрите в документации вашего провайдера LLM. |
fillersPhraseConfig | Объект | Нет | Объект с настройками для заполнения паузы. |
messages | Массив | Да | История диалога. |
bargeInReply | Объект | Нет | Передайте объект bargeInReply в сценарии, создайте пустой ответ с параметром bargeInIf . Смотрите пример в статье LLM в телефонии. |
Заполнение паузы
Когда LLM начинает генерировать текст, возникает пауза в речи бота. Бот ждет первое предложение текста, чтобы его воспроизвести.
Вы можете указать фразу, которую бот произнесет в начале генерации. Это позволит заполнить паузу, если она слишком длинная.
Свойство | Тип | Обязательное | Описание |
---|---|---|---|
fillersPhraseConfig.fillerPhrase | Строка | Да | Текст фразы. |
fillersPhraseConfig.activationDelayMs | Число | Нет | Длительность паузы в миллисекундах:
2000 . При значениях меньше 500 могут возникать ошибки в работе llmRequest . |
История диалога
Свойство | Тип | Обязательное | Описание |
---|---|---|---|
messages.role | Строка | Да | Роль участника:
|
messages.content | Строка | Да | Текст сообщения. |
Поле messages
содержит историю диалога, которую LLM должна учитывать.
Вы можете получить историю диалога пользователя с ботом в этом формате с помощью метода $jsapi.chatHistoryInLlmFormat
.
Примеры истории:
-
История только с последним запросом пользователя:
[
{"role": "user","content": $request.query}
] -
История с промтом и предыдущими сообщениями:
[
{"role": "system", "content": "Отвечай коротко. Максимум несколько предложений."},
{"role": "user","content": "Порекомендуй фильм"},
{"role": "assistant", "content": "Какого жанра?"},
{"role": "user", "content": "Комедия"}
]
Размер истории и размер промта может повлиять на скорость работы LLM. Если LLM долго отвечает, попробуйте уменьшить историю или промт.
Вызов функций
Вместо генерации текстового ответа LLM может вызвать функцию.
- Вызов функций поддерживается только для
provider: "CUSTOM_LLM"
. - LLM должна поддерживать function calling.
- Сейчас бот не может завершить звонок с помощью вызова функции.
Например, если код функции содержит
$dialer.hangUp
, то сброс звонка не произойдет.
Свойство | Тип | Обязательное | Описание |
---|---|---|---|
tools | Массив | Нет | Массив с описаниями доступных функций. |
eventName | Строка | Нет | Название события, которое придет в сценарий, если LLM вызовет одну из функций. |
Пример массива tools
с описанием одной функции:
var myTools = [
{
"type": "function",
"function": {
"name": "getWeather",
"description": "Узнать текущую погоду в городе",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Город, в котором нужно узнать погоду"
}
},
"required": ["city"]
}
}
}
];
$response.replies.push({
type: "llmRequest",
…
tools: myTools,
eventName: "myEvent"
});
Здесь:
function.name
— название функции.function.description
— описание функции. По этому описанию LLM понимает, для чего нужна функция.function.parameters
— параметры функции в формате JSON Schema.
Смотрите пример вызова функций в статье LLM в телефонии.
Использование в сценарии
Ниже показаны примеры llmRequest
для провайдеров Caila
и YandexGPT
:
- Caila
- YandexGPT
state: NoMatch
event!: noMatch
script:
$response.replies = $response.replies || [];
$response.replies.push({
type: "llmRequest",
provider: "CAILA_OPEN_AI",
// Название токена в JAICP
tokenSecret: "MY_TOKEN",
// Модель для генерации текста
model: "gpt-4o",
// Температура
temperature: 0.6,
// Фраза для заполнения паузы
fillersPhraseConfig: {"fillerPhrase": "Хороший вопрос!", "activationDelayMs": 1000},
// История диалога
messages: $jsapi.chatHistoryInLlmFormat()
});
state: NoMatch
event!: noMatch
script:
$response.replies = $response.replies || [];
$response.replies.push({
type: "llmRequest",
provider: "CUSTOM_LLM",
// Название токена в JAICP
tokenSecret: "MY_TOKEN",
// URL метода для получения ответа от LLM
url: "https://llm.api.cloud.yandex.net/v1/chat/completions",
// Заголовки запроса
headers: {"Authorization": "Api-Key MY_TOKEN"},
// Модель для генерации текста, путь содержит идентификатор каталога
model: "gpt://folder12345/yandexgpt",
// Температура
temperature: 0.6,
// Фраза для заполнения паузы
fillersPhraseConfig: {"fillerPhrase": "Хороший вопрос!", "activationDelayMs": 1000},
// История диалога
messages: $jsapi.chatHistoryInLlmFormat()
});
В этом примере:
MY_TOKEN
— название токена в JAICP, в котором в качестве значения указан IAM-токен Yandex Cloud.folder12345
— идентификатор каталога в Yandex Cloud.
Подробнее о работе с YandexGPT смотрите в документации.