✅ 已成功實作完整的 embedding fallback 機制
- 啟動開發服務器:
pnpm run dev - 訪問 http://localhost:5173/chatbot-test/
- 點擊右上角設定按鈕 ⚙️
- 點擊「🧪 Embedding 測試」按鈕
- 在測試頁面點擊「開始測試」
// 在開發者工具控制台中執行
import {
generateEmbeddingWithTimeout,
generateEmbeddingRobust,
} from './services/embeddingService.js';
// 測試正常 timeout
const result1 = await generateEmbeddingWithTimeout('測試文本', 'document', 5);
console.log('正常結果:', result1);
// 測試快速 fallback
const result2 = await generateEmbeddingWithTimeout('測試文本', 'document', 0.1);
console.log('Fallback 結果:', result2);- 第一層: 瀏覽器 Embedding (WebGPU → CPU)
- 第二層: 簡單文本相似度算法
- 超時控制: 5秒自動切換
timeoutSeconds: 超時時間 (1-30秒)fallbackToSimple: 是否啟用簡單 fallbackshowMethodUsed: 顯示調試信息- 自動保存到 localStorage
- 設定頁面: 完整的配置選項
- 測試頁面: 實時測試所有 fallback 情況
- 狀態顯示: 可選的方法和性能信息
- 輸入驗證
- 多層次容錯
- 詳細錯誤日誌
- 零向量最後防線
services/embeddingService.ts # 新增 fallback 函數
components/EmbeddingFallbackTest.tsx # 測試頁面
components/EmbeddingStatus.tsx # 狀態顯示組件
components/settings/EmbeddingSettings.tsx # 設定組件
types.ts # 新增配置接口
components/core/AppContext.tsx # 添加配置管理
components/core/AppShell.tsx # 添加測試頁面路由
components/core/AppContext.types.ts # 添加類型定義
services/ragQueryService.ts # 使用新的 fallback
services/ragCacheManagerV2.ts # 使用新的 fallback
components/AssistantEditor.tsx # 使用新的 fallback
components/assistant/RAGFileUpload.tsx # 使用新的 fallback
- 快速響應: 5秒內必定完成
- 透明切換: 用戶無感知切換
- 性能監控: 記錄處理時間和方法
- 內存效率: 384維向量兼容性
- 錯誤恢復: 自動降級機制
- 設備兼容性: 確保所有設備都能運行 embedding
- 網絡不穩: 瀏覽器模型加載失敗時的備案
- 性能調優: 可調整 timeout 適應不同設備
- 調試開發: 顯示使用的方法和性能數據
- ✅ 正常 embedding 生成
- ✅ 超時觸發 fallback
- ✅ 簡單文本相似度算法
- ✅ 向量維度兼容性
- ✅ 配置持久化
- ✅ 錯誤處理
- ✅ 類型安全
- 添加更多 embedding 模型選項
- 實現自適應 timeout 調整
- 添加性能統計和分析
- 支持自定義相似度算法
現在可以安全地在任何設備上使用 embedding 功能! 🎉