TikTok 今天被正式要求剥离美国业务,否则就禁。新闻里都在讨论算法,说那是核心资产,不能卖。我盯着这条消息,脑子里想的却是另一件事:算法这玩意儿,说到底不就是一套“如果-那么”的规则树吗?它能成为护城河,是因为它不断在变,在自我迭代,对手抄不走那个“动态”。那我手里这个破客服机器人,能不能也搞出点“动态”来?
上个月接了三个小程序的活儿,客户都要求带客服功能。我一开始图省事,直接对接了某云的智能客服 API,按调用次数收费。结果第一个月账单过来,我差点没背过气去。用户半夜两点问“在吗”,机器人回一句“您好,请问有什么可以帮您?”,这就算一次有效调用,扣我八分钱。一天几千条“在吗”、“你好”,流水一样把钱冲走了。这哪是客服,这是销金窟。我跟合伙人吵了一架,他坚持要招个真人客服,说稳定。我一算账,一个月起码五千块工资,还得管社保,还得担心他摸鱼、离职。去他妈的,我自己写。
真正的难点不在自然语言处理,那玩意儿我搞不定,也没必要。难点在于怎么把散落在各处的“业务规则”抓取、结构化,然后让机器能执行。客户的小程序,有的是卖水果的,要查订单、改地址;有的是搞本地家政预约的,要排班、确认时间;还有的是做知识付费的,老有人问“课程能不能下载”。这些问题的答案,其实都藏在他们的后台数据库里,或者某个管理员的脑子里。我要做的,不是让机器人学会聊天,是让它学会“定位”和“抓取”。
我先用 Python 的 requests 库和 BeautifulSoup,把客户后台那些常见的 Q&A 页面爬了一遍。不是瞎爬,得模拟登录状态,处理那些反爬的懒加载和动态 DOM 树。爬下来的数据,用正则和 xpath 抽取出问题和标准答案,扔进 SQLite 建个本地知识库。但这只是静态的。订单状态、预约时间这些是实时变的。所以第二步,我写了个中间层,用 Flask 搭了个简易 API 服务。这个服务的核心逻辑是“关键词路由”:用户输入里一旦命中“订单”、“单号”这些词,就直接调客户数据库的只读接口(事先要来了权限),把查询结果模板化成一句话回复;命中“预约”、“时间”,就去查排班表。
最恶心的部分是“模糊匹配”和“上下文”。用户不会按你设定的关键词说话。他说“我那个买东西的到哪里了”,你得能联想到“订单物流”。我用的是最土的办法:维护一个同义词映射字典,外加 jieba 分词后计算词向量余弦相似度,设个阈值。低于阈值的,一律 fallback 到“这个问题我还在学习中,您可以尝试输入‘订单查询’或联系人工客服”。至于上下文,我用了最简陋的会话 ID 绑定内存对象,五分钟内同一个用户的问题,会带上轮对话的关键词一起做判断。比如他先问“周三下午能打扫吗”,机器人回了“可预约时段为下午2点-4点”,他接着问“那费用呢”,机器人就得知道这个“费用”指的是“周三下午打扫的费用”,而不是课程费用。
搞了整整两个通宵。凌晨四点,我在服务器上部署完最后一段代码,用测试账号发了句“我上周买的橙子发货没”。三秒后,机器人回了:“订单尾号7788的‘秭归脐橙’已于8月25日发货,快递公司:中通,单号:773820xxxx,预计明天送达。”那一刻没有兴奋,只有一种虚脱般的平静。我知道这玩意儿离“智能”还差十万八千里,它笨、脆弱,规则一复杂就可能崩。但它不会请假,不会闹情绪,半夜两点回“在吗”也只用消耗我服务器上一点微不足道的电力和算力。
看着 TikTok 的新闻,我突然有点恍惚。他们的算法护城河,是百亿级数据训练出来的深度神经网络,能预测你下一秒想刷到什么。我的“算法”,是一堆 if-else 语句、正则表达式和数据库查询拼凑起来的破烂。但本质上,我们都在做同一件事:用确定的代码逻辑,去应对不确定的世界,并试图从中榨出一点效率,省下一点成本。他们的算法值千亿美金,防御的是国家级的竞争。我的算法,可能只值每个月省下的五千块工资和无数个安睡整晚的觉,防御的是生活本身的无尽消耗。这大概就是 scale 的差距。
合伙人早上试用了机器人,没说什么,只是把招聘客服的帖子删了。我知道,下个月,当又有客户提出客服需求时,这场无声的战争还会继续。我得想办法让这个破烂的规则树,再长高一点,再茂盛一点。至少,在它彻底不够用之前。














