背景与痛点
去年公司“618”大促,客服部直接崩溃:
- 人工坐席排队 40+,用户平均等待 8 分钟
- 传统关键词机器人只会“亲亲,稍等哦”,答非所问,退货率飙升
痛定思痛,我把目光投向了低代码 NLU 平台 Coze。它把意图识别、槽位抽取、对话流、知识库做成“拖拉拽”,半小时就能跑通 MVP,而且免费额度对小团队足够友好。本文记录我踩过的坑,带你从零搭一套“能顶 80% 重复咨询”的智能客服。
环境准备
- 注册账号:官网直接用 GitHub 登录,省去企业认证 3 天等待
- 创建 Bot:控制台 → 新建 → 类型选“客服问答”,先别勾“多轮对话”,后期再开
- 拿密钥:左侧菜单“设置 → API Key”,复制
sk-xxx并配置环境变量,代码里直接os.getenv("COZE_KEY"),避免硬编码泄露 - 安装 SDK:
pip install coze==0.4.1(官方每周迭代,用最新版)
核心实现
1. 意图识别模块配置
在“NLU 模型”页新建意图,把用户常问的三类话述一次性贴进去:
- 物流:【我的快递】【物流单号】【到哪了】
- 退换:【七天无理由】【怎么退货】
- 活动:【优惠券】【满减规则】
每类至少 20 条样本,Coze 会自动扩写同义词。训练完点“测试”,准确率≥85% 再发布。
Python 调用示例(含重试、日志):
import os, requests, logging, time from requests.adapters import HTTPAdapter logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") KEY = os.getenv("COZE_KEY") BOT_ID = "123456789" def nlu(text: str, retry=3) -> dict: url = f"https://api.coze.com/v1/bot/{BOT_ID}/nlu" hdr = {"Authorization": f"Bearer {KEY}"} body = {"query": text, "uid": "test_user_001"} s = requests.Session() s.mount("https://", HTTPAdapter(max_retries=retry)) try: r = s.post(url, json=body, timeout=1.5) r.raise_for_status() data = r.json() logging.info(f"NLU结果:{data}") return data except Exception as e: logging.error(f"NLU异常:{e}") time.sleep(0.5) return nlu(text, retry-1) if retry > 0 else {"intent": "Default", "slots": {}} if __name__ == "__main__": print(nlu("我的快递到哪了"))2. 对话流设计
官方推荐画流程图再导出 JSON,方便 Git 版本管理。下面是一个“物流查询”最小闭环:
对应 JSON 模板(可直接导入):
{ "name": "物流查询", "entry_intent": "logistics", "slots": ["order_id"], "nodes": [ { "id": "ask_order", "type": "ask", "prompt": "请问您的订单号是多少?" }, { "id": "call_api", "type": "webhook", "url": "https://my-logistics-api.example.com/query", "method": "GET", "params": {"order_id": "{{slots.order_id}}"} }, { "id": "reply_result", "type": "text", "text": "您的包裹已到【{{api.city}}】,预计明天送达。" } ], "edges": [ {"from": "ask_order", "to": "call_api"}, {"from": "call_api", "to": "reply_result"} ] }把webhook地址换成自家后台,即可把订单状态实时拖回。
3. 知识库接入
FAQ 型问题无需写流程,直接“知识库 → 批量导入”:
- 准备 csv:question,answer 两列,用 Excel 另存为 UTF-8
- 上传后打开“语义召回”,阈值设 0.8,低于阈值才走对话流,减少误触发
- 每周把人工客服新整理的 QA 追加一次,点“增量训练”,5 分钟生效
性能优化
响应延迟优化
- 把 webhook 部署在同地域云函数,内网调用 < 60 ms
- 对物流、库存等实时接口做 Redis 缓存,5 分钟 TTL,命中后 120 ms 内返回
并发请求处理
- Coze 默认 QPS 100,高峰不够?后台开“异步模式”,把用户请求先落库,再用队列回写答案,前端轮询即可
- 若接入微信,建议用“被动回复”接口,避免 5 秒超时,Coze 侧返回空字符串,后续主动推送给用户
避坑指南
- 意图冲突:物流/退货都含“订单号”槽位,容易串台。解决:在“退货”意图加否定词“没到、未收到”,并勾选“优先级”调高
- 槽位缺失:用户直接甩截图,OCR 订单号失败。解决:加正则实体
[0-9]{12},并开“模糊匹配”,截图文字乱码也能召回 - JSON 导入失败:字段里含中文冒号。解决:先把流程图导出,用 VSCode 全局替换全角符号
- 知识库答非所问:把“闲聊”意图关闭,或把阈值提到 0.9,防止“谢谢”触发商品介绍
进阶建议
接入企业微信:
应用 消息服务器 URL 填https://api.coze.com/v1/callback/wework,Token 随机生成,在 Coze“渠道配置”里粘贴同样值,完成双向验证即可钉钉群机器人:
把 webhook 地址填到 Coze“推送通道”,@机器人 的消息会被自动转发给 Coze,答案以“markdown”格式回群,支持 @指定用户会话状态管理:
多轮场景用 Coze 自带的session_id,但跨天需要持久化。可在自家后台建表(user_id,session_data,expire_at),把 Coze 返回的上下文 JSON 原样存进去,次日继续对话无压力
结尾思考
目前我的客服 Bot 已能覆盖 82% 的重复咨询,把人工坐席从 20 人压到 4 人轮值。但“意图漂移”依旧存在:大促期间用户会发明新问法,模型效果随时间衰减。你是打算定期人工标注再训练,还是直接上“用户反馈-模型自学习”的闭环?或者把 LLM 生成能力与 Coze 的精准意图做融合?欢迎留言聊聊你的方案。