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

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

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

В рамках чата

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. Бот вызывает метод синхронно.

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

    Если база знаний генерирует ответ более 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. Бот вызывает метод синхронно.

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

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

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

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

В рамках чата

require: knowledgeHub.js
name = knowledgeHub
type = scriptEs6

theme: /

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

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

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

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

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

require: knowledgeHub.js
name = knowledgeHub
type = scriptEs6

theme: /

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

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

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

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

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

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