Keural Kit
Ein Einbettungsskript, mit dem Keural-Chat-, Drive- und Prompt-Ansichten in Ihren Webdienst eingebunden werden.
Keural Kit bindet Keural-Ansichten mit einem einzigen Skript in Ihre Seite ein. Die Ansichten werden innerhalb eines Shadow DOM gezeichnet, sodass sie sich nicht mit dem CSS Ihrer Seite vermischen. Kit wird bei jeder Bereitstellung der Keural-Webanwendung mit aktualisiert. Wird nach einer Bereitstellung noch eine alte Ansicht angezeigt, leeren Sie den Cache von Browser und CDN und prüfen Sie den Build-Zeitpunkt mit window.KeuralKit.__build.
Kit arbeitet mit der Keural-Anmeldesitzung (Cookie der Keural-API-Domain). userInfo dient nur der Anzeige; der Server identifiziert den Benutzer anhand der Cookie-Sitzung. Um Kit auf der Domain Ihres Dienstes zu nutzen, stimmen Sie vor der Einführung mit Ihrem Keural-Ansprechpartner die Domain-Registrierung und die Anmeldeintegration (z. B. SSO) ab.
Einbinden
Kit wird über die Webadresse der von Ihnen genutzten Keural-Umgebung geladen. Bei keural.ai ist das https://keural.ai; bei einer On-Premises- oder dedizierten Umgebung verwenden Sie die Keural-Webadresse dieser Umgebung. Bevor Sie das Skript einbinden, legen Sie in window.__KEURAL_ENV__ die Serveradressen fest, die Kit aufruft. Alle drei Adressen müssen zur selben Umgebung gehören; Sie erhalten sie bei der Einführung von Ihrem Keural-Ansprechpartner.
<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>| Wert | Beschreibung |
|---|---|
<KEURAL_WEB_URL> | Keural-Webadresse. Beispiel: https://keural.ai |
<KEURAL_API_URL> | Adresse des Keural-API-Servers. Beispiel: https://api.keural.ai |
<KEURAL_AGENT_URL> | Adresse des Keural-Agenten-Servers |
NEXT_PUBLIC_MODE | prd für Produktion, dev für Entwicklung |
Wenn Sie dasselbe Kit auch auf einer zweiten Domain verwenden, tragen Sie zusätzlich NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL und NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL ein. Fehlt einer dieser drei Werte, tritt ein Fehler auf. Die Werte sind https://-Adressen ohne Pfad.
Nach dem Laden des Skripts existiert window.KeuralKit. In SPAs wie React erstellen Sie einen Loader, damit das Skript nur einmal eingebunden wird.
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);
});
}Chat einbinden
const el = document.getElementById('keural-chat')!;
window.KeuralKit.mountChat(el, {
userInfo: { userId: user.id, name: user.name },
colorMode: 'light',
initialData: { message: 'Fasse den Quartalsumsatz zusammen', room_name: 'Quartalsbericht' },
onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
onError: () => router.push('/'),
});
// Beim Verlassen der Ansicht
window.KeuralKit.unmount(el);- Um eine bestehende Unterhaltung zu öffnen, tragen Sie deren ID in
sessionIdein. initialDatafügen Sie nur beim Öffnen einer neuen Unterhaltung hinzu. Wird es beim erneuten Öffnen einer bestehenden Unterhaltung angegeben, wird dieselbe Nachricht erneut gesendet.- Fehlt
userInfo.userId, gilt der Benutzer als nicht angemeldet. Binden Sie die Komponente ein, wenn die Anmeldeinformationen bereitstehen.
Methoden
| Methode | Beschreibung |
|---|---|
mountChat(el, options) | Chat-Ansicht |
mountDrivePage(el, options) | Drive-Ansicht. Erhält die Dateien für eine Frage über onAsk(files) |
mountPromptPage(el, options) | Prompt-Ansicht. Erhält die ausgewählten Prompts über onAsk(prompts) |
mountDriveDialog(el, options) / updateDriveDialog | Dateiauswahl-Fenster für Drive (open erforderlich, onClose, onSelect(files), initialSelected) |
mountPromptDialog(el, options) / updatePromptDialog | Prompt-Auswahlfenster (open erforderlich, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed) |
unmount(el) | Entfernt die eingebundene Ansicht |
Die Methoden mount* und update* erhalten colorMode und userInfo gemeinsam. unmount(el) erhält nur das Element. update* zeichnet die Optionen auf demselben Element neu. Zum Öffnen und Schließen des Fensters ändern Sie den Wert von open und rufen update* auf. Ruft man mount* erneut auf demselben Element auf, wird die vorhandene Ansicht wiederverwendet.
Optionen von mountChat
| Option | Typ | Beschreibung |
|---|---|---|
sessionId | string | ID der zu öffnenden Unterhaltung. Ohne Angabe wird eine neue begonnen |
userInfo | { userId, name?, orgId?, orgName? } | Benutzerinformationen. userId ist erforderlich |
initialData | object | Erste Nachricht einer neuen Unterhaltung. Siehe initialData unten |
colorMode | 'light' | 'dark' | Design. Standard light |
initialEffort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Anfangsstufe. Standard fast |
initialWebSearch | boolean | Mit aktivierter Websuche starten. Standard true |
initialDeepResearch | boolean | Mit aktiviertem Deep Research starten |
hideHomeButton / hideNewChatButton | boolean | Schaltflächen in der Kopfzeile ausblenden |
hideModePopup | boolean | Modusauswahl-Fenster ausblenden |
messageActions | { id, label, onClick(messageId) }[] | Eigene Aktionen zum Antwortmenü hinzufügen |
headerLeftActions / headerRightActions | HeaderLeftAction[] | Eigene Schaltflächen zur Kopfzeile hinzufügen |
onHeaderLeftMount | (el: HTMLElement) => void | Erhält das Element, sobald der linke Bereich der Kopfzeile gezeichnet ist |
mobileMenuItems / mobileBottomActions | array | Menüeinträge oder untere Schaltflächen bei mobiler Breite hinzufügen |
onMobileHomeButton | () => void | Wenn die Start-Schaltfläche bei mobiler Breite gedrückt wird |
chatInputFooter | string | Hinweistext unter dem Eingabefeld |
shareTooltip | string | Tooltip-Text der Teilen-Schaltfläche |
onSessionCreated | (roomId) => void | Wenn eine neue Unterhaltung angelegt wird |
onStreamDone | (roomId) => void | Wenn eine Antwort abgeschlossen ist |
onSummaryDone | (roomId) => void | Wenn Titel oder Zusammenfassung der Unterhaltung erstellt sind |
onRoomInfo | (info) => void | Wenn sich die Informationen zur Unterhaltung ändern |
onShare / onExport | (roomId) => void | Wenn die Teilen- oder Export-Schaltfläche gedrückt wird |
onError | (error: Error) => void | Wenn ein Fehler auftritt |
initialData
| Feld | Typ | Beschreibung |
|---|---|---|
message | string | Erforderlich. Erste Nachricht |
files | FileType[] | Gemeinsam zu sendende Drive-Dateien (der über onSelect von mountDriveDialog erhaltene Wert) |
prompts | object[] | Gemeinsam zu verwendende Prompts |
webSearch | boolean | Websuche |
deepResearch | boolean | Deep Research |
effort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Stufe |
model | { label, value } | Antwortendes Modell |
room_name | string | Name der Unterhaltung. Akzeptiert auch roomName, title und name. |
folder_id | string | null | Ordner zum Speichern |
hideModePopup | boolean | Modusauswahl-Fenster ausblenden |
Sprache der Ansicht
Die Kit-Ansicht wird auf Koreanisch angezeigt.
Einstellungen und Anmeldung
- Benutzereinstellungen ändern Sie in der Keural-Webanwendung oder in der App. Die Kit-Ansicht übernimmt diese Einstellungen.
- Die Anmeldung übernimmt Ihr Dienst, an Kit werden nur die Informationen des angemeldeten Benutzers übergeben.