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. |
parameters | Объект | Нет | Объект с другими параметрами LLM. |
fillersPhraseConfig | Объект | Нет | Объект с настройками для заполнения паузы. |
messages | Массив | Да | История диалога. |
bargeInReply | Объект | Нет | Передайте объект bargeInReply в сценарии, создайте пустой ответ с параметром bargeInIf. Смотрите пример в статье LLM в телефонии. |
Заполнение паузы
Когда LLM начинает генерировать текст, возникает пауза в речи бота. Бот ждет первое предложение текста, чтобы его воспроизвести.
Вы можете указать фразу, которую бот произнесет в начале генерации. Это позволит заполнить паузу, если она слишком длинная.
| Свойство | Тип | Обязательное | Описание |
|---|---|---|---|
fillersPhraseConfig.fillerPhrase | Строка | Нет | Текст фразы. |
fillersPhraseConfig.fillerPhrasesList | Массив | Нет | Список фраз. Бот выберет одну случайную фразу, чтобы заполнить паузу. к сведению Укажите хотя бы одно из полей: fillerPhrase или fillerPhrasesList. Если заполнены оба поля, то бот выберет одну случайную фразу из всех указанных: fillerPhrase + fillerPhrasesList. |
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 в телефонии.
Параметры LLM
Объект parameters может содержать любые параметры, которые поддерживает выбранная модель.
Исключения.
Следующие параметры LLM нельзя переопределить через объект parameters, переданные значения игнорируются:
audiofunction_callfunctionslogit_biaslogprobsmessagesmodalities
modelnstreamstream_optionstool_choicetools
Набор параметров, их допустимые значения и влияние на ответ зависят от выбранной модели и версии. Пожалуйста, сверяйтесь с официальной документацией модели. Неверно заданные параметры могут привести к ошибке.
Например, для модели gpt-4o вы можете указать max_completion_tokens для получения более коротких реплик от LLM и stop для остановки генерации в случае появления нежелательных последовательностей.
parameters: {
max_completion_tokens: 150,
stop: ["шутка", "###"]
}
В более старых моделях GPT вместо max_completion_tokens может использоваться max_tokens.
Использование в сценарии
Ниже показаны примеры 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,
// Ограничение длины реплики LLM
parameters: { max_completion_tokens: 150 },
// Фразы для заполнения паузы
fillersPhraseConfig: {
"fillerPhrasesList": ["Хороший вопрос!", "Секунду"],
"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,
// Ограничение длины реплики LLM
parameters: { maxTokens: 150 },
// Фразы для заполнения паузы
fillersPhraseConfig: {
"fillerPhrasesList": ["Хороший вопрос!", "Секунду"],
"activationDelayMs": 1000
},
// История диалога
messages: $jsapi.chatHistoryInLlmFormat()
});
В этом примере:
MY_TOKEN— название токена в JAICP, в котором в качестве значения указан IAM-токен Yandex Cloud.folder12345— идентификатор каталога в Yandex Cloud.
Подробнее о работе с YandexGPT смотрите в документации.