AI智能客服
基于BadouCMS的AI客服插件,面向站点运营人员的操作说明。安装配置、日常使用、常见问题都在这里。

一、它能做什么
在网站右下角放一个客服浮窗,访客点开就能提问。系统按下面的顺序处理:
- 先查知识库 —— 命中就用知识库内容回答,不消耗 AI 额度
- 知识库没有,交给 AI —— 由模型组织答案(如果开启了 AI)
- AI 不确定,转人工 —— 进入排队,坐席在工作台接入
- 没人接待,留个记录 —— 访客可留言,后台收到提醒
访客发纯表情、标点或只说了句「你好」时,不会转人工,而是回一句引导语让访客说清需求。这句话可以在设置里改。
AI 只依据知识库回答,知识库没有的内容不会编造。这是刻意设计的——宁可转人工,也不给访客错误信息。
二、安装
1. 安装插件
后台「插件管理」→ 找到「AI智能客服」→ 安装。
2. 导入测试数据(可选,建议先做)
安装流程里会询问是否导入测试数据。已经装好的,也可以在「模块管理」里找到「AI智能客服」,点「导入测试数据」。
导入后会有:
- 13 条电梯行业知识库(公司、价格、产品系列、安装、售后)
- 7 条快捷回复(访客提问 3 条 + 坐席话术 4 条)
- 3 段演示对话(AI 接待 / 人工接待 / 已结束)
这是一个可以直接演示的完整站点。 熟悉之后再换成自己的内容。
3. 配置常驻服务(必须)
AI 回复和消息推送依赖一个后台常驻进程,不启动的话,访客消息会一直卡着没人处理。
这一步在宝塔里做,下面分两种方式,任选一种。
方式一:Supervisor 守护(推荐)
① 安装 Supervisor 管理器
宝塔后台 →「软件商店」→ 搜索 Supervisor → 安装「Supervisor管理器」。
② 先在终端里确认命令能跑
宝塔后台 →「终端」(左侧菜单,没有的话去软件商店装「堡塔终端」),执行:
cd /www/wwwroot/你的域名目录
/www/server/php/82/bin/php think aichat:serve看到下面两行就说明命令没问题,按 Ctrl+C 停掉,再去配 Supervisor:
实时推送已注册,监听 9502
AI 客服服务已启动:实时推送 + AI 回复处理PHP 路径必须写全。宝塔的 PHP 不在系统 PATH 里,直接写
php多半会报「command not found」。路径规则是
/www/server/php/{版本号}/bin/php:| 版本 | 路径 |
| PHP 8.1 | /www/server/php/81/bin/php |
| PHP 8.2 | /www/server/php/82/bin/php |
| PHP 8.3 | /www/server/php/83/bin/php |
不确定装的是哪个版本,去「软件商店 → 已安装」里看 PHP 的版本号。
③ 添加守护进程
打开「Supervisor管理器」→「添加守护进程」,按下表填写:
| 字段 | 填写内容 |
|---|---|
| 名称 | aichat-serve |
| 启动用户 | www |
| 运行目录 | /www/wwwroot/你的域名目录 |
| 启动命令 | /www/server/php/82/bin/php think aichat:serve |
| 进程数量 | 1 |
保存后状态显示「运行中」就成功了。
几个容易填错的地方:
- 运行目录填网站根目录(
think文件所在的那一层),不是public - 进程数量必须是 1,多个进程会重复处理同一条消息
- 启动用户用
www,和网站一致;用 root 会导致后续生成的文件权限混乱 - 如果 PHP 是 8.1 就把命令里的
82改成81
④ 验证
回后台「AI智能客服 → 客服设置」,顶部「回复处理者」卡片:
- 显示「运行中」+ 最近运行时间 → 成功
- 显示「未运行」→ 进程没起来,去 Supervisor 看日志
方式二:计划任务(备选)
如果不想装 Supervisor,可以用宝塔的「计划任务」每分钟触发一次处理。
进入「计划任务」→「添加任务」:
| 字段 | 填写内容 |
|---|---|
| 任务类型 | Shell脚本 |
| 任务名称 | aichat-work |
| 执行周期 | N分钟 → 1分钟 |
| 脚本内容 | 见下方 |
脚本内容:
cd /www/wwwroot/你的域名目录 && flock -n /tmp/aichat-work.lock /www/server/php/82/bin/php think aichat:work --seconds=55这个命令每次运行最多处理 55 秒,下一分钟再被触发,相当于「每分钟醒一次」的常驻效果。
前面的 flock -n 是防重叠:万一某次执行卡住超过一分钟,下一次会直接跳过,不会多进程叠加。没有 flock 命令的话(极少数环境)去掉它也能用,插件内部有任务锁兜底。
这种方式和方式一的差别:
| Supervisor | 计划任务 | |
|---|---|---|
| AI 回复处理 | ✅ | ✅ |
| 实时推送(WebSocket) | ✅ | ❌ 走 HTTP 轮询,最多延迟几秒 |
| 进程常驻 | 是 | 每次运行完退出 |
| 适合 | 正式环境 | 虚拟主机、不能装 Supervisor 的环境 |
两种方式不要同时开,会重复处理消息。
关于端口 9502
aichat:serve 默认会监听 9502 端口用于 WebSocket 推送。
- 如果服务器有安全组/防火墙,需要放行 9502(仅本机访问,不用对公网开放)
- 想让浏览器用上即时推送,还要在站点 Nginx 配置里加反向代理,见本文档「常见问题 → 消息有延迟」
如果不需要即时推送,加 --no-ws 参数即可,不占端口:
/www/server/php/82/bin/php think aichat:serve --no-ws命令参数说明
aichat:serve 支持的参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--admin=1 | 1 | 调用 AI 时使用的管理员 ID,一般不用改 |
--seconds=50 | 50 | 每轮处理最长秒数 |
--no-ws | 关闭 | 只处理 AI 回复,不启动实时推送 |
4. 登录官网账号(AI 功能必需)
后台「插件管理」→ 登录 badoucms 官网账号。
这个账号用来调用 AI 模型,会消耗该账号的 AI 额度。不登录的话,知识库仍然能回答,但知识库没命中时无法让 AI 组织答案。
登录状态保存在缓存里。如果后台点过「清除缓存」,需要重新登录一次。表现为设置页显示「AI 服务异常」。
5. 添加坐席
后台「AI智能客服 → 客服坐席」→ 新增,绑定一个管理员账号。
坐席需要用自己绑定的管理员账号登录后台,并打开「客服工作台」,才会被系统认为在线(每 30 秒产生一次心跳)。下拉框里只显示真正在线的坐席。
三、前台效果
访客看到的浮窗:
- 顶部是客服头像、标题、「智能助手 · 为您解答」
- 中间是对话区,AI 消息和访客消息左右分列
- 底部是快捷提问(可在设置里配置)
- 输入框上方有「转人工」「留言回访」两个入口
访客点击快捷提问会直接发送,不需要打字。
如果站点是响应式布局,浮窗在手机上会自动变成全屏面板。
四、三种接待模式
后台「客服设置 → 基础设置 → 默认接待模式」:
| 模式 | 适合场景 | 访客体验 |
|---|---|---|
| AI 优先 | 常见问题为主,想减少人工 | AI 直接回答,答不了才转人工 |
| 人工优先 | 客单价高,必须真人接待 | 直接进排队,坐席接入 |
| AI 草稿 + 人工确认 | 不能出错,但想提效 | 人工接待,AI 帮坐席写草稿,坐席审核后发送 |
模式是新会话的默认值,单个会话里可以随时切换。
AI 草稿辅助怎么用
会话处于人工接待时,工作台顶部有「开启 AI 草稿辅助」按钮。
开启后,访客每发一条消息,AI 都会生成一条回复草稿,但访客看不到——只有坐席能在工作台看到。坐席可以:
- 直接采纳发送
- 改一改再发(推荐)
- 丢弃,自己重新打
采纳后消息会以坐席身份发给访客,访客不会知道有 AI 参与。
这是新人坐席上手、或者处理敏感问题(报价、退款)时的好帮手。
五、后台功能

客服设置
顶部是服务状态:今日会话、消息数、在线坐席、AI 回复数、待补充知识数。
下面两张卡片分别显示 AI 服务和回复处理者的状态。如果 AI 显示异常,先看是不是官网账号掉了。
三个页签:
- 基础设置 —— 开关、接待模式、浮窗位置、样式、标题、欢迎语、公告栏、快捷提问、AI 头像
- AI 行为 —— 转人工关键词、禁止话题、兜底话术、无实质内容引导语
- 人工接待 —— 排队策略、坐席容量、超时回收
浮窗位置支持右下角、左下角、侧边栏。选「侧边栏」后可以指定挂载容器的选择器(如 #sidebar),适合有固定侧边栏的站点。
挂件样式有 5 套:经典蓝、商务深蓝、玻璃拟态、极简黑白、活力橙。
知识库
这是整个系统最重要的部分。AI 的答案质量取决于这里。
每条知识包含:
- 标题 —— 概括这条知识讲什么
- 内容 —— 完整答案,建议 100-300 字,直接正面回答
- 关键词 —— 逗号分隔,用于提高召回率
检索机制:访客的问题会和标题、内容、关键词做匹配。不需要字字相同,系统会拆词、去停用词后比对。命中多条时按相关度排序,取前几条给 AI 参考。
命中测试:知识库列表右上角有「匹配测试」,输入一个问题就能看到命中了哪几条、分数多少。加完知识一定要测一下,确认真的能召回。
支持导入:TXT、CSV、以及直接选站内文章转成知识。
快捷回复
两个用途:
- 访客可见 —— 显示在前台浮窗底部,访客点一下直接发送(如「怎么联系你们」「价格怎么算」)
- 坐席可见 —— 只出现在工作台的快捷回复面板,坐席点一下插入输入框(如「稍等,我确认一下」)
前台浮窗的快捷提问也可以在「客服设置」里直接改,但那只是简单的多行文本。用「快捷回复」功能可以分组管理、统计使用次数。
未命中问题
访客问了、但知识库没命中的问题会记在这里,按出现次数排序。
这是知识库补全的最佳来源:看看访客都在问什么、系统答不上来什么,针对性补充知识。
每条右边有「转为知识」,点一下就能把问题变成知识条目,填上答案即可。
会话管理
所有会话的列表,可以按状态、接待坐席、时间筛选。
- 状态:AI 接待 / 人工接待 / 排队中 / 已结束
- 可以看完整聊天记录、导出 CSV、删除、拉黑访客
拉黑后该访客再打开浮窗会看到提示,无法发送消息。
客服工作台
坐席日常待的地方。左侧四个标签:
| 标签 | 内容 |
|---|---|
| 我的会话 | 我正在接待的(人工接待中) |
| 待接入 | 排队等人工的,带数字徽章 |
| 历史 | 我接待过的,含已结束 |
| 智能接待 | AI 正在接待的,带数字徽章 |
右侧是对话区,可以发消息、发附件、用快捷回复、开 AI 草稿辅助。
上方显示访客信息:IP、来源页面、进入时间、接待坐席。可以编辑访客称呼、联系方式、备注。
转接:把会话转给另一个在线坐席。下拉框只显示当前在线的坐席。
结束会话:会话关闭,访客下次来会开新会话。
客服坐席
管理坐席账号。每个坐席绑定一个管理员账号,可以设置:
- 昵称(访客看到的名字)
- 头像
- 最大同时接待数
- 上线/下线开关
注意:上线 开关只是「允许分配」,真正在线还需要该坐席登录后台并打开工作台。列表里的在线状态显示的是开关状态,不是心跳状态。留言与回访
访客在浮窗点「留言回访」提交的表单,以及 AI 无法回答时自动登记的记录。
处理流程:
- 坐席认领
- 状态改为「跟进中」
- 联系访客
- 完成后填写回访结果
系统会记录每次状态变更和处理人,形成完整跟进轨迹。
客服统计
按时间范围统计坐席绩效:接待会话数、回复消息数、平均响应时长等。
六、与其他插件配合
商城(shop 插件)
装好商城后不需要任何配置,客服会自动认商品。
访客看到的效果:打开商品详情页,浮窗顶部会多出一张商品卡——商品图、名称、一句话简介。点一下就把「我想咨询这款产品:xxx」发过来,不用手动描述是哪款。
坐席看到的效果:工作台里这条消息显示成产品卡片,直接能看到访客咨询的是哪款商品,不用再问「您看的是哪一款」。
识别依据:商品内容所属的 CMS 模型。商城设置里「商品模型」填的哪个 mcode,客服就按哪个识别,默认是「产品」(mcode=3)。在商城设置里换了模型,客服会自动跟着变,不用改插件配置。
一个前提:商品详情页要走 CMS 内容详情路由(cms.detail)。
如果商城做了完全自定义的详情页(自己写控制器渲染),浮窗仍会出现,但商品卡不会显示——因为系统认不出当前是哪个商品。
外贸 / 多语言站点
商品识别是支持多语言的:访客访问英文版商品页,识别出来的是该商品的英文版本(按站点当前语言匹配,找不到才退回默认语言)。
但文字内容不分语言,这点需要提前知道:
| 内容 | 是否分语言 |
|---|---|
| 商品识别 | 是,按当前语言匹配 |
| 浮窗标题、欢迎语、公告栏 | 否,全局一套 |
| 快捷提问 | 否,全局一套 |
| 知识库 | 否,全局一套 |
| 兜底话术、无实质内容引导语 | 否,全局一套 |
实际影响:英文站访客打开浮窗,看到的是中文欢迎语;用英文提问时,知识库也很难命中——因为检索靠中文分词,英文单词的匹配能力有限。
三个低成本做法:
- 欢迎语写成双语:改成
Hello! 您好!请问有什么可以帮您?,这一步最省事,效果最直接。 - 知识库关键词中英混写:一条知识的关键词里同时放两种语言,比如
价格,多少钱,报价,price,quote,cost。正文可以先写英文,末尾补一句中文摘要。 - 按主语言运营:如果外贸站主要面向英文客户,知识库正文直接写英文,关键词补上中文,这样中文访客偶尔也能命中。
每个语言要一套独立知识库的话,当前版本不支持,需要定制开发。
会员 / VIP 插件
访客如果已登录会员账号,会话会记录对应的会员 ID,在访客档案里能对上人。
没登录的访客按浏览器标识识别(一个浏览器算一个访客),和会员系统互不影响。
翻译类插件
jstranslate、tanshutranslate、youdaotranslate 这类翻译插件只影响页面内容,不会翻译客服对话。
也就是说:访客发中文、坐席用英文看,翻译插件帮不上忙。跨语言沟通还是需要坐席自己处理。
七、日常运营建议
每周看一次「未命中问题」
按次数排序,前 10 条补进知识库。这是提升 AI 回答率最有效的方式。
知识库怎么写才好用
- 一条知识只讲一件事,不要写成大杂烩
- 标题就是访客可能的问法,如「电梯多少钱」比「价格体系说明」好
- 关键词补同义词:价格、多少钱、报价、费用、贵不贵
- 内容要正面回答,第一句话就给结论,后面再展开
- 不要写「请联系客服」,这种内容 AI 答了等于没答
定期看工作台「智能接待」
AI 接待的会话虽然不需要坐席介入,但偶尔看一眼能发现 AI 答得不好的地方。
如果发现 AI 经常答非所问,说明知识库的关键词没覆盖到访客的实际问法。
会话不会自动关闭
同一访客(同一个浏览器)会一直复用同一个会话,除非坐席手动「结束会话」。
这意味着老访客下次打开会看到很久以前的聊天记录。如果不希望这样,需要坐席定期清理已结束的会话。
八、常见问题
前台不显示浮窗
- 检查「客服设置 → 基础设置 → 启用前台客服」是否开启
- 检查站点是否已关闭(后台「系统设置 → 关闭站点」)
- 清除缓存后刷新页面
AI 不回复,一直显示「正在输入」
最常见的原因是官网账号掉线。
去「客服设置」看顶部状态卡:
- 「AI 服务」显示红色 → 去「插件管理」重新登录官网账号
- 「回复处理者」显示未运行 → 常驻服务没启动,SSH 执行
php think aichat:serve
访客消息一直卡着不回复
先在宝塔「终端」里看进程在不在:
ps aux | grep aichat:serve- 没有输出 → 服务没启动,去「Supervisor管理器」看
aichat-serve的状态,或检查计划任务有没有执行 - 有输出但还是不动 → 看后台「客服设置」顶部「回复处理者」卡片,那里会写明卡住的原因(常见是官网账号掉线)
如果 Supervisor 里显示「已停止」,点「启动」看会不会立刻又停。反复重启一般是:
- 9502 端口被别的程序占着 → 见下方「9502 端口被占用」
- 运行目录填错了 → 必须填
think文件所在的目录 - 启动用户没权限写
runtime→ 后台「文件」里把runtime目录权限设为 755、属主 www
消息有延迟
默认是 HTTP 轮询(开窗 2.5 秒、收窗 8 秒一次)。
想要即时推送,需要:
- 常驻服务带 WebSocket 启动(默认就带)
- Nginx 把
/aichat-ws反向代理到127.0.0.1:9502
Nginx 配置示例:
location /aichat-ws {
proxy_pass http://127.0.0.1:9502;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}不配置也能用,只是走轮询,最多延迟几秒。
转接时下拉框里没有其他坐席
那个坐席不在线。需要他用自己的管理员账号登录后台,并打开「客服工作台」。
换服务器或改域名后浮窗不显示
浮窗的接口地址是自动推导的,正常不需要改。如果换了域名,清除缓存后重新访问即可。
9502 端口被占用
宝塔「终端」执行:
lsof -i:9502会看到占用端口的 PID,然后:
kill -9 <上一步看到的PID>再回 Supervisor 点「启动」。
如果每次重启都冲突,说明有两个守护进程或多个 Supervisor 实例在抢同一个端口,检查是不是配了两份 aichat-serve。
九、卸载
- 停掉常驻服务
- 后台「插件管理」→ 卸载「AI智能客服」
- 如需彻底清理,删除数据库中的
bd_aichat_*表
附:命令速查
宝塔「终端」里执行,命令中的 PHP 路径按自己的版本替换(81 / 82 / 83)。
| 操作 | 命令 |
|---|---|
| 启动服务(推送 + AI) | /www/server/php/82/bin/php think aichat:serve |
| 只处理 AI,不开推送 | /www/server/php/82/bin/php think aichat:serve --no-ws |
| 单次处理一轮(55 秒) | /www/server/php/82/bin/php think aichat:work --seconds=55 |
| 查看进程 | ps aux | grep aichat:serve |
| 查看端口占用 | lsof -i:9502 |
| 停止服务 | pkill -f aichat:serve |
| 查看 PHP 版本 | /www/server/php/82/bin/php -v |
执行任何think命令前,都要先cd到网站根目录(think文件所在的那一层)。
附:宝塔操作路径对照
| 要做什么 | 宝塔里的位置 |
|---|---|
| 执行命令 | 左侧「终端」,或软件商店装「堡塔终端」 |
| 配置常驻进程 | 软件商店装「Supervisor管理器」→ 添加守护进程 |
| 配置定时任务 | 「计划任务」→ 添加任务 → Shell脚本 |
| 查看已装 PHP 版本 | 「软件商店」→ 已安装 |
| 修改文件权限 | 「文件」→ 右键目录 → 权限 |
| 查看站点日志 | 站点 → 设置 → 日志 |
BadouCMS