背景
老板让你做智能客服。你打开 ChatGPT,写了两行 Prompt,效果挺好——然后上线第一天,账单吓哭了财务。
这事一点都不夸张。
2016 年,同样的需求,你会打开一个叫 botframework 的库,然后开始写正则:
re.compile(r'我想查.*物流') re.compile(r'退款|退货|不想要了')2026 年,你可能只会在 VS Code 里敲:
importopenai response=openai.ChatCompletion.create(model="gpt-5.6",messages=[{"role":"system","content":"你是客服,把用户意图分成:查订单、退款、投诉……"}])从满屏幕正则,到一行 API——很多人就得出结论:传统 NLP 该进博物馆了。
错了。
它们没死,只是躲到了系统最底下,变成了这台机器的「骨骼」和「反射弧」。真正能扛住生产流量的方案,往往不是「全盘 GPT」,而是把规则、小模型、大模型缝在一起。
下面是NLP的历史及发展阶段:
一、规则时代:就是在写永远写不完的 if-else(1960s – 2000s)
NLP 最早其实没什么神秘感。1966 年,MIT 有人写了个聊天机器人 ELIZA,假装心理医生。核心逻辑放到今天,大概长这样:
if"妈妈"inuser_input:return"说说更多关于你家庭的事情吧"elif"我想"inuser_input:desire=re.findall(r'我想(.*)',user_input)returnf"为什么你想{desire}呢?"else:return"我明白了,请继续说"看见没?关键词匹配 + 模板填空。这就是最早的「意图识别」。
后来电话语音客服(那种「按 1 查话费、按 2 办业务」)更狠:把用户可能说的话全穷举出来,再套一层层状态机。对程序员来说,就像在维护一个永远覆盖不完的switch-case。
爽的地方:结果可控。没概率、没幻觉,出了 bug 就是打断点。
疼的地方:用户换个说法就挂。「俺那个快递到哪了」——你的正则当场白给。规则越堆越多,最后没人敢动。
一句话记住这个时代:确定性强的事,代码本身就是最好的模型。
二、统计时代:别穷举了,让机器自己从数据里找规律(2000s – 2015)
数据多了以后,大家换了思路:与其手写一万条规则,不如把意图识别当成「文本分类题」。
套路很固定,两步走:
- 把文字变成数字(当时叫特征工程):词袋、TF-IDF 之类,本质是「这句话里出现了哪些词、哪些词更重要」。
- 丢给分类器:朴素贝叶斯、逻辑回归、SVM……哪个好用用哪个。
2010 年左右,代码大概长这样:
fromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.svmimportSVC vectorizer=TfidfVectorizer(ngram_range=(1,2))X_train=vectorizer.fit_transform(["我要退货","怎么退款","快递到哪了"])model=SVC(kernel='linear')model.fit(X_train,[1,1,0])# 1=售后,0=物流print(model.predict(vectorizer.transform(["俺东西不想要了"])))# [1]好处很明显:用户换个说法,模型往往还能认出来。
坏处也明显:特征得人肉设计。词性、实体、句法树……一堆语言学知识硬塞给算法,像在开一家永远结不了业的作坊。
这个时代留下的关键认知是:文字得先变成向量,机器才好算。至于怎么变成向量,当时还得靠老师傅。
三、深度学习时代:不用懂语言学了,会调包就行(2015 – 2020)
Transformer 一来,特征工程那套作坊基本被砸了。
新想法很直观:别查词典定义「苹果」是什么,看它旁边站着谁。旁边是「吃、甜」,多半是水果;旁边是「华为、充电」,多半是手机。
BERT 之后,程序员日常变成了「微调」:拿一个预训练好的模型,用自己的业务数据再训一小下。很多时候,代码就这样:
fromtransformersimportpipeline classifier=pipeline("text-classification",model="my_intent_model")result=classifier("这手机太烫了,能退吗?")# [{'label': '退款', 'score': 0.98}]精度一下子拉开差距。学术界和互联网公司迅速上车,空气里弥漫着一种感觉:传统 NLP 好像死了。
其实没有。它只是不再站 C 位了。
四、大模型时代:对话窗口里就能「写程序」(2020 – 现在)
ChatGPT 出来之后,游戏规则又变了。
很多任务不用再单独标注数据、训练小模型。你直接跟模型说清楚规则就行——这就是常说的 Prompt(提示词):
System: 你是意图分类器。类别只有:查订单、退款、闲聊。 User: 我买的东西怎么还没到? Assistant: 查订单更夸张的是,它还能听懂弯弯绕绕的话。比如「这手机太贵了,有没有便宜点的替代?」——里面同时有比较、推荐、价格敏感好几层意思,以前要拆好几个模型,现在一句话就能糊弄过去。
于是灵魂拷问来了:既然 GPT 这么强,前面那些 if-else、小模型,是不是都能删了?
五、上线才知道疼:全靠 GPT,账单和延迟会先打你一顿
生产环境里,每秒可能涌进来上万次请求。这时候把所有流量都丢给大模型,财务和运维会一起找你谈话。
对比一下就清楚了:
| 看什么 | 规则 / 小模型 | 大模型(LLM) |
|---|---|---|
| 速度 | 毫秒级,普通 CPU 也能跑 | 经常要等几秒,还得靠贵 GPU |
| 钱 | 几乎不要钱 | 按字数(Token)收费,流量一大就是天文数字 |
| 靠不靠谱 | 规则几乎 100% 可控 | 会「一本正经胡说」,标签没法保证绝对对 |
| 隐私 | 数据可以完全留在本地 | 调外部 API,合规要额外操心 |
自动驾驶不敢把刹车全交给「感觉差不多」的概率模型;金融、医疗、订单这些核心链路也一样——你需要白盒、可控、便宜的那一层。
所以今天真正务实的玩法,不是「用 GPT 换掉一切」,而是做成一个漏斗:简单的自己挡,拿不准的再往上交。
六、真正能上线的玩法:漏斗架构(规则 + 小模型 + 大模型)
把它想成客服班组,而不是一个万能神仙。
第 1 层:规则 —— 极速反射
最前面还是关键词、正则。像「播放音乐」「打开空调」这种又高频、又句式死板的指令,直接走规则:零延迟、零费用。
这是系统的骨骼。
第 2 层:小模型 —— 日常主力
大约八成常规流量,交给微调过的轻量模型(比如 DistilBERT、TinyBERT 这类)。比大模型便宜得多、快得多,效果也够用。只有它自己说「我不太确定」(比如置信度低于 0.9),才把难题往后扔。
这是系统的肌肉。
第 3 层:大模型 —— 救火队
那些被前两层「拒绝」的长尾怪话,才进 GPT。比如:
「我昨天那个单子啊,就是那个蓝色的,不想要了,你们看怎么处理一下?」
这种又绕又模糊的话,让大模型拆意图,甚至直接回一句澄清:「您是想退货,还是改地址?」
这是系统的外星大脑——贵,但只在关键时刻上场。
隐藏层:数据飞轮 —— 让系统越用越聪明
大模型搞定的难题,审核之后可以变成小模型的新训练样本。等于大模型在带徒弟:徒弟越来越强,师傅出场次数越来越少,成本自然降下来。
这样一来,你同时拿到三样东西:规则的可控、小模型的性价比、大模型处理乱七八糟句子的能力。
写在最后
NLP 的历史,不是「新产品干掉老产品」那么简单。更像一个人不断长出新器官:老技术沉到下面当底盘,新技术顶上去扛难题。
- 规则和统计时代留下的东西(分词、标注、特征思路),变成了今天的底盘
- BERT 这类小模型,成了日常干活的主处理器
- 大模型更像老师:自己也能干,还能把本事教给小模型
所以,作为写业务系统的人,手里的武器不该只剩if-else,也不该只剩一次ChatCompletion.create。
更稳的姿势是:会写规则、会训小模型、会用大模型——然后把它们排成一个漏斗。
下次老板再说「做个智能客服」,别只会调 GPT。先问问自己:哪些请求其实一行正则就够了?
延伸阅读与资源
python入门:Rquests从菜鸟脚本到企业级SDK的网络实战圣经
Milvus向量数据库实战修炼:从 0 到 1精通向量检索与生产落地
后端工程师的 AI 转型第一课:Ollama 与私有化大模型实战
10倍开发者的 Dify 魔法书:从零构建全栈 AI 应用
后端工程师转型AI第一课-Ollama 与私有化大模型实战
大型语言模型(LLM) vLLM 高性能推理落地实战
Agent开发之LlamaIndex 实战修炼与源码进阶
大语言模型Transformers 实战修炼与源码剖析