Bolnee-Chat: 面向商业网站的自托管 RAG 聊天机器人

Bolnee-Chat 是一个专为商业网站集成而设计的自托管检索增强生成 (RAG) 聊天机器人平台。它使用户能够创建基于特定网站内容和上传文档的 AI 机器人,通过简单的两行 JavaScript 代码片段进行部署,并完全托管在用户自己的基础设施上,以避免供应商锁定和按消息计费的问题。

核心功能与 RAG 实现

Bolnee-Chat 使用 RAG 流水线来确保聊天机器人的回答基于提供的源材料,而不是仅仅依赖 LLM 的内部知识。

知识摄取

该平台支持两种主要的添加知识的方法:

  • 网站爬取:一个基于 Python 的爬虫 (crawler/crawler.py) 从 h1h2pli 标签中提取内容。该爬虫遵循 robots.txt 并处理站点地图和主页,以实现内容去重并将其保存到 JSON 文件中。
  • 文件上传:系统摄取 PDF、TXT、MD 和 DOCX 文件。

索引与检索

摄取的数据会被分块并使用全文搜索 (FTS) 存储在 SQLite 数据库中。当用户向机器人提问时,系统会基于这些分块构建有依据的提示词,并为回答中使用的源材料提供引用。如果在数据库中找不到匹配的源,则会触发可配置的备选消息。

技术架构与技术栈

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 URL 转换为存储文件,可通过 /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