Генерация ответа
Синхронный вызов
В рамках чата
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);
}
В этом примере бот:
-
Если чата еще нет, создает новый чат с помощью
$rag.chat.create
. -
Получает ответ с помощью метода
$rag.chat.processQuery
. Бот вызывает метод синхронно.предупреждениеЕсли база знаний генерирует ответ более 25 секунд, то бот не получит его. В этом случае вызывайте метод асинхронно.
-
Отправляет ответ или сообщение об ошибке.
Одиночный запрос
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);
}
В этом примере бот:
-
Получает ответ с помощью метода
$rag.query.generateAnswer
. Бот вызывает метод синхронно.предупреждениеЕсли база знаний генерирует ответ более 25 секунд, то бот не получит его. В этом случае вызывайте метод асинхронно.
-
Отправляет ответ или сообщение об ошибке.
Асинхронный вызов
В рамках чата
- main.sc
- knowledgeHub.js
require: knowledgeHub.js
name = knowledgeHub
type = scriptEs6
theme: /
state: Answer
intent!: /вопрос
scriptEs6:
knowledgeHub.getAnswer("MyKnowledgeHub", $request.query);
# Если пользователь задаст вопрос во время ожидания, бот сможет сразу на него ответить
state: Waiting
q!: Почему ты молчишь
a: Я еще думаю…
async function getAnswer(secretName, query) {
try {
// Если чата еще нет, бот создает новый чат в базе знаний
$client.chat = $client.chat || await $rag.chat.create(secretName);
// Бот получает ответ из базы знаний
var chatResponse = await $rag.chat.processQuery(
secretName, $client.chat.id, query
);
if (chatResponse.status === "FINISHED") {
// Отправка ответа пользователю
$conversationApi.sendTextToClient(chatResponse.response);
} else {
// Сообщение об ошибке, если статус не FINISHED
$conversationApi.sendTextToClient("Извините, что-то сломалось. Статус: " + chatResponse.status);
}
} catch (error) {
// Сообщение об ошибке, если не удалось отправить запрос
$conversationApi.sendTextToClient("Произошла ошибка: " + error);
}
}
export default {
getAnswer
};
В этом примере бот:
- Если чата еще нет, создает новый чат с помощью
$rag.chat.create
. - Получает ответ с помощью метода
$rag.chat.processQuery
. Метод вызывается асинхронно. - Отправляет ответ с помощью
$conversationApi.sendTextToClient
.
- Такой сценарий не поддерживается в телефонном канале, голосовых ассистентах и Webim (Custom Channel API).
- Если база знаний не успеет сгенерировать ответ за 2 минуты, возникнет ошибка.
Одиночный запрос
- main.sc
- knowledgeHub.js
require: knowledgeHub.js
name = knowledgeHub
type = scriptEs6
theme: /
state: Answer
intent!: /вопрос
scriptEs6:
knowledgeHub.getAnswer("MyKnowledgeHub", $request.query);
# Если пользователь задаст вопрос во время ожидания, бот сможет сразу на него ответить
state: Waiting
q!: Почему ты молчишь
a: Я еще думаю…
async function getAnswer(secretName, query) {
try {
// Бот получает ответ из базы знаний
var ragResponse = await $rag.query.generateAnswer(secretName, query);
if (ragResponse.status === "FINISHED") {
// Отправка ответа пользователю
$conversationApi.sendTextToClient(ragResponse.response);
} else {
// Сообщение об ошибке, если статус не FINISHED
$conversationApi.sendTextToClient(
"Извините, что-то сломалось. Статус: " + ragResponse.status
);
}
} catch (error) {
// Сообщение об ошибке, если не удалось отправить запрос
$conversationApi.sendTextToClient("Произошла ошибка: " + error);
}
}
export default {
getAnswer
};
В этом примере бот:
-
Получает ответ с помощью метода
$rag.query.generateAnswer
. Метод вызывается асинхронно. -
Отправляет ответ с помощью
$conversationApi.sendTextToClient
.
- Такой сценарий не поддерживается в телефонном канале, голосовых ассистентах и Webim (Custom Channel API).
- Если база знаний не успеет сгенерировать ответ за 2 минуты, возникнет ошибка.