客户那边又炸了,凌晨两点微信群里还在刷屏。我盯着屏幕,脑子里就一个念头:这破事儿能不能别他妈再找我了。上个月刚用 Python 的 requests 库配合 BeautifulSoup 把竞品官网的 FAQ 爬了个底朝天,现在又要处理自家客服的历史对话数据。三万条聊天记录,Excel 打开都卡,更别说让人去看了。
我让助理把聊天记录导成 JSON,字段乱得跟车祸现场一样。用户消息、客服回复、时间戳混在一起,还有一堆“嗯嗯”、“好的呢”这种无效信息。第一步是清洗,用正则表达式匹配时间格式,再用 Pandas 把对话按会话 ID 和轮次重新组织。光是处理转义字符和异常编码就花了三个晚上,中间还因为内存溢出崩了两次。我算是明白了,数据预处理这活儿,脏、累、还没成就感,但跳过它后面全是坑。
清洗完的数据扔给 TensorFlow 搞了个最简单的 seq2seq 模型,用 LSTM 单元。训练集就是历史问答对,目标让模型学会根据用户问题生成客服风格的回复。一开始效果惨不忍睹,生成的不是车轱辘话就是完全无关的句子。调参调到怀疑人生,注意力机制加上了,词嵌入维度从 128 调到 512,batch size 改来改去,loss 曲线还是像过山车。后来发现是训练数据里太多“请稍等”、“我帮您查一下”这种过渡句,模型学废了,以为这就是标准答案。又回头加规则过滤,把这类无效对话对剔除。
模型跑起来那天,我把它挂到测试环境,模拟了五百个并发请求。回复速度是快了,平均响应 200 毫秒,但仔细看内容,还是透着一股“机器味儿”。比如用户问“快递怎么还没到”,它可能回“关于快递问题,请您提供单号哦”,而不会像真人客服那样先接一句“理解您焦急的心情”。这中间的差别,就是那点“人情味”,而模型暂时还学不会这个。不过对于标准问题,比如“退货流程是什么”、“保修期多久”,它已经能给出准确、统一的答案了。
API 永不请假,且不交社保。这句话是我在监控日志里看到零错误记录时,脑子里蹦出来的。那个客服组长小王,上个月因为孩子发烧请了三天假,整个排班表全乱了。现在这个模型,凌晨三点、国庆长假,随时待命。它不会抱怨,不会情绪化,不会要求涨薪。从成本角度看,它完美。但我知道,这只是第一步。现在的模型还是个“鹦鹉”,它只是重复它看到过的模式,离真正的“理解”和“应对”还差得远。比如遇到没见过的奇葩问题,它就会开始胡言乱语。
这让我想起李子柒。以前觉得她那套太慢,种个菜要等一季,酿个酱油要等一年。互联网要的是快,是增长黑客,是 A/B 测试每小时迭代一次。但现在我有点懂了,她那种“慢”是在构建一个完整的、自洽的系统。春种秋收,环环相扣,急不来。我做这个客服模型也一样。爬数据、洗数据、训练、调优、对抗攻击测试……每一步都急不得。你跳过数据清洗,模型就学一堆垃圾;你省掉人工审核,上线就可能说出政治不正确的话。这不是写个爬虫脚本一夜之间就能爆流量的事儿,这是挖渠,一锹一锹地挖,水才能自己流过来。
团队里的小孩问我,要不要上 GPT-3 的 API,说那个更牛。我算了笔账,按我们这咨询量,一个月 API 调用费能再养两个客服。算了,还是自己训的这个小模型划算,虽然笨点,但听话,成本可控。技术这玩意儿,有时候不是越新越好,而是越合适越好。我现在追求的,不是炫技,是稳定地、低成本地解决问题。就像李子柒的菜园子,可能没有现代农业大棚产量高,但它能持续运转,且每一环都在自己掌控之中。
深夜,脚本还在跑着新一轮的训练。我关掉显示器,屋里只剩机箱风扇的低鸣。这是一种很奇怪的踏实感,你知道有个东西在替你干活,而且会一直干下去。它不懂疲惫,但它也永远不懂,屏幕另一端那个等快递的人,到底有多着急。这就是代价。














