Chatwoot + Dify — 经典 AI 客服组合
用 Chatwoot 作为多渠道入口与人机协同界面,用 Dify 提供 AI 大脑与知识库。这是中小团队最稳妥的起手组合。
- 场景
- 中小 SaaS / 电商团队,需要替换 Intercom 又想要可控的 AI 能力
- 月成本
- $40 - $120(不含 LLM tokens)
- 难度
- 中等
ChatwootDifyPostgresRedisWeaviate
这套方案在解决什么问题#
绝大多数想自部署 AI 客服的中小团队,痛点都集中在 4 个方面:
- SaaS 太贵——Intercom 的 AI seat 一年轻松突破 $20k
- 现有客服平台不够「AI」——传统工单系统接 LLM 困难
- 多渠道分散——网页 / WhatsApp / 邮件 / 微信,数据散落
- 不想被厂商绑死——希望按需切换模型与知识库
Chatwoot + Dify 是 2026 年中文社区对这个组合达成共识的「默认起手式」,理由是协议合理、组件成熟、文档充足。
架构#
角色划分#
| 组件 | 在系统里扮演什么 | 是否必需 |
|---|---|---|
| Chatwoot | 多渠道入口、坐席工作台、工单系统 | ✓ 必需 |
| Dify | AI 大脑:Prompt、知识库、工作流、模型治理 | ✓ 必需 |
| PostgreSQL | 两者共用的关系库(建议物理分库) | ✓ 必需 |
| Redis | 队列、缓存 | ✓ 必需 |
| Weaviate | 向量库(也可换 pgvector / Milvus) | ✓ 必需 |
| Sidekiq Worker | Chatwoot 的异步任务(已含在 image) | ✓ 必需 |
| n8n | 业务编排(订单、CRM 写回) | 可选 |
| Postmark / SES | 邮件发送 | 强烈推荐 |
硬件与成本#
测试 / POC(单机)#
| 配置 | 数量 | 单价(月) | 备注 |
|---|---|---|---|
| 4 vCPU / 8 GB / 80 GB VPS | 1 | $20-40 | Hetzner CPX31 / DigitalOcean s-4vcpu-8gb |
| LLM tokens(按 5,000 月会话估算) | — | $5-30 | 用 DeepSeek / Doubao 时偏低 |
| 域名 + Postmark | — | $5-15 | |
| 合计 | $30-85 / 月 |
小型生产(双机)#
| 配置 | 数量 | 单价(月) |
|---|---|---|
| 4C/8G Chatwoot 节点 | 1 | $30 |
| 8C/16G Dify 节点 | 1 | $60 |
| 托管 Postgres(小型) | 1 | $25 |
| 总计 | $115-150 / 月 |
中型生产(3 台 + LLM 用量上升)#
总 $250-500 / 月,含 LLM tokens。
部署步骤(45-90 分钟)#
1. 准备服务器与域名#
# Ubuntu 24.04 上装 Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 解析子域到服务器:
# support.example.com → 服务器 IP
# dify.example.com → 服务器 IP
2. 起 Dify#
git clone https://github.com/langgenius/dify
cd dify/docker
cp .env.example .env
# 关键 env:
# CONSOLE_WEB_URL=https://dify.example.com
# APP_API_URL=https://dify.example.com
# SECRET_KEY=(用 openssl rand -base64 42 生成)
docker compose up -d
打开 https://dify.example.com,注册管理员,「设置 → 模型供应商」 配上 LLM(推荐 DeepSeek 起步)+ Embedding(中文用 bge-m3,可走 SiliconFlow)。
3. 在 Dify 创建 Chatbot 应用#
- 类型选「聊天助手」或「Agent」(需要工具调用就选 Agent)
- 上传知识库文档:FAQ、产品介绍、退款政策等
- 分块策略选「父子检索」,效果优于默认
- 在 Prompt 顶部加严格约束:
你是 [品牌] 的客服助手。 规则: 1. 仅基于「参考资料」回答 2. 资料不足时,回复「我没有相关信息,正在转接人工」 3. 不要编造金额 / 日期 - 发布应用,复制 API Key(形如
app-xxxxxxxx)
4. 起 Chatwoot#
git clone https://github.com/chatwoot/chatwoot
cd chatwoot
cp docker/.env.example .env
# 改:FRONTEND_URL、SMTP、SECRET_KEY_BASE 等
docker compose -f docker-compose.production.yaml \
run --rm rails bundle exec rails db:chatwoot_prepare
docker compose -f docker-compose.production.yaml up -d
打开 https://support.example.com,注册账号、创建 Account / Inbox。
5. 把 Dify 配成 Chatwoot 的 Agent Bot#
Chatwoot 控制台 → Settings → Agent Bots → 新建:
| 字段 | 值 |
|---|---|
| Name | Dify Bot |
| Outgoing URL | https://dify.example.com/v1/chat-messages |
| Auth Header | Authorization: Bearer app-xxxxxxxx |
在目标 Inbox 选这个 Bot 作为默认机器人。
6. 验证#
发一条测试消息到网页 Widget:
- Chatwoot 收到对话
- Bot 自动回复(< 3 秒)
- Dify 后台「应用日志」可见调用记录
- 低置信度(< 0.5)时把对话转给人工坐席
关键调优点#
知识库准备#
- 把碎片化的 Notion / 飞书文档先清洗(去 TOC、emoji 标题、空图片)
- 切分按 H2 / H3 标题,避免硬切字数
- 每周用「评估集」跑一次回归(参考知识库准备实战)
兜底机制#
| 场景 | 处理 |
|---|---|
| 检索 top-1 分数 < 0.5 | 自动回复「转人工」+ 创建工单 |
| 工作流报错 | 失败分支返回降级答案 + 通知运维 |
| LLM tokens 超月度上限 | Dify 自动停应用 + 告警 |
| 关键词命中(投诉、退款) | n8n 转人工 + 飞书通知值班 |
人机协同模式#
不要让 AI 完全替代人工。最稳妥的模式是 AI 起草 → 人工审核 → 一键发送:
- Chatwoot 把客户消息发给 Dify
- Dify 把回复以草稿形式写回(不直接发给用户)
- 坐席点击「发送」或调整后发送
- 调整内容自动回流到「改进队列」供 Prompt 工程师周一复盘
关键 KPI(实战目标)#
| 指标 | 目标值 | 6 个月观察值 |
|---|---|---|
| 首响时间(FRT) | < 3 秒 | 1.2-2.4 秒 |
| AI 自助解决率 | 45%-70% | 取决于 KB 质量 |
| 24h 回访率 | < 10% | 8% |
| CSAT(AI 段) | > 4.0 / 5 | 4.2-4.4 |
| 单次会话成本 | < $0.05 | $0.02-0.04 |
常见坑#
- Chatwoot 邮件发不出:SMTP 走 Postmark / SES,
MAILER_SENDER_EMAIL必须在认证域内 - Dify 检索 0 条:换了 Embedding 模型但没重建向量库——必须删 dataset 重导
- Cloudflare Tunnel 502:容器绑
127.0.0.1而不是0.0.0.0 - AI 跑题:Prompt 缺约束 + 知识库混入了过期文档
- Tokens 账单暴涨:某个 Workflow 死循环或被 bot 灌爆——给应用设月度上限 + Cloudflare Turnstile
演进路径#
| 阶段 | 加什么 | 何时加 |
|---|---|---|
| 1. 起步 | Chatwoot + Dify | Day 1 |
| 2. 业务集成 | n8n(订单 / CRM 调用) | 月会话 > 2k |
| 3. 知识库升级 | RAGFlow(复杂 PDF) | 文档复杂度高时 |
| 4. 多 LLM 治理 | Dify 多模型组合 | 成本压力出现时 |
| 5. 高可用 | 拆库 + Docker Swarm / K8s | 月会话 > 30k |
| 6. 本地推理 | Ollama + Qwen 14B/32B | 合规要求出现时 |