@krytabo/ai-chat-vue3

Vue 3 UI widget for AI Chat.
2,459
Install
npm install @krytabo/ai-chat-vue3
Latest Version:0.1.12
Vue:3
Last Updated:Jan 28, 2026
Links: npm
Maintainer: krytabo

@krytabo/ai-chat-vue3

安裝

yarn add @krytabo/ai-chat-vue3

Live2D 資源

Live2D 模型與 live2dcubismcore.min.js 需要被放到「使用者專案」的 public/Live2D 才能透過 URL 取得。

套件安裝時會自動複製到 public/Live2D。在 monorepo 環境下,若偵測到 apps/vue3/public,會優先複製到該位置。你也可以手動執行:

npx ai-chat-vue3-copy-live2d

如果你的 public 不在專案根目錄,可用 --dest 指定:

npx ai-chat-vue3-copy-live2d --dest /path/to/your/project

也可以用環境變數控制:

AI_CHAT_VUE3_ASSETS_DEST=/path/to/your/project npx ai-chat-vue3-copy-live2d
AI_CHAT_VUE3_ASSETS_DISABLE=1 npx ai-chat-vue3-copy-live2d

Vite 設定(常見 CJS/ESM 相容問題)

若在使用 Vite 專案出現類似 does not provide an export named 'default' 的錯誤,請加入以下設定:

// vite.config.(js|mjs)
export default defineConfig({
  optimizeDeps: {
    include: ["object-assign", "url", "eventemitter3", "earcut"]
  },
  ssr: {
    noExternal: ["@krytabo/ai-chat-vue3"]
  }
});

Live2D Core 引入

請在專案的 index.html 加上:

<script src="/Live2D/live2dcubismcore.min.js"></script>

1. 基本用法(懸浮按鈕)

直接在頁面引入,它會自己固定在右下角,可以拖來拖去吸附在瀏覽器邊。

<template>
  <AiChatWidget url="wss://你的後端WebSocket網址/ws/audio" />
</template>

<script setup>
import { AiChatWidget } from "@krytabo/ai-chat-vue3";
</script>

2. 獨立頁面模式(全螢幕)

如果你想要點擊按鈕後,不是打開一個小視窗,而是跳轉到一個獨立的聊天頁面

第一步:在首頁放按鈕 設定 openMode="page",並告訴它要跳轉去哪 (pageUrl)。

<!-- App.vue -->
<AiChatWidget url="wss://..." openMode="page" pageUrl="/ai-chat" />

第二步:建立聊天頁面 在你路由設定的頁面裡(例如 views/AiChat.vue),加上 layout="fullscreen"。

<!-- views/AiChat.vue -->
<template>
  <AiChatWidget url="wss://..."  layout="fullscreen" />
</template>

Props

參數 預設值 說明
url - 完整的 WebSocket 網址,例如 wss://api.example.com/ws。
basePath /ws 如果沒給完整 url,就會用目前的網域 + 這個路徑。
openMode panel panel (展開小面板) 或 page (開新分頁)。
pageUrl /ai-chat 如果是用 page 模式,要跳轉去哪裡。
layout floating floating (懸浮按鈕) 或 fullscreen (全螢幕)。
mergeAgentResponses true 是否將回應內容全部合併成一句話(包含語音)
maxRecordSeconds 60 錄音最長可以錄幾秒。
showClearHistory true 是否顯示清空歷史紀錄按鈕
enableHistoryStorage true 是否啟用 IndexedDB 歷史紀錄儲存

Slots

Slot 名稱 用途 預設內容
fab-label 懸浮按鈕上的字 AI
header-title 面板最上面的標題 AI Chat

範例:

<AiChatWidget ...>
  <template #fab-label>
    <span>客服</span>
  </template>
  <template #header-title>
    智慧小幫手
  </template>
</AiChatWidget>

Version History

Version Released Vue License
0.1.12 ^3.0.0
0.1.11 ^3.0.0
0.1.10 ^3.0.0
0.1.9 ^3.0.0
0.1.8 ^3.0.0