Bolnee-Chat: 面向商业网站的自托管 RAG 聊天机器人
Bolnee-Chat 是一个专为商业网站集成而设计的自托管检索增强生成 (RAG) 聊天机器人平台。它使用户能够创建基于特定网站内容和上传文档的 AI 机器人,通过简单的两行 JavaScript 代码片段进行部署,并完全托管在用户自己的基础设施上,以避免供应商锁定和按消息计费的问题。
核心功能与 RAG 实现
Bolnee-Chat 使用 RAG 流水线来确保聊天机器人的回答基于提供的源材料,而不是仅仅依赖 LLM 的内部知识。
知识摄取
该平台支持两种主要的添加知识的方法:
- 网站爬取:一个基于 Python 的爬虫 (
crawler/crawler.py) 从h1、h2、p和li标签中提取内容。该爬虫遵循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 格式。