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

Генерация ответа

Синхронный вызов

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

В рамках чата

state: Answer
intent!: /вопрос
scriptEs6:
try {
// Если чата еще нет, бот создает новый чат в базе знаний
$client.chat = $client.chat || await $rag.chat.create("MyKnowledgeHub");
// Бот получает ответ из базы знаний
var chatResponse = await $rag.chat.processQuery(
"MyKnowledgeHub", $client.chat.id, $request.query
)
if (chatResponse.status === "FINISHED") {
// Отправка ответа пользователю
$reactions.answer(chatResponse.response);
} else {
// Сообщение об ошибке, если статус не FINISHED
$reactions.answer("Извините, что-то сломалось. Статус: " + chatResponse.status);
}
} catch (error) {
// Сообщение об ошибке, если не удалось отправить запрос
$reactions.answer("Произошла ошибка: " + error);
}

В этом примере бот:

  1. Если чата еще нет, создает новый чат с помощью $rag.chat.create.

  2. Получает ответ с помощью метода $rag.chat.processQuery. Бот вызывает метод синхронно с помощью await.

    предупреждение

    Если база знаний генерирует ответ более 25 секунд, то бот не получит его. В этом случае вызывайте метод асинхронно.

  3. Отправляет ответ или сообщение об ошибке.

Одиночный запрос

state: Answer
intent!: /вопрос
scriptEs6:
try {
// Бот получает ответ из базы знаний
var ragResponse = await $rag.query.generateAnswer("MyKnowledgeHub", $request.query);
if (ragResponse.status === "FINISHED") {
// Отправка ответа пользователю
$reactions.answer(ragResponse.response);
} else {
// Сообщение об ошибке, если статус не FINISHED
$reactions.answer("Извините, что-то сломалось. Статус: " + ragResponse.status);
}
} catch (error) {
// Сообщение об ошибке, если не удалось отправить запрос
$reactions.answer("Произошла ошибка: " + error);
}

В этом примере бот:

  1. Получает ответ с помощью метода $rag.query.generateAnswer. Бот вызывает метод синхронно с помощью await.

    предупреждение

    Если база знаний генерирует ответ более 25 секунд, то бот не получит его. В этом случае вызывайте метод асинхронно.

  2. Отправляет ответ или сообщение об ошибке.

Асинхронный вызов

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

В рамках чата

require: knowledgeHub.js
name = knowledgeHub
type = scriptEs6

theme: /

state: Answer
intent!: /вопрос
scriptEs6:
knowledgeHub.sendRequest("MyKnowledgeHub", $request.query);

# Если пользователь задаст вопрос во время ожидания, бот сможет сразу на него ответить
state: Waiting
q!: Почему ты молчишь
a: Я еще думаю…

В этом примере бот:

  1. Если чата еще нет, создает новый чат с помощью $rag.chat.create.
  2. Получает ответ с помощью метода $rag.chat.processQuery. Метод вызывается асинхронно — внутри асинхронной функции sendRequest.
  3. Отправляет ответ с помощью $conversationApi.sendTextToClient.
Ограничения
  • Такой сценарий не поддерживается в телефонном канале, голосовых ассистентах и Webim (Custom Channel API).
  • Если база знаний не успеет сгенерировать ответ за 2 минуты, возникнет ошибка.

Одиночный запрос

require: knowledgeHub.js
name = knowledgeHub
type = scriptEs6

theme: /

state: Answer
intent!: /вопрос
scriptEs6:
knowledgeHub.sendRequest("MyKnowledgeHub", $request.query);

# Если пользователь задаст вопрос во время ожидания, бот сможет сразу на него ответить
state: Waiting
q!: Почему ты молчишь
a: Я еще думаю…

В этом примере бот:

  1. Получает ответ с помощью метода $rag.query.generateAnswer. Метод вызывается асинхронно — внутри асинхронной функции sendRequest.

  2. Отправляет ответ с помощью $conversationApi.sendTextToClient.

Ограничения
  • Такой сценарий не поддерживается в телефонном канале, голосовых ассистентах и Webim (Custom Channel API).
  • Если база знаний не успеет сгенерировать ответ за 2 минуты, возникнет ошибка.