乐于分享
好东西不私藏

揭秘开源AI智能客服系统:如何让企业服务效率翻10倍,成本降一半?

揭秘开源AI智能客服系统:如何让企业服务效率翻10倍,成本降一半?
揭秘开源AI智能客服系统:如何让企业服务效率翻10倍,成本降一半?

原文链接https://b.5uuc.cn/html/aihub/71.html

AI-CS 智能客服系统

开源的 AI 客服系统:AI + 人工一体、可私有化部署、可配置、可观测。

适合把“官网右下角客服小窗”与“客服工作台”一起落地的团队。

他适合做什么

访客侧(嵌入小窗)

  • 右下角聊天小窗,可嵌入任意网站(iframe 方式)。

  • 支持 AI 模式 / 人工模式切换、消息提示音、文件上传。

  • 可选“本回合联网搜索”开关(是否对访客展示可在后台控制)。

客服侧(工作台)

  • 会话列表、实时消息(WebSocket)、未读角标提示。

  • 支持“实时共享草稿输入”(双方未发送内容可实时可见)。

  • 多模型管理(文本 / 绘画等)与对话配置。

  • 提示词配置(Prompt 管理)。

  • 知识库管理 + RAG(向量检索,可按需启用;向量库不可用时可不影响启动)。

  • 日志中心:结构化日志落库,支持按级别 / 分类 / 事件 / trace_id / 关键字筛选排障。

  • 数据报表:按日 / 区间查看访客打开小窗、会话与消息、AI 回复与失败率、知识库命中率、转人工等指标。

官网与SEO(面向获客)

  • 蓝白主题官网首页,分段渐变与滚动进场动效。

  • metadata / Open Graph / JSON-LD / sitemap.xml / robots.txt,便于搜索引擎收录与社交分享。

可选联网搜索(Web Search)

  • 支持 Serper:MCP 接入(SERPER_MCP_URL)或直连 API(SERPER_API_KEY)。

  • 也支持“厂商内置 web search”(由模型自己决定是否搜)的 function calling 流程(按模型能力与供应商而定)。


快速开始(只维护根目录 .env

统一配置真源:只维护项目根目录 /.env。Docker 与本地启动都读这一份。

初始化:复制 /.env.example 为 /.env 并填写必填项。

方式 A:预构建镜像部署(推荐,最省事)

1)准备配置

Bash

git clone https://github.com/2930134478/AI-CS.gitcd AI-CScp .env.example .env

至少要改(必填):

  • 数据库:MYSQL_ROOT_PASSWORDDB_PASSWORD

  • 管理员:ADMIN_PASSWORD

  • 安全密钥:ENCRYPTION_KEY(64 位 hex)

生成 ENCRYPTION_KEY 示例:

Bash

# Linux/Macopenssl rand -hex 32# Windows PowerShell-join ((48..57) + (97..102) | Get-Random -Count 64 | ForEach-Object {[char]$_})

2)启动

Bash

docker-compose -f docker-compose.prod.yml up -d

3)访问

  • 官网首页:localhost:3000

  • 访客聊天:localhost:3000/chat

  • 客服登录:localhost:3000/agent/login

    • 用户名:admin(或 .env 中 ADMIN_USERNAME

    • 密码:.env 中的 ADMIN_PASSWORD

💡 演示站管理员安全策略

  • ADMIN_PASSWORD 仅在首次创建管理员时生效;数据库里已有管理员后,重启服务不会覆盖其密码。

  • 出于演示环境安全,前端默认不允许:修改 admin 账号密码、删除任意 admin 账号。

  • 删除 agent 用户时,系统会自动把其名下 AI 配置转移给当前管理员,避免配置丢失或无人维护。

  • 若需维护管理员账号,请直接通过数据库操作(例如重置密码、删除异常管理员)。

⚠️ 端口修改(重要说明)

  • 默认端口:前端 3000,后端对外 18080

  • 修改:在 .env 里修改 FRONTEND_PORT / BACKEND_PORT

  • 说明:预构建镜像在某些静态资源/图片路径场景可能与端口强绑定(历史兼容原因)。如果你需要彻底自定义端口并确保所有资源路径一致,建议用下面的“方式 B 本地构建”。

方式 B:Docker 本地构建部署(可自定义)

Bash

git clone https://github.com/2930134478/AI-CS.gitcd AI-CScp .env.example .envdocker-compose up -d --build

方式 C:传统部署(本地开发/手动安装)

环境要求:

  • Go 1.24+

  • Node.js 20.9.0+

  • MySQL 8.0+

Bash

git clone https://github.com/2930134478/AI-CS.gitcd AI-CScp .env.example .env# 1) 后端cd backendgo mod tidygo run main.go# 2) 前端(新开终端)cd ../frontendnpm installnpm run dev

配置字典(根目录 /.env

下面表格以 /.env.example 为准,帮助你快速判断“必填/可选/什么时候需要填”。

变量用途是否必填默认值(示例)示例
APP_PROFILE部署画像(docker/localdockerlocal
SERVER_HOST后端监听地址0.0.0.0127.0.0.1
SERVER_PORT后端容器内端口80808080
GIN_MODE后端模式建议releasedebug
SYSTEM_LOG_MIN_LEVEL结构化日志最低落库级别(system_logsinfowarn(可减少成功类写入;none 关闭落库;客服端「日志中心」可改并持久化,覆盖本项直至恢复)
DB_HOST后端数据库地址mysqllocalhost
DB_PORT后端数据库端口33063306
DB_USER数据库用户名ai_cs_userroot
DB_PASSWORD数据库密码StrongPwd
DB_NAME数据库名ai_csai_cs
MYSQL_ROOT_PASSWORDMySQL root 密码(compose)是(Docker)RootPwd
MYSQL_PORTMySQL 对外端口(compose)330613306
ADMIN_USERNAME默认管理员用户名adminadmin
ADMIN_PASSWORD默认管理员密码AdminPwd
ENCRYPTION_KEY后端加密密钥(64位hex)openssl rand -hex 32
REDIS_URLRedis 连接串(启用跨实例WS 广播)可选(多实例推荐)redis://:pwd@redis:6379/0
REDIS_ADDRRedis 地址(与 REDIS_URL 二选一)可选redis:6379
REDIS_PASSWORDRedis 密码(使用 REDIS_ADDR 时)可选StrongRedisPwd
REDIS_DBRedis DB(使用 REDIS_ADDR 时)可选00
REDIS_WS_CHANNEL分布式WS 事件频道名可选ai_cs:ws_eventsai_cs:ws_events
BACKEND_PORT后端映射到宿主机端口1808028080
FRONTEND_PORT前端映射到宿主机端口300013000
MILVUS_HOST向量库地址可选(启用RAG)milvus-standalonelocalhost
MILVUS_PORT向量库端口可选(启用RAG)1953019530
MILVUS_USERNAMEMilvus 用户名可选user
MILVUS_PASSWORDMilvus 密码可选pass
MILVUS_DISABLED禁用向量库(不连接)falsetrue
VECTOR_STORE_DISABLED同上(兼容开关)falsetrue
MILVUS_REQUIRED强依赖向量库(失败即退出)falsetrue
SERPER_MCP_URL联网搜索MCP 地址可选(启用联网)http://host:3000/sse
SERPER_API_KEY联网搜索API Key可选(启用联网)xxxxx
NEXT_PUBLIC_SITE_URL站点对外绝对地址(用于SEO)空(默认demo)https://www.example.com
NEXT_PUBLIC_API_BASE_URL前端公开API 地址建议http://localhost:18080https://api.example.com
NEXT_PUBLIC_BACKEND_HOST前端dev 代理目标hostlocalhost127.0.0.1
NEXT_PUBLIC_BACKEND_PORT前端dev 代理目标port808018080
NEXT_PUBLIC_MATOMO_CONTAINER_URLMatomo 脚本地可选https://.../container.js
BACKEND_IMAGE预构建后端镜像(prod compose)是(prod)537yaha/ai-cs-backend:latestyour/backend:tag
FRONTEND_IMAGE预构建前端镜像(prod compose)是(prod)537yaha/ai-cs-frontend:latestyour/frontend:tag

启用/关闭知识库(RAG)的推荐做法

  • 你暂时不想用知识库:把 .env 里 MILVUS_DISABLED=true(或 VECTOR_STORE_DISABLED=true)。

    • 应用仍可启动,AI 对话与人工客服不受影响。

  • 你必须依赖知识库(生产强约束):把 .env 里 MILVUS_REQUIRED=true

    • 此时如果 Milvus 不可用,会落库一条错误日志后退出,避免“半残服务上线”。

多实例实时消息一致性(Redis)

  • 单实例可不配置 Redis,系统维持当前行为。

  • 多实例 / 多副本部署建议配置 REDIS_URL(或 REDIS_ADDR + REDIS_PASSWORD + REDIS_DB),用于 WebSocket 事件跨实例同步。

  • 可通过 REDIS_WS_CHANNEL 自定义事件频道(默认 ai_cs:ws_events)。


集成访客小窗到你的网站(iframe)

把下面代码放到你网站的 </body> 前,核心是把 src 指向你自己的部署域名的 /chat

HTML

<divid="ai-cs-widget"style="position: fixed; bottom: 20px; right: 20px; z-index: 9999;"><buttonid="ai-cs-toggle-btn"style="width:56px;height:56px;border-radius:50%;background:#3b82f6;color:#fff;border:none;cursor:pointer;box-shadow:0 4px 12px rgba(0,0,0,.15);"onclick="toggleChat()">        Chat</button><iframeid="ai-cs-chat-iframe"src="https://你的域名/chat"style="display:none;position:fixed;bottom:80px;right:20px;width:400px;height:600px;max-width:calc(100vw - 40px);max-height:calc(100vh - 100px);border:none;border-radius:12px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1);"></iframe></div><script>functiontoggleChat() {const iframe = document.getElementById("ai-cs-chat-iframe");    iframe.style.display = iframe.style.display !== "none" ? "none" : "block";}</script>

相关文档

  • 知识库 / 内部Wiki 导入(项目总览一篇通)doc/AI-CS-知识库-项目总览.md

常见问题与排障

  1. 提示音听不到:浏览器通常需要“用户一次交互”才能解锁音频;请先点一下页面任意按钮 / 再打开喇叭开关测试。

  2. 向量库连不上导致启动失败:检查 .env 的 MILVUS_REQUIRED 是否误开;不需要知识库时建议 MILVUS_DISABLED=true

  3. 搜不到站点 / 分享卡片不正确:设置 NEXT_PUBLIC_SITE_URL=https://你的域名,用于 canonical / OG / sitemap 生成。

贡献

欢迎提交 Issue 和 Pull Request。

许可证

MIT © 2025 2930134478


仓库基础信息:

  • 主要开发语言:TypeScript 58.1%, Go 40.1%, Other 1.8%

  • 开源协议:MIT license


    个人观点,仅供参考,非常感谢各位朋友们的支持与关注

    如果你觉得这个作品对你有帮助,请不吝点赞在看分享给身边更多的朋友。如果你有任何疑问或建议,欢迎在评论区留言交流。