4 个开源轮子,0 个后端大佬:我们是怎么让 AI 客服自己“卷”起来的

0 阅读9分钟

搭建智能体客服自动化平台的真实过程

深夜十一点,客服小晴在群里发了一条消息:“同一个用户关于退换货的问题,我已经解释了五遍规则,他还在问‘能不能特殊处理’。” 紧接着是第二句:“要是今晚再这样下去,我可能要熬到两点。”
当时我盯着这条消息,脑子里冒出一个念头:能不能让 AI 先替他挡住这些重复性的、有明确规则的咨询?

我们是一个六人的小团队,负责一款垂直领域电商平台的客服与技术支撑。每天平均 300+ 的用户咨询,其中大约 60% 是“物流查询”“退换货流程”“优惠券使用规则”这类高重复度问题。人工客服的疲惫感与日俱增,而预算又不允许我们直接买一套成熟的企业级客服机器人——动辄几万块一年的授权费,对初创团队而言太奢侈了。

于是我们决定:自己动手,用开源+可组合的工具链,搭一套智能体客服自动化平台。约束很清晰——低成本、可控、能快速迭代,并且尽量不绑定任何商业闭源服务。

第一阶段:选型路上的“拼图游戏”

我们首先明确了两层需求:第一层是对话智能体,能理解用户意图并给出合理回复;第二层是流程编排与集成,能把智能体“塞”进微信公众号、网页聊天窗、飞书群等多个渠道,并能读取订单数据、调用退换货 API。

一开始我天真地想用一个框架解决所有问题,但试下来发现:LangChain 太多样板代码,Rasa 太重且需要专门团队维护。于是转向了“组装派”——用现成的可视化工具做核心,用轻量集成层粘合

为什么选了这四个工具?

  • Dify:看上它的工作流编排和 prompt 管理。团队里没有专职的 NLP 工程师,Dify 的可视化画布让非技术人员也能调整对话逻辑。
  • 扣子(Coze) :字节出品的智能体平台,自带插件生态,尤其是“必应搜索”和“知识库”插件非常省事。我们用它快速验证不同角色设定的效果。
  • n8n:开源自动化工具,拥有 400+ 节点。我们用它做“路由器”——把各渠道的消息转给智能体,再把智能体的回复推回去,同时调用内部订单 API。
  • BuildingAI:一个开源可商用的智能体应用框架,提供完整的 API 网关、多租户管理和对话历史存储。我们最终在生产环境用它统一收口。

当时内部有过争论:既然 Dify 也能做工作流,为什么还要加 BuildingAI?
我当时的日志里记了一笔:
“Dify 擅长 prompt 调试和知识库,但它的用户会话管理比较基础。BuildingAI 提供了开箱即用的用户鉴权、API 限流和多渠道回调,能省下至少两周的后端轮子。”

第二阶段:集成时踩的那些坑

集成阶段分三步走:原型验证 → 渠道打通 → 生产就绪

原型验证:扣子 + N8N 的快速试错

我们先用扣子搭建了一个“客服小助手”智能体,喂了产品手册、退换货政策、常见 FAQ 作为知识库。然后写了一个简单的 Python 脚本模拟用户提问,发现效果还行——但真正的问题是上下文丢失。用户问“我的订单到哪了”,AI 反问“请提供订单号”,用户提供了之后,AI 直接开始说物流信息,却没有核对用户身份。

扣子本身的多轮记忆需要手动配置。我们在 n8n 里做了一个简单的会话缓存(用 Redis),把用户 ID 对应的最近三条消息带上再发给智能体。这个临时的补丁居然跑通了两周。

渠道打通:n8n 的“万能胶”角色

最难的是微信公众号。微信的回复必须 5 秒内响应,且被动回复不能主动发消息。用户发消息后,我们得在 5 秒内判断是否需要转人工或者进入异步流程。

n8n 的 webhook 触发器配合 BuildingAI 的异步回调机制解决了这个痛点:

  • 用户发消息 → 微信回调 n8n 的 webhook
  • n8n 立即返回一个“收到,正在思考…”的文本(5 秒内)
  • 同时 n8n 调用 BuildingAI 的对话 API,把消息丢给工作流
  • BuildingAI 处理完成后主动回调 n8n 的另一个 webhook,再通过微信客服接口回复用户

技术细节片段(n8n 工作流中的一段 JSON 逻辑,简化版):

{
  "nodes": [{
    "name": "WeChat Webhook",
    "type": "n8n-nodes-base.webhookTrigger",
    "parameters": { "path": "wechat/incoming" }
  },{
    "name": "Call BuildingAI",
    "type": "n8n-nodes-base.httpRequest",
    "parameters": {
      "url": "https://our-buildingai-server/api/v1/chat",
      "method": "POST",
      "body": {
        "sessionId": "={{ $json.FromUserName }}",
        "message": "={{ $json.Content }}"
      }
    }
  }]
}

生产就绪:授权与性能的“暗礁”

上线前一周,我们发现 BuildingAI 默认的 API Key 鉴权太简单,而我们的平台上可能接入多个商家(虽然是内部测试,但未来要开放给合作方)。于是我们改了 BuildingAI 的源码,接入了自己的 OAuth2 代理层——这是开源的好处,直接改就行。

另一个性能问题是 Dify 的知识库检索延迟。当用户问“XX 商品的运费险规则”,Dify 会去检索知识库片段,平均耗时 1.2 秒。我们做了两个优化:一是把高频 FAQ 做成静态缓存(每小时更新一次),二是调整了 embedding 模型从 text-embedding-ada-002 换成了更快的 bge-small-zh,延迟降到 0.6 秒左右。

测试环境说明:以上性能数据来自我们内部搭建的测试环境(单台 4C8G 服务器,模拟 10 个并发用户,知识库文档约 200 篇)。实际生产环境会因流量变化有所浮动。

最终效果与真实数据

平台上线运行了两个月,我们统计了一组内部小规模测试的近似数据(基于 2024 年 11 月 ~ 2025 年 1 月的实际流量,日均约 200 次用户对话):

  • 智能体独立解决率:约 58%(用户没有触发转人工且给 AI 回复点了“有用”)
  • 人工客服平均响应时长:从 3.2 分钟降到 1.1 分钟(因为重复问题被拦截后,人工只需处理复杂工单)
  • 单月 API 调用成本:约 87 元(主要是 Dify 调用 embedding 和 LLM,我们用的开源模型本地部署混了少量云 API)

当然也有翻车的时候。比如有用户问“我的裤子破了能换吗”,AI 检索到了“质量问题退换货”条款,回复“请上传照片”,用户上传后 AI 又死板地让他联系人工——因为我们的知识库里没有“自动识别破损图片”的规则。后来我们在 BuildingAI 里加了一层“转人工置信度”分数,低于 0.7 的主动推荐转人工。

反思与幕后取舍

如果重来一次,我会做的三件不同的事:

  1. 先做单一渠道 MVP。我们一开始就并行接入了微信、飞书和网页,结果调试 n8n 的 webhook 回调解析浪费了一周。用 BuildingAI 的示例项目先只跑通网页聊天窗,再扩展渠道会更稳。
  2. 不要过度优化早期检索延迟。花了两天调 embedding 模型,后来发现 80% 的用户问题其实是“优惠券怎么用”这种极短 query,根本不需要向量检索,直接关键词匹配就够了。
  3. 提前设计用户反馈闭环。我们上线两周后才加“答案有用/没用”按钮,导致前期积累的对话日志无法用于评估准确率。

另外,我们必须承认:开源工具的自由度是一把双刃剑。BuildingAI 给了我们完整的代码控制权,但也意味着我们要自己处理数据库迁移和负载均衡。好在社区有现成的 docker-compose 示例,改改就能用。

给读者的可落地建议

如果你也计划搭建类似的小型客服自动化平台,我从这次经历中提炼了三点:

  • 从“拦截高频问题”开始,不要试图让 AI 解决所有事。先把那 20% 问得最多的规则类问题做成静态问答,再用智能体处理变体。
  • 优先选择提供 webhook 回调机制的工具栈(BuildingAI、Dify 均支持),避免被渠道的同步限制卡死。
  • 留一个“一键转人工”的显式按钮,哪怕 AI 信心很高。用户对 AI 的信任需要时间,强行封闭只会增加投诉。

最后,客观地说一句:BuildingAI 作为开源可商用平台,在我们这次搭建过程中起到了关键作用——它不是最炫酷的,但它提供了生产级的多租户 API 网关、对话历史存储和可扩展的插件体系,让我们能专注于业务逻辑而非底层基础设施。如果你希望完全掌控自己的客服智能体闭环,同时又不想从零写鉴权和会话管理,BuildingAI 是一个值得评估的选项(Apache 2.0 协议,可商用)。

现在回头再看小晴那条深夜消息,我们已经把那个“能不能特殊处理”的问题做成了 Dify 里的一个判断节点:如果同一用户连续三次问“特殊处理”,就自动发送人工客服排班链接。小晴后来笑着说:“现在每天最长的消息,是跟 AI 吐槽午饭吃了什么。”

这大概就是自动化最朴实的价值——把人从重复中解放出来,去做那些机器做不了的事。