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_MODE | prd สำหรับใช้งานจริง 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
| ตัวเลือก | ชนิด | คำอธิบาย |
|---|---|---|
sessionId | string | ID การสนทนาที่จะเปิด หากไม่มีจะเป็นการสนทนาใหม่ |
userInfo | { userId, name?, orgId?, orgName? } | ข้อมูลผู้ใช้ userId จำเป็น |
initialData | object | ข้อความแรกของการสนทนาใหม่ ดู initialData ด้านล่าง |
colorMode | 'light' | 'dark' | ธีม ค่าเริ่มต้น light |
initialEffort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | ระดับเริ่มต้น ค่าเริ่มต้น fast |
initialWebSearch | boolean | เริ่มโดยเปิดการค้นหาเว็บ ค่าเริ่มต้น true |
initialDeepResearch | boolean | เริ่มโดยเปิด Deep Research |
hideHomeButton / hideNewChatButton | boolean | ซ่อนปุ่มในส่วนหัว |
hideModePopup | boolean | ซ่อนป๊อปอัปเลือกโหมด |
messageActions | { id, label, onClick(messageId) }[] | เพิ่มการทำงานของคุณในเมนูคำตอบ |
headerLeftActions / headerRightActions | HeaderLeftAction[] | เพิ่มปุ่มของคุณในส่วนหัว |
onHeaderLeftMount | (el: HTMLElement) => void | รับองค์ประกอบของส่วนซ้ายของหัวเมื่อวาดเสร็จ |
mobileMenuItems / mobileBottomActions | array | เพิ่มเมนูและปุ่มด้านล่างเมื่ออยู่ในความกว้างแบบมือถือ |
onMobileHomeButton | () => void | เมื่อกดปุ่มหน้าแรกในความกว้างแบบมือถือ |
chatInputFooter | string | ข้อความแนะนำใต้ช่องพิมพ์ |
shareTooltip | string | ข้อความทูลทิปของปุ่มแชร์ |
onSessionCreated | (roomId) => void | เมื่อสร้างการสนทนาใหม่ |
onStreamDone | (roomId) => void | เมื่อคำตอบสิ้นสุด |
onSummaryDone | (roomId) => void | เมื่อสร้างชื่อและสรุปการสนทนาเสร็จ |
onRoomInfo | (info) => void | เมื่อข้อมูลการสนทนาเปลี่ยน |
onShare / onExport | (roomId) => void | เมื่อกดปุ่มแชร์หรือส่งออก |
onError | (error: Error) => void | เมื่อเกิดข้อผิดพลาด |
initialData
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
message | string | จำเป็น ข้อความแรก |
files | FileType[] | ไฟล์ Drive ที่ส่งไปด้วย (ค่าที่ได้จาก onSelect ของ mountDriveDialog) |
prompts | object[] | prompt ที่ใช้ร่วมกัน |
webSearch | boolean | การค้นหาเว็บ |
deepResearch | boolean | Deep Research |
effort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | ระดับ |
model | { label, value } | โมเดลที่จะตอบ |
room_name | string | ชื่อการสนทนา รับ roomName, title และ name ด้วย |
folder_id | string | null | โฟลเดอร์ที่จะบันทึกไว้ |
hideModePopup | boolean | ซ่อนป๊อปอัปเลือกโหมด |
ภาษาของหน้าจอ
หน้าจอของ Kit แสดงเป็นภาษาเกาหลี
การตั้งค่าและการเข้าสู่ระบบ
- การตั้งค่าผู้ใช้จะเปลี่ยนในเว็บหรือแอปของ Keural และหน้าจอ Kit จะทำตามการตั้งค่านั้น
- การเข้าสู่ระบบจัดการโดยบริการของคุณ Kit รับเฉพาะข้อมูลผู้ใช้ที่เข้าสู่ระบบแล้ว