ข้ามไปยังเนื้อหา
KeuralDocs
นักพัฒนา

Keural Kit

สคริปต์ฝัง (embed) ที่นำหน้าจอแชต Drive และ prompt ของ Keural ไปใส่ในบริการเว็บของคุณ

Keural Kit นำหน้าจอของ Keural ไปใส่ในหน้าของคุณด้วยสคริปต์เพียงหนึ่งไฟล์ หน้าจอวาดอยู่ภายใน Shadow DOM จึงไม่ปะปนกับ CSS ของหน้าของคุณ Kit อัปเดตพร้อมการเผยแพร่เว็บ Keural หากหลังเผยแพร่ยังเห็นหน้าจอเดิม ให้ล้างแคชเบราว์เซอร์และ CDN แล้วตรวจสอบเวลาบิลด์ด้วย window.KeuralKit.__build

Kit ทำงานด้วยเซสชันการเข้าสู่ระบบของ Keural (คุกกี้ของโดเมน API ของ Keural) userInfo ใช้สำหรับแสดงผลเท่านั้น การยืนยันผู้ใช้ใช้เซสชันคุกกี้ หากต้องการใช้ในโดเมนของบริการ ให้ตกลงเรื่องการลงทะเบียนโดเมนและการเชื่อมการเข้าสู่ระบบ (เช่น SSO) กับผู้รับผิดชอบของ Keural ก่อนนำไปใช้

การโหลด

Kit โหลดจากที่อยู่เว็บของสภาพแวดล้อม Keural ที่คุณใช้ หากใช้ keural.ai จะเป็น https://keural.ai ส่วนสภาพแวดล้อมแบบ on-premise หรือแบบเฉพาะให้ใช้ที่อยู่เว็บ Keural ของสภาพแวดล้อมนั้น ก่อนโหลดสคริปต์ ให้ตั้งค่าที่อยู่เซิร์ฟเวอร์ที่ Kit จะเรียกใน window.__KEURAL_ENV__ ที่อยู่ทั้งสามต้องเป็นของสภาพแวดล้อมเดียวกัน และรับจากผู้รับผิดชอบของ 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 จะถือว่ายังไม่ได้เข้าสู่ระบบ ให้ mount หลังจากข้อมูลการเข้าสู่ระบบพร้อมแล้ว

เมธอด

เมธอดคำอธิบาย
mountChat(el, options)หน้าจอแชต
mountDrivePage(el, options)หน้าจอ Drive รับไฟล์ที่จะถามผ่าน onAsk(files)
mountPromptPage(el, options)หน้าจอ prompt รับ prompt ที่เลือกผ่าน onAsk(prompts)
mountDriveDialog(el, options) / updateDriveDialogหน้าต่างเลือกไฟล์ Drive (open จำเป็น, onClose, onSelect(files), initialSelected)
mountPromptDialog(el, options) / updatePromptDialogหน้าต่างเลือก prompt (open จำเป็น, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed)
unmount(el)ลบหน้าจอที่ mount ไว้

เมธอด 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[]prompt ที่ใช้ร่วมกัน
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 รับเฉพาะข้อมูลผู้ใช้ที่เข้าสู่ระบบแล้ว

ในหน้านี้