Bolnee-Chat: 適用於企業網站的自託管 RAG 聊天機器人

Bolnee-Chat 是一個專為企業網站整合而設計的自託管檢索增強生成 (RAG) 聊天機器人平台。它讓使用者能夠建立基於特定網站內容和上傳文件的 AI 機器人,並透過簡單的兩行 JavaScript 程式碼片段進行部署,且完全託管在使用者自己的基礎設施上,以避免供應商鎖定和按訊息計費的問題。

核心功能與 RAG 實作

Bolnee-Chat 使用 RAG 管線來確保聊天機器人的回應是基於提供的來源材料,而非僅僅依賴 LLM 的內部知識。

知識攝取

該平台支援兩種主要的知識添加方式:

  • 網站爬蟲: 一個基於 Python 的爬蟲 (crawler/crawler.py) 會從 h1h2pli 標籤中提取內容。該爬蟲會遵循 robots.txt 並處理網站地圖 (sitemaps) 和首頁,以進行去重並將內容儲存到 JSON 檔案中。
  • 檔案上傳: 系統會攝取 PDF、TXT、MD 和 DOCX 檔案。

索引與檢索

攝取的數據會被切片 (chunked) 並使用全文檢索 (FTS) 儲存在 SQLite 資料庫中。當使用者查詢機器人時,系統會根據這些切片建立具備根據性的提示詞 (grounded prompts),並為回應中使用的來源提供引用。如果在資料庫中找不到匹配的來源,則會觸發可配置的備用訊息。

技術架構與技術棧

Bolnee-Chat 使用現代的 TypeScript 和 Python 技術棧進行建構,並利用輕量級資料庫以實現簡易部署。

技術棧

  • 前端: React 19、Vite、TypeScript 和 Tailwind CSS。
  • 後端: Express (Node.js 18+) 和 Python 3.10+ (用於爬蟲)。
  • 資料庫: SQLite (透過 better-sqlite3) 用於儲存聊天機器人、來源、切片和訊息。
  • LLM 整合: 支援任何與 OpenAI 相容的提供商,包括 OpenRouter、OpenAI、Groq、Ollama 和 vLLM。

安全性與儲存

  • API Key 加密: 提供商的 API 金鑰和基礎 URL 會使用 AES-256-GCM 進行加密,且絕不會在客戶端嵌入式程式碼片段中洩露。
  • 頭像管理: 使用者上傳的頭像 (PNG、JPG、WEBP,最高 2MB) 會從 data URLs 轉換為儲存檔案,並可透過 /api/public/avatar/:id 進行存取。

部署與整合

該平台旨在於各種託管環境中進行快速部署,包括 Vercel 和 Cloudflare Pages。

整合流程

整合是透過在網站的 </body> 標籤結束前添加一個配置物件和一個 script 標籤來完成的:

<script>
  window.BotConfig = {
    botName: "Customer Bot",
    avatar: "https://your-domain/api/public/avatar/BOT_ID",
    chatUrl: "https://your-domain/api/public/chat/BOT_ID",
    accentColor: "#111111",
    greeting: "Hi! How can I help?",
    theme: "dark"
  };
</script>
<script src="https://your-domain/chatbot-widget.js" async></script>

小工具功能

  • 持久性: 使用 localStorage 儲存 VISITOR_ID 和聊天紀錄,確保問候語只會出現一次,且對話話語在不同工作階段中得以持續。
  • 串流: 實作了 Server-Sent Events (SSE) 以實現即時回應串流。
  • UI/UX: 特點是右下角有一個懸浮氣泡、一個滑動視窗 (360x520),以及主題感知樣式 (light、dark 或 auto)。

管理員管理

Bolnee-Chat 包含一個全面的儀表板,用於管理多個機器人並監控互動。

機器人管理

管理員可以自定義機器人的外觀 (名稱、頭像、強調色和主題),並透過直接從 API 獲取可用模型來配置 LLM 提供商。

分析與匯出

訪客聊天紀錄會根據 visitorId 和 IP 地址進行分組。儀表板提供關於總訊息數和活躍工作階段 (定義為過去 5 分鐘內的不同訪客) 的統計數據。聊天紀錄可以匯出為 CSV (Excel)、JSON 或 PDF 格式。

Sources