本文へスキップ
KeuralDocs
開発者向け

Keural Kit

お使いのWebサービスの中に、Keuralのチャット・Drive・プロンプトの画面を埋め込むスクリプトです。

Keural Kitは、1つのスクリプトでKeuralの画面をお使いのページに埋め込みます。画面はShadow DOMの中に描画されるため、お使いのページのCSSと混ざることはありません。KitはKeuralのウェブ配布時に一緒に更新されます。配布後も古い画面が表示される場合は、ブラウザーとCDNのキャッシュを消去し、window.KeuralKit.__buildでビルド時刻を確認します。

Kitは、Keuralのログインセッション(Keural APIドメインのCookie)で動作します。userInfoは画面の表示用で、ユーザーの確認はCookieのセッションで行います。お使いのサービスのドメインで使うには、導入の前に、ドメインの登録とログイン連携(SSOなど)をKeuralの担当者と相談してください。

読み込み

Kitは、お使いのKeural環境のウェブアドレスから読み込みます。keural.aiの場合はhttps://keural.ai、オンプレミスや専用環境の場合は、その環境のKeuralウェブアドレスです。スクリプトより前に、Kitが呼び出すサーバーのアドレスをwindow.__KEURAL_ENV__に設定します。3つのアドレスは同じ環境のものである必要があり、導入時に担当者から受け取ります。

<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>KeuralのAPIサーバーのアドレス。例: https://api.keural.ai
<KEURAL_AGENT_URL>Keuralエージェントサーバーのアドレス
NEXT_PUBLIC_MODE本番環境はprd、開発環境はdev

同じKitを2つ目のドメインでも使うには、NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL、NEXT_PUBLIC_ADDITIONAL_API_BASE_URL、NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URLの3つの値をすべて設定します。1つでも欠けるとエラーになります。値はパスのないhttps://アドレスです。

スクリプトが読み込まれると、window.KeuralKitが生成されます。ReactなどのSPAでは、スクリプトが1回だけ読み込まれるように、ローダーを作って使います。

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);
  • 既存の会話を開くには、sessionIdに会話IDを入れます。
  • initialDataは新しい会話を開くときだけ入れます。既存の会話を開くときに入れると、同じメッセージが再び送信されます。
  • userInfo.userIdがない場合は、未ログインとして扱われます。ログイン情報の準備ができてから埋め込みます。

メソッド

メソッド説明
mountChat(el, options)チャットの画面
mountDrivePage(el, options)Driveの画面。onAsk(files)で、質問するファイルを受け取ります
mountPromptPage(el, options)プロンプトの画面。onAsk(prompts)で、選んだプロンプトを受け取ります
mountDriveDialog(el, options) / updateDriveDialogDriveのファイル選択ウィンドウ(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のオプション

オプション型説明
sessionIdstring開く会話のID。ない場合は新しい会話
userInfo{ userId, name?, orgId?, orgName? }ユーザー情報。userIdは必須
initialDataobject新しい会話の最初のメッセージ。下のinitialDataを参照
colorMode'light' | 'dark'テーマ。既定はlight
initialEffort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'最初のレベル。既定はfast
initialWebSearchbooleanウェブ検索をオンにした状態で開始。既定はtrue
initialDeepResearchbooleanDeep 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のファイル(mountDriveDialogのonSelectで受け取った値)
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には、ログインしたユーザーの情報だけを渡します。

このページの内容