Ir para o conteúdo
KeuralDocs
Desenvolvedores

Keural Kit

Script de incorporação que coloca as telas de chat, Drive e prompts do Keural dentro do seu serviço web.

O Keural Kit coloca telas do Keural na sua página com um único script. As telas são desenhadas dentro de um Shadow DOM, por isso não se misturam ao CSS da sua página. O Kit é atualizado a cada implantação da aplicação web do Keural. Se uma tela antiga continuar aparecendo depois de uma implantação, limpe o cache do navegador e da CDN e confira a data da compilação com window.KeuralKit.__build.

O Kit funciona com a sessão de login do Keural (cookie do domínio da API do Keural). userInfo é usado apenas para exibição na tela, e a identificação do usuário é feita pela sessão em cookie. Para usar no domínio do seu serviço, alinhe com o seu contato no Keural o registro do domínio e a integração de login (como SSO) antes da adoção.

Carregamento

O Kit é carregado do endereço web do ambiente Keural que você usa. Com keural.ai, o endereço é https://keural.ai; em ambientes locais ou dedicados, use o endereço web desse ambiente. Antes de incluir o script, defina em window.__KEURAL_ENV__ os endereços de servidor que o Kit vai chamar. Os três endereços devem ser do mesmo ambiente, e você os recebe do seu contato no Keural durante a adoção.

<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>
ValorDescrição
<KEURAL_WEB_URL>Endereço web do Keural. Exemplo: https://keural.ai
<KEURAL_API_URL>Endereço do servidor de API do Keural. Exemplo: https://api.keural.ai
<KEURAL_AGENT_URL>Endereço do servidor de agentes do Keural
NEXT_PUBLIC_MODEprd para produção, dev para desenvolvimento

Para usar o mesmo Kit em um segundo domínio, defina os três valores NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL e NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL. Se algum deles faltar, ocorre um erro. Os valores são endereços https:// sem caminho.

Quando o script é carregado, window.KeuralKit é criado. Em SPAs como React, use um carregador para que o script seja carregado apenas uma vez.

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

Incorporar o chat

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

window.KeuralKit.mountChat(el, {
  userInfo: { userId: user.id, name: user.name },
  colorMode: 'light',
  initialData: { message: 'Resuma a receita deste trimestre', room_name: 'Relatório trimestral' },
  onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
  onError: () => router.push('/'),
});

// Ao sair da tela
window.KeuralKit.unmount(el);
  • Para abrir uma conversa existente, informe o ID da conversa em sessionId.
  • Inclua initialData somente ao abrir uma conversa nova. Se ele for incluído ao abrir uma conversa existente, a mesma mensagem é enviada novamente.
  • Se userInfo.userId estiver ausente, o usuário é tratado como não logado. Monte o componente depois que as informações de login estiverem prontas.

Métodos

MétodoDescrição
mountChat(el, options)Tela de chat
mountDrivePage(el, options)Tela do Drive. Recebe os arquivos sobre os quais perguntar por meio de onAsk(files)
mountPromptPage(el, options)Tela de prompts. Recebe os prompts escolhidos por meio de onAsk(prompts)
mountDriveDialog(el, options) / updateDriveDialogJanela de seleção de arquivos do Drive (open obrigatório, onClose, onSelect(files), initialSelected)
mountPromptDialog(el, options) / updatePromptDialogJanela de seleção de prompts (open obrigatório, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed)
unmount(el)Remove a tela montada

Os métodos mount* e update* recebem colorMode e userInfo juntos, e unmount(el) recebe apenas o elemento. update* redesenha o mesmo elemento com as novas opções. Para abrir ou fechar a janela, altere o valor de open e chame update*. Se mount* for chamado novamente no mesmo elemento, a tela existente é reaproveitada.

Opções do mountChat

OpçãoTipoDescrição
sessionIdstringID da conversa a abrir. Se omitido, é uma conversa nova
userInfo{ userId, name?, orgId?, orgName? }Informações do usuário. userId é obrigatório
initialDataobjectPrimeira mensagem de uma conversa nova. Veja initialData abaixo
colorMode'light' | 'dark'Tema. Padrão light
initialEffort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Nível inicial. Padrão fast
initialWebSearchbooleanIniciar com a pesquisa na web ativada. Padrão true
initialDeepResearchbooleanIniciar com o Deep Research ativado
hideHomeButton / hideNewChatButtonbooleanOcultar os botões do cabeçalho
hideModePopupbooleanOcultar a janela de seleção de modo
messageActions{ id, label, onClick(messageId) }[]Adicionar ações próprias ao menu da resposta
headerLeftActions / headerRightActionsHeaderLeftAction[]Adicionar botões próprios ao cabeçalho
onHeaderLeftMount(el: HTMLElement) => voidRecebe o elemento quando a área esquerda do cabeçalho é desenhada
mobileMenuItems / mobileBottomActionsarrayAdicionar itens de menu ou botões inferiores em larguras móveis
onMobileHomeButton() => voidQuando o botão de início é pressionado em larguras móveis
chatInputFooterstringTexto de aviso abaixo da caixa de entrada
shareTooltipstringTexto da dica do botão de compartilhar
onSessionCreated(roomId) => voidQuando uma conversa nova é criada
onStreamDone(roomId) => voidQuando uma resposta termina
onSummaryDone(roomId) => voidQuando o título ou o resumo da conversa é criado
onRoomInfo(info) => voidQuando as informações da conversa mudam
onShare / onExport(roomId) => voidQuando o botão de compartilhar ou exportar é pressionado
onError(error: Error) => voidQuando ocorre um erro

initialData

CampoTipoDescrição
messagestringObrigatório. Primeira mensagem
filesFileType[]Arquivos do Drive enviados junto (o valor recebido em onSelect de mountDriveDialog)
promptsobject[]Prompts usados junto
webSearchbooleanPesquisa na web
deepResearchbooleanDeep Research
effort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Nível
model{ label, value }Modelo que responde
room_namestringNome da conversa. Também aceita roomName, title e name.
folder_idstring | nullPasta onde salvar
hideModePopupbooleanOcultar a janela de seleção de modo

Idioma da tela

A tela do Kit é exibida em coreano.

Configurações e login

  • As configurações do usuário são alteradas na aplicação web ou no app do Keural, e a tela do Kit segue essas configurações.
  • O login é tratado pelo seu serviço, e ao Kit são enviadas apenas as informações do usuário logado.

Nesta página