Перейти к основному содержимому

llmRequest

Бета

Этот тип ответа позволяет использовать LLM в телефонном канале с минимальными паузами. С помощью llmRequest бот в потоковом режиме получает текст от LLM и синтезирует речь.

Ответ поддерживается только в телефонном канале.

подсказка

Чтобы узнать подробнее об использовании этого ответа в сценарии, смотрите раздел LLM в телефонии.

Свойства

СвойствоТипОбязательноеОписание
providerСтрокаДаПровайдер LLM:
  • Укажите CAILA_OPEN_AI, чтобы использовать платформу Caila. В этом случае бот использует модели из сервиса openai-proxy.
  • Укажите CUSTOM_LLM, если вы хотите использовать прямое подключение к провайдеру LLM. Для подключения также заполните свойства url и headers.
    Особенности
    • Тип ответа llmRequest поддерживает только LLM, которые совместимы с OpenAI Streaming API. Например, вы можете подключить YandexGPT.
    • Тарификация за запросы к LLM происходит на стороне вашего провайдера.
    • Если JAICP установлена к вам в контур, то некоторые провайдеры могут не поддерживать прямое подключение — например, из-за региональных ограничений.
tokenSecretСтрокаДаНазвание токена для обращения к LLM:
  1. Получите API-ключ для обращения к LLM у вашего провайдера.
    Как получить API-ключ для Caila

    Для использования сервисов и генеративных моделей из Caila в сторонних приложениях, в том числе JAICP, нужен персональный токен доступа. Чтобы выпустить токен:

    1. Перейдите в Caila.

      подсказка

      Caila и Conversational Cloud использует общую базу аккаунтов, поэтому если вы зарегистрированы в Conversational Cloud, дополнительно регистрироваться в Caila не нужно.

    2. Перейдите на страницу Мое пространствоAPI-токены.

    3. В правом верхнем углу нажмите Создать токен.

    4. Придумайте имя токена, сгенерируйте его и скопируйте в буфер обмена.

  2. Добавьте в JAICP новый токен и укажите полученный API-ключ в качестве его значения.
  3. В свойстве tokenSecret укажите название созданного токена.
Если вы используете CUSTOM_LLM, вы можете ссылаться на этот токен в параметре headers.
urlСтрокаНет

URL метода, который возвращает ответ LLM на запрос пользователя. Например, если вы хотите отправлять запросы в YandexGPT, укажите: https://llm.api.cloud.yandex.net/foundationModels/v1/completion.

Заполните свойство, только если используете CUSTOM_LLM.
headersОбъектНет

Заголовки, которые нужно передать с запросом. Формат заголовков и требования к авторизации зависят от вашего провайдера.

Вместо API-ключа в заголовках указывайте название токена из проекта JAICP. Например: {"Authorization": "Api-Key <TOKEN_NAME>"}, где <TOKEN_NAME> — название токена в JAICP. Такое же название должно быть указано в свойстве tokenSecret.

Заполните свойство, только если используете CUSTOM_LLM.
modelСтрокаДаМодель для генерации текста:
  • Если вы используете Caila в качестве провайдера, смотрите доступные модели и их стоимость на странице сервиса.
  • В других случаях смотрите идентификаторы моделей в документации вашего провайдера.
temperatureЧислоНет

Регулирует креативность ответов. При высоких значениях результаты будут более творческими и менее предсказуемыми.

Мы рекомендуем устанавливать значения от 0.0 до 1.0. Эти значения поддерживаются всеми провайдерами, при них модель дает предсказуемые результаты. Подробнее о других возможных значениях смотрите в документации вашего провайдера LLM.
fillersPhraseConfigОбъектНетОбъект с настройками для заполнения паузы.
messagesМассивДаИстория диалога.
bargeInReplyОбъектНет

Передайте объект bargeInReply, чтобы настроить перебивание по условию.

Чтобы сгенерировать объект bargeInReply в сценарии, создайте пустой ответ с параметром bargeInIf. Смотрите пример в статье LLM в телефонии.

Заполнение паузы

Когда LLM начинает генерировать текст, возникает пауза в речи бота. Бот ждет первое предложение текста, чтобы его воспроизвести.

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

СвойствоТипОбязательноеОписание
fillersPhraseConfig.fillerPhraseСтрокаДаТекст фразы.
fillersPhraseConfig.activationDelayMsЧислоНетДлительность паузы в миллисекундах:
  • Если пауза длится больше указанного времени, то бот произнесет фразу fillerPhrase.
  • Если бот начнет воспроизводить текст от LLM раньше, то он не произнесет фразу fillerPhrase.
По умолчанию: 2000. При значениях меньше 500 могут возникать ошибки в работе llmRequest.

История диалога

СвойствоТипОбязательноеОписание
messages.roleСтрокаДаРоль участника:
  • user — сообщение пользователя.
  • assistant — сообщение бота.
  • system — промт, инструкция для LLM.
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:

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()
});