Keural Kit
Script nhúng đưa màn hình chat, Drive và prompt của Keural vào dịch vụ web của bạn.
Keural Kit đưa các màn hình Keural vào trang của bạn chỉ bằng một script. Các màn hình được vẽ trong Shadow DOM, nên không bị lẫn với CSS của trang bạn. Kit được cập nhật cùng lúc khi ứng dụng web Keural được triển khai. Nếu sau khi triển khai vẫn thấy màn hình cũ, hãy xóa cache của trình duyệt và CDN, rồi kiểm tra thời điểm build bằng window.KeuralKit.__build.
Kit hoạt động bằng phiên đăng nhập Keural (cookie của tên miền API Keural). userInfo chỉ dùng để hiển thị; người dùng được xác định qua phiên cookie. Để dùng trên tên miền dịch vụ của bạn, hãy thống nhất với người liên hệ Keural về đăng ký tên miền và tích hợp đăng nhập (ví dụ SSO) trước khi triển khai.
Tải script
Kit được tải từ địa chỉ web của môi trường Keural bạn đang dùng. Nếu dùng keural.ai thì là https://keural.ai; với môi trường on-premise hoặc môi trường riêng, hãy dùng địa chỉ web Keural của môi trường đó. Trước khi chèn script, hãy đặt địa chỉ máy chủ mà Kit sẽ gọi vào window.__KEURAL_ENV__. Cả ba địa chỉ phải thuộc cùng một môi trường; hãy lấy từ người liên hệ Keural khi triển khai.
<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>| Giá trị | Mô tả |
|---|---|
<KEURAL_WEB_URL> | Địa chỉ web Keural. Ví dụ: https://keural.ai |
<KEURAL_API_URL> | Địa chỉ máy chủ API Keural. Ví dụ: https://api.keural.ai |
<KEURAL_AGENT_URL> | Địa chỉ máy chủ agent Keural |
NEXT_PUBLIC_MODE | prd cho môi trường vận hành, dev cho môi trường phát triển |
Nếu dùng cùng Kit trên tên miền thứ hai, hãy đặt đủ ba giá trị NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL và NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL. Thiếu bất kỳ giá trị nào sẽ gây lỗi. Các giá trị là địa chỉ https:// không có đường dẫn.
Sau khi script tải xong, window.KeuralKit được tạo ra. Trong SPA như React, hãy dùng bộ tải để script chỉ được tải một lần.
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);
});
}Nhúng chat
const el = document.getElementById('keural-chat')!;
window.KeuralKit.mountChat(el, {
userInfo: { userId: user.id, name: user.name },
colorMode: 'light',
initialData: { message: 'Tóm tắt doanh thu quý này', room_name: 'Báo cáo quý' },
onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
onError: () => router.push('/'),
});
// Khi rời khỏi màn hình
window.KeuralKit.unmount(el);- Để mở một cuộc trò chuyện đã có, hãy đặt ID cuộc trò chuyện vào
sessionId. - Chỉ đưa
initialDatavào khi mở một cuộc trò chuyện mới. Nếu đưa vào khi mở lại cuộc trò chuyện đã có, cùng một tin nhắn sẽ được gửi lại. - Nếu thiếu
userInfo.userId, người dùng được coi là chưa đăng nhập. Hãy gắn component sau khi thông tin đăng nhập đã sẵn sàng.
Phương thức
| Phương thức | Mô tả |
|---|---|
mountChat(el, options) | Màn hình chat |
mountDrivePage(el, options) | Màn hình Drive. Nhận các tệp cần hỏi qua onAsk(files) |
mountPromptPage(el, options) | Màn hình prompt. Nhận các prompt đã chọn qua onAsk(prompts) |
mountDriveDialog(el, options) / updateDriveDialog | Cửa sổ chọn tệp Drive (bắt buộc open, onClose, onSelect(files), initialSelected) |
mountPromptDialog(el, options) / updatePromptDialog | Cửa sổ chọn prompt (bắt buộc open, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed) |
unmount(el) | Gỡ màn hình đã gắn |
Các phương thức mount* và update* nhận colorMode và userInfo cùng lúc. unmount(el) chỉ nhận phần tử. update* vẽ lại tùy chọn trên cùng phần tử với giá trị mới. Để mở và đóng cửa sổ, hãy đổi giá trị open rồi gọi update*. Gọi lại mount* trên cùng phần tử sẽ dùng lại màn hình hiện có.
Tùy chọn của mountChat
| Tùy chọn | Kiểu | Mô tả |
|---|---|---|
sessionId | string | ID cuộc trò chuyện sẽ mở. Nếu bỏ trống, một cuộc trò chuyện mới được tạo |
userInfo | { userId, name?, orgId?, orgName? } | Thông tin người dùng. userId là bắt buộc |
initialData | object | Tin nhắn đầu tiên của cuộc trò chuyện mới. Xem initialData bên dưới |
colorMode | 'light' | 'dark' | Chủ đề. Mặc định light |
initialEffort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Mức ban đầu. Mặc định fast |
initialWebSearch | boolean | Bắt đầu với tìm kiếm web đang bật. Mặc định true |
initialDeepResearch | boolean | Bắt đầu với Deep Research đang bật |
hideHomeButton / hideNewChatButton | boolean | Ẩn các nút trên tiêu đề |
hideModePopup | boolean | Ẩn cửa sổ chọn chế độ |
messageActions | { id, label, onClick(messageId) }[] | Thêm thao tác riêng vào menu của câu trả lời |
headerLeftActions / headerRightActions | HeaderLeftAction[] | Thêm nút riêng vào tiêu đề |
onHeaderLeftMount | (el: HTMLElement) => void | Nhận phần tử khi vùng bên trái của tiêu đề được vẽ |
mobileMenuItems / mobileBottomActions | array | Thêm mục menu hoặc nút dưới cùng khi ở màn hình hẹp |
onMobileHomeButton | () => void | Khi nhấn nút trang chủ ở màn hình hẹp |
chatInputFooter | string | Dòng hướng dẫn bên dưới ô nhập |
shareTooltip | string | Chú thích của nút chia sẻ |
onSessionCreated | (roomId) => void | Khi một cuộc trò chuyện mới được tạo |
onStreamDone | (roomId) => void | Khi một câu trả lời kết thúc |
onSummaryDone | (roomId) => void | Khi tiêu đề hoặc tóm tắt cuộc trò chuyện được tạo |
onRoomInfo | (info) => void | Khi thông tin cuộc trò chuyện thay đổi |
onShare / onExport | (roomId) => void | Khi nhấn nút chia sẻ hoặc xuất |
onError | (error: Error) => void | Khi xảy ra lỗi |
initialData
| Trường | Kiểu | Mô tả |
|---|---|---|
message | string | Bắt buộc. Tin nhắn đầu tiên |
files | FileType[] | Tệp Drive gửi kèm (giá trị nhận từ onSelect của mountDriveDialog) |
prompts | object[] | Prompt dùng kèm |
webSearch | boolean | Tìm kiếm web |
deepResearch | boolean | Deep Research |
effort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Mức |
model | { label, value } | Mô hình trả lời |
room_name | string | Tên cuộc trò chuyện. Cũng nhận roomName, title và name. |
folder_id | string | null | Thư mục để lưu |
hideModePopup | boolean | Ẩn cửa sổ chọn chế độ |
Ngôn ngữ màn hình
Màn hình Kit hiển thị bằng tiếng Hàn.
Cài đặt và đăng nhập
- Thiết lập người dùng thay đổi trên ứng dụng web hoặc ứng dụng Keural, và màn hình Kit theo các thiết lập đó.
- Đăng nhập do dịch vụ của bạn xử lý, Kit chỉ nhận thông tin người dùng đã đăng nhập.