Перейти к содержанию
KeuralDocs
Для разработчиков

Keural Kit

Скрипт для встраивания экранов чата, Drive и промптов Keural в ваш веб-сервис.

Keural Kit встраивает экраны Keural на страницу с помощью одного скрипта. Экраны рисуются внутри Shadow DOM, поэтому не смешиваются с CSS страницы. Kit обновляется при развёртывании веб-версии Keural. Если после развёртывания отображается старый экран, очистите кэш браузера и CDN и проверьте время сборки через window.KeuralKit.__build.

Kit работает на основе сеанса входа в Keural (cookie на домене API Keural). userInfo используется только для отображения, а проверка пользователя выполняется по cookie-сеансу. Чтобы использовать Kit на домене вашего сервиса, до подключения согласуйте регистрацию домена и интеграцию входа (например, SSO) с контактным лицом в Keural.

Загрузка

Kit загружается с веб-адреса используемой среды Keural. Для keural.ai это https://keural.ai, для локальной или выделенной среды укажите веб-адрес Keural этой среды. Перед добавлением скрипта задайте в window.__KEURAL_ENV__ адреса серверов, к которым будет обращаться Kit. Все три адреса должны относиться к одной среде. Получите их у контактного лица в Keural при подключении.

<script>
  window.__KEURAL_ENV__ = {
    NEXT_PUBLIC_API_BASE_URL: '<KEURAL_API_URL>',
    NEXT_PUBLIC_FAST_API_BASE_URL: '<KEURAL_AGENT_URL>',
    NEXT_PUBLIC_MODE: 'prd',
  };
</script>
<script src="<KEURAL_WEB_URL>/plugin/kit/keural.js" async></script>
ЗначениеОписание
<KEURAL_WEB_URL>Веб-адрес Keural. Пример: https://keural.ai
<KEURAL_API_URL>Адрес API-сервера Keural. Пример: https://api.keural.ai
<KEURAL_AGENT_URL>Адрес сервера агентов Keural
NEXT_PUBLIC_MODEprd для рабочей среды, dev для среды разработки

Если тот же Kit используется на втором домене, укажите все три значения: NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL и NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL. Если хотя бы одно из них отсутствует, возникает ошибка. Значения: адреса https:// без пути.

После загрузки скрипта создаётся window.KeuralKit. В SPA, например React, используйте загрузчик, который добавляет скрипт только один раз.

export function loadKeuralKit(src = '<KEURAL_WEB_URL>/plugin/kit/keural.js') {
  if (window.KeuralKit) return Promise.resolve(window.KeuralKit);
  return new Promise((resolve, reject) => {
    const s = document.createElement('script');
    s.src = src;
    s.async = true;
    s.onload = () => resolve(window.KeuralKit);
    s.onerror = () => {
      s.remove();
      reject(new Error('Keural Kit failed to load'));
    };
    document.head.appendChild(s);
  });
}

Встраивание чата

const el = document.getElementById('keural-chat')!;

window.KeuralKit.mountChat(el, {
  userInfo: { userId: user.id, name: user.name },
  colorMode: 'light',
  initialData: { message: 'Подведи итоги выручки за квартал', room_name: 'Квартальный отчёт' },
  onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
  onError: () => router.push('/'),
});

// При уходе с экрана
window.KeuralKit.unmount(el);
  • Чтобы открыть существующий диалог, укажите его ID в sessionId.
  • initialData указывайте только при открытии нового диалога. Если указать его при открытии существующего диалога, то же сообщение отправится снова.
  • Если userInfo.userId не задан, пользователь считается неавторизованным. Встраивайте экран после того, как данные для входа готовы.

Методы

МетодОписание
mountChat(el, options)Экран чата
mountDrivePage(el, options)Экран Drive. Файлы для вопроса передаются в onAsk(files)
mountPromptPage(el, options)Экран промптов. Выбранные промпты передаются в onAsk(prompts)
mountDriveDialog(el, options) / updateDriveDialogОкно выбора файлов Drive (обязательно open, также onClose, onSelect(files), initialSelected)
mountPromptDialog(el, options) / updatePromptDialogОкно выбора промптов (обязательно open, также onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed)
unmount(el)Удаляет смонтированный экран

Методы Методы mount* и update* принимают colorMode и userInfo, а unmount(el) принимает только элемент. update* перерисовывает элемент с новыми параметрами. Чтобы открыть или закрыть окно, измените значение open и вызовите update*. Повторный вызов mount* для того же элемента повторно использует существующий экран.

Параметры mountChat

ПараметрТипОписание
sessionIdstringID диалога для открытия. Если не указан, начинается новый диалог
userInfo{ userId, name?, orgId?, orgName? }Данные пользователя. userId обязателен
initialDataobjectПервое сообщение нового диалога. См. initialData ниже
colorMode'light' | 'dark'Тема. По умолчанию light
initialEffort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Начальный уровень. По умолчанию fast
initialWebSearchbooleanНачать с включённым веб-поиском. По умолчанию true
initialDeepResearchbooleanНачать с включённым Deep Research
hideHomeButton / hideNewChatButtonbooleanСкрыть кнопки в заголовке
hideModePopupbooleanСкрыть всплывающее окно выбора режима
messageActions{ id, label, onClick(messageId) }[]Добавить свои действия в меню ответа
headerLeftActions / headerRightActionsHeaderLeftAction[]Добавить свои кнопки в заголовок
onHeaderLeftMount(el: HTMLElement) => voidПолучает элемент после отрисовки левой части заголовка
mobileMenuItems / mobileBottomActionsarrayДобавить пункты меню или нижние кнопки при мобильной ширине
onMobileHomeButton() => voidПри нажатии кнопки «Главная» при мобильной ширине
chatInputFooterstringТекст примечания под полем ввода
shareTooltipstringТекст подсказки для кнопки «Поделиться»
onSessionCreated(roomId) => voidКогда создан новый диалог
onStreamDone(roomId) => voidКогда ответ завершён
onSummaryDone(roomId) => voidКогда созданы название и краткое содержание диалога
onRoomInfo(info) => voidКогда изменяется информация о диалоге
onShare / onExport(roomId) => voidКогда нажата кнопка «Поделиться» или «Экспорт»
onError(error: Error) => voidКогда возникает ошибка

initialData

ПолеТипОписание
messagestringОбязательно. Первое сообщение
filesFileType[]Файлы Drive, которые отправляются вместе (значение, полученное в onSelect из mountDriveDialog)
promptsobject[]Промпты, которые используются вместе
webSearchbooleanВеб-поиск
deepResearchbooleanDeep Research
effort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Уровень
model{ label, value }Модель, которая отвечает
room_namestringНазвание диалога. Также принимаются roomName, title и name.
folder_idstring | nullПапка для сохранения
hideModePopupbooleanСкрыть всплывающее окно выбора режима

Язык экрана

Экраны Kit отображаются на корейском языке.

Настройки и вход

  • Пользовательские настройки меняются в веб-версии или приложении Keural, экран Kit следует этим настройкам.
  • Вход выполняет ваш сервис, Kit получает только данные вошедшего пользователя.

На этой странице