做了一整年企业级大模型落地的项目,我最大的感触是:真正挡住团队的从来不是模型效果不够好,而是需求拆不明白、验收标准定不出来、线上稳定性扛不住。大模型业务场景应用这件事,光有一个聪明的大脑远远不够,它需要一套从需求分析到稳定性优化的完整打法。这篇文章我打算用自己实际跑过的一个项目来复盘整个过程,希望给正在做或准备做类似项目的朋友一点参考。
这不是一篇讲算法原理的文章,而是一篇偏工程落地的复盘。我尽量把每个阶段做了什么、为什么这么做、踩过什么坑都讲清楚。如果你正面临"业务方想让大模型处理业务,但不知道该从哪里下手""Demo跑通了,一上线就翻车""模型一会好一会坏,不敢放量"这些问题,那这篇文章应该能派上用场。
1. 需求分析阶段:先说服自己"这个问题值得用大模型"
1.1 从业务现状出发,把模糊诉求翻译成可执行的任务定义
我当时接到的项目背景大概是这样的:某公司的客服部门每天要处理几十万张工单,客服人员需要先判断工单属于哪个类别(投诉、咨询、退换货、发票、物流等),再给用户写回复。业务方最初的需求描述只有一句话:"我们想用大模型把工单处理和回复都自动化。"
这个诉求听起来雄心勃勃,但如果直接拿这句话去搭建系统,大概率会翻车。原因很简单:工单处理不是一个任务,而是一串任务,每个任务的验收标准、失败代价、数据形态都完全不同。我们第一步做的是把业务链路上的动作拆开,逐个确认哪些环节适合用大模型介入。
拆解之后发现,客服业务实际上包含这几个动作:工单分类、用户意图识别、情绪判断、知识点检索、回复草稿生成、敏感信息校验。我们对每个动作都问了三个问题:现在人是怎么做的?机器介入后失败的代价有多大?大模型相比传统规则引擎的优势在哪里?对比下来的结论是:工单分类和回复草稿生成这两个动作最适合先落地,因为这两个环节的输入输出都是自然语言,而且业务方手里有大量历史标注数据可以用来验证效果。至于最终是否直接自动回复用户,我们明确砍掉了,原因在下一节详细说。
这个阶段一个比较重要的产出物是"任务定义表"。每一行写清楚:任务名称、输入字段、输出字段、使用场景(内部使用还是面向用户)、单次调用时延预算、单次调用成本上限。这张表后面做模型选型和稳定性设计时都要反复参照,它相当于整个项目的地基。
1.2 大模型适用性判断:三条标准帮你少做无用功
需求分析阶段最关键的环节不是列任务清单,而是判断这个任务到底适不适合用大模型。我总结了一套比较实用的判断标准,准确率还可以,这里分享给大家。
第一条,任务的核心是"语义理解与生成",而不是"精确计算"。大模型本质上是概率模型,它擅长从一段半结构化的文本里提取要点、生成通顺的话、理解隐含的情绪和诉求,但在精确数值运算、固定规则的逻辑判断上并不靠谱。比如"计算订单的折扣金额"这种任务,传统代码一行就搞定了,完全没必要请大模型出场。
第二条,必须允许一定比例的错误。大模型一定会出错,区别只是错误率高低。如果业务场景是"出错就要赔钱""出错就要背处分",那么要么不做,要么把大模型放在"建议"的位置,由人来最终把关。我们当时砍掉"自动回复用户",就是因为客服回复如果出现严重错误,直接影响用户投诉和品牌口碑,风险太大。改成"生成回复草稿供客服人工确认"之后,项目才真正跑通。
第三条,数据不外泄、响应时间可控、成本在可接受范围。很多业务方一开始没概念,以为接入一个大模型API就万事大吉。实际上,敏感业务数据能不能发到外部平台,在很多行业是有硬性要求的。响应时间和成本更是两个容易在事后爆雷的指标。
1.3 验收指标提前定义:没有评测集等于自娱自乐
需求分析阶段最容易忽略、但后患最大的事情,是没有提前定义"什么叫做得好"。很多团队Demo做得很好,一上真实业务就崩,根本原因就是从一开始就没有建立一套可量化的验收体系。
我们当时的做法是:从历史工单里随机抽了2000条,让业务方和算法团队一起人工标注,给每条工单打上正确的类别标签,并对历史客服回复做一个质量打分。这个标注集成了后续所有效果验证的"标尺"。后续Prompt怎么改、模型怎么换,都要在这个固定集合上跑一遍,看指标有没有退化。
指标定义我整理成了一张表,放在项目文档里反复对照:
| 业务环节 | 核心指标 | 目标值 | 采集方式 |
|---|---|---|---|
| 工单分类 | 准确率 | 不低于95% | 标注集上的人工复核 |
| 工单分类 | 覆盖率 | 不低于99% | 所有工单类别均可识别 |
| 回复草稿 | 采纳率 | 不低于40% | 客服是否直接使用草稿 |
| 回复草稿 | 平均修改字数 | 越低越好 | 客服修改前后对比 |
| 全链路 | P95响应时间 | 不超过3秒 | 线上日志统计 |
| 全链路 | 单次调用成本 | 不超过0.05元 | 费用账单 |
这里面我最想强调"采纳率"这个指标。很多项目只盯着"模型生成的文本通不通顺",但客服业务真正的价值是"客服愿意直接用"。如果生成的草稿每次都要大面积修改,那这个功能对业务的提升就非常有限。有的时候模型生成的回复语气太像AI、有的时候缺少必要的落款和问候语,这些都会让客服选择全部重写。所以后来我们专门优化了这一点,把客服使用习惯也纳入了Prompt设计。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模型选型与技术路线:商业API、开源部署还是混合架构
2.1 三条技术路线的真实对比
需求明确之后,紧接着就是选型问题。这里说的选型不仅仅是"选哪个大模型",而是"通过什么方式接入大模型能力"。我们当时认真对比过三条技术路线,优缺点都很明显,这里直接上结论。
第一条是调用商业大模型API。优点是接入速度快,效果普遍不错,尤其是复杂语义理解任务;不需要自己维护推理集群,省掉大量算力运维成本;各家平台都有在线调参工具,方便快速验证。缺点是核心业务数据要传给第三方服务,部分业务场景存在合规风险;费用按Token计费,加上并发量大之后,长期成本未必比自建低。
第二条是私有化部署开源模型。优点非常突出:数据完全留存在内部服务器,安全合规压力最小;没有按Token计费的概念,硬件到位之后边际使用成本很低;而且模型权重在我们自己手里,可以按需做微调。缺点也明显:需要一支懂模型推理优化的团队,光是把模型跑起来并以可接受的延迟服务线上请求,就要花不少功夫;硬件投入初期不低,GPU服务器和配套的推理框架调优都是成本。
第三条是混合架构。在核心链路用私有化部署的开源模型,在边缘场景或冷启动阶段临时调用商业API补齐能力窗口期。这条路线的好处是灵活,但增加了系统复杂度,你得同时维护两条模型调用链路、两套监控体系。
当时我们做了一个决定:前期快速验证阶段直接用商业API把整条链路跑通,因为团队当时对部署开源模型还没有把握;等链路稳定、数据积累够了,再评估是否需要切换到本地部署。这个决定看起来保守,但省掉了大量"为选型而选型"的时间。快速验证阶段最重要的目标是让业务方看到全流程跑起来的样子,而不是在一开始就陷入基础设施的泥潭。
2.2 快速验证阶段的策略:先跑通再优化
如果你也在做一个从零开始的大模型项目,我比较推荐"先跑通再优化"的策略。不要一上来就纠结是微调还是RAG、是部署7B还是13B,先用手头最容易获取的大模型能力,把最小可行闭环搭出来。
我们当时在两周内做了这样一件事情:写了一个简单的调用脚本,输入一条工单文本,输出建议分类和回复草稿。不过分追求表现效果,重点是把整条调用链路(外部API、参数传递、结果解析、错误处理)跑顺畅。然后拿50条真实工单做了一次人工评估,发现分类准确率已经能做到85%左右。这个数字给了业务方信心,也让团队明确了后续优化的方向——主要的错误集中在少数几个类别上,这直接引导了后续Prompt的设计,而不是引导我们着急换模型。
有一点我想提醒大家:快速验证阶段不要用精美包装过的示例数据,要用线上真实数据。很多项目Demo效果好到惊人,是因为测试用例是精挑细选的。真实工单里会有错别字、表情符号、口语化表达、超长文本、甚至夹带广告链接,这些才是你真正需要面对的情况。
2.3 一个被低估的决策因素:数据流向与合规
模型选型的时候,技术团队更容易关注参数量、推理速度、跑分这些指标,但实际项目里常常被忽略、最后却最折腾人的,是数据合规问题。
我们在项目早期就明确了:客服工单里包含大量用户个人信息、订单信息、支付信息,这些内容原则上不能无约束地流向外部平台。所以在技术选型之前,我们先是和公司的合规团队沟通,确认了数据外发的审批流程、可接受的数据脱敏方式、以及哪些字段必须留在内网。这个确认环节直接影响了两件事:第一,把用户ID、手机号、家庭地址等敏感字段在调用模型前做脱敏替换;第二,最终决定核心链路要走向私有化部署,哪怕前期先用商业API验证,也必须给切换留好接口。
这里给一个比较实际的建议:在项目立项阶段就把数据合规作为一个独立的风险项写进文档,不要等项目做了一半才被发现"数据不能出内网",那会儿返工成本会非常高。
3. Prompt工程与效果迭代:从第一版能跑,到逐步稳定
3.1 第一版Prompt的通用框架与参数
很多第一次接触大模型的人以为Prompt就是"写一段话告诉模型做什么",但实际上一个可工程化的Prompt需要考虑结构、边界、格式约束和兜底机制。我们第一版跑下来的Prompt框架大概是这样的:
code复制【系统指令】你是一名经验丰富的客服专家,请根据用户工单内容完成分类和回复草稿生成。
【任务要求】
1. 判断工单类别,从以下候选中选择一个:投诉、咨询、退换货、发票、物流、其他。
2. 生成回复草稿,要求语气自然、专业、简洁,不承诺未核实的信息。
【输出格式】
严格按照如下格式输出:
类别:xxx
回复:xxx
【参考示例】
工单内容:我昨天买的洗面奶今天发现瓶盖是裂开的,我要退货!
类别:退换货
回复:非常抱歉给您带来不便,我们为您安排退换货处理,请您在订单页面提交退货申请。
【当前工单】
{工单文本}
这个框架看起来简单,但有几个细节值得展开说。
第一,把候选类别枚举出来,并且提供几条参考示例,这能显著提升分类准确率。模型在空泛描述任务时自由度太高,给出具体选项后,模型只需要做"从候选里选一个"的判别式任务,难度和随意性都大幅下降。
第二,对"不承诺未核实的信息"这种限制一定要写清楚。客服场景最怕的就是模型生成"我们保证三日内退款"这类话,万一业务上做不到,客服还得删掉再改。加上这个限制之后,模型生成的内容明显更谨慎了。
第三,为了稳定拿到结构化结果,我们用了一个比较"土"但很有效的方式:要求模型按固定格式输出"类别:xxx / 回复:xxx",而不是让它自由发挥。后来有更好的JSON输出模式,效果会更好,但我们这个方案在当时已经完全够用,且解析代码极其简单,基本不会因为格式问题挂掉。
关于参数,我的经验是:分类任务把temperature调成0或者接近0,尽量让输出稳定;生成回复草稿这类任务可以把temperature设置在0.3到0.7之间,让语气多变一点;max_tokens可以根据草稿最长长度估算,一般设置成256或512就够,设得太大反而会增加单次响应时间。
3.2 效果迭代的闭环方法:badcase驱动,而不是感觉驱动
Prompt改一轮、效果变一点,但怎么判断是变好了还是变坏了?很多团队的做法是肉眼看一下输出,"感觉不错"就上线。这个做法在前期可以,越到后面越危险。
我们当时建了一个非常简单的badcase驱动闭环。每一轮迭代前,从标注集里随机抽一部分样本跑一遍,把分类错误、格式错误、回复质量差的案例全部记录下来,统计错误类型分布,再针对占比最高的错误类型修改Prompt。改完之后,在完整的标注集上回归一遍,确保原来正确的样本没有被改错。
这里有一个重要的思维转变:Prompt优化的本质,是把模型在特定任务上的错误率逐步压低,你观察的不应该是"这次结果满不满意",而是"这批badcase的错误模式有没有变化"。比如我们遇到过一个典型问题:模型经常把"退货咨询"误判为"投诉",因为工单里同时出现"退货"和"态度不好"两个要素时,模型会倾向于选择情绪色彩更强的那一面。发现问题之后,我们在Prompt里专门加了一条:"如果用户只是询问退货流程,没有表达愤怒情绪,请归类为咨询。"就这一句话,分类准确率提升了两个百分点。
3.3 回复草稿生成中的幻觉治理
回复草稿生成是另一个效果痛点。最开始模型生成的回复虽然通顺,但经常出现"幻觉",比如编造退款时间、虚构售后政策、甚至引用一个不存在的优惠活动。客服看到这种草稿,第一反应就是全部删掉重写,采纳率自然上不去。
治理方案分两步。第一步是上文提到的,在Prompt里明确禁止模型承诺无法核实的细节;第二步是在下游加一道规则校验,把回复里出现的金额、日期、政策条款这类信息提取出来,和工单里的原始信息做交叉比对,不一致就拦住不推荐给客服。
这套"模型生成+规则校验"的组合,应该是所有大模型业务场景落地的标配思路。大模型负责理解语义和生成文本,规则引擎负责兜底和拦截,两者配合远好过任何一方单打独斗。
4. 稳定性优化:超时、重试、缓存、熔断与降级
4.1 稳定性风险评估清单:别等线上出事了才后悔
效果调到可接受之后,就可以考虑上线了。但经验告诉我,大模型项目的上线准备,重心不是功能测试,而是稳定性设计。模型推理和普通接口调用最大的区别在于:响应时间波动大、偶发错误多、依赖外部服务的可用性。任何一个环节出问题,都可能导致整条业务链路瘫痪。
我建议在上线前做一次稳定性风险评估,覆盖以下问题:大模型接口最大响应时间是多少,会不会超过业务容忍上限?输入文本有没有大小限制,超长工单怎么处理?模型如果连续返回错误,我们的系统能自动恢复吗?关键时刻,业务方能否接受降级到纯人工处理?数据库、缓存、消息队列这些基础设施有没有瓶颈?
这些问题不是空想,而是当时我们的血泪教训。有一段时间我们内部测试一切正常,但真实工单里偶尔会出现几万字的超长文本,直接把请求打超时,还拖慢了并发通道。后来我们加了输入长度截断和分级处理,才把这个坑填平。
4.2 健壮性设计的推荐配置:从网络到业务的逐层防线
我先说结论,再解释每项配置的理由。
| 防护层 | 推荐配置 | 说明 |
|---|---|---|
| 连接超时 | 2秒 | 网络层握手时间,超过直接放弃 |
| 读取超时 | 8秒 | 模型推理时长,给足余量 |
| 总共时预算 | 不超过10秒 | 所有重试加在一起的上限 |
| 重试次数 | 2次 | 只针对超时和5xx类错误 |
| 重试退避 | 1秒+3秒+随机抖动 | 防止同时重试打爆服务 |
| 精确缓存 | key=输入文本+模型版本+Prompt版本 | 相同内容直接返回历史结果 |
| 限流并发 | 默认10并发量级 | 用信号量控制,按实测调整 |
| 熔断阈值 | 5分钟内错误率超过50%则熔断30秒 | 防止故障扩散 |
| 降级方案 | 规则分类+模板回复+人工处理 | 模型不可用时业务不停摆 |
每项配置展开说一个点。
超时和重试是一对互相制约的配置。如果模型接口本身响应很慢,你又把所有超时加得很长,重试次数还多,那么一个请求最坏情况下会把整条链路堵死很久。我们当时定的原则是:单次请求的总时间预算控制在10秒以内,超过就放弃并记录日志,宁可让这一次调用失败,也不能拖垮后面的请求。重试只对"超时"和"服务端5xx错误"触发,4xx类错误重试没有意义,因为它们不是临时故障。
缓存的设计也值得说。工单分类有一个特点——用户反复问的其实就那几个类型,大量工单的分类结果是相同的。我们把输入文本做哈希作为缓存key,并加上模型版本号,这样同一个文本再次进来时直接命中缓存。实测下来缓存命中率超过30%,不仅省了成本,还大幅降低了模型服务的压力。但要注意:带缓存后,如果Prompt改了,必须同步换缓存key,否则线上会一直用旧Prompt生成的结果,之前就有人在这上面栽过跟头。
4.3 一次线上故障复盘:没有预案的下场
写这一节不是为了吓唬人,而是为了让后来者知道"稳定性工作不做会变成什么样子"。我们项目全量上线后的第二周,遇到过一起真实故障,原因特别低级,但影响特别惨。
当时依赖的外部大模型服务某个版本升级,返回格式里的一个字段名变了。我们的解析代码还是按旧字段取数,导致几乎所有请求都解析失败。因为没有错误率熔断机制,全部流量还在继续往上游打,每秒钟有成百上千个请求在报错。后台监控告警响了,但值班同学当时没有一键降级的开关,只能临时改代码、发版、重启,前后折腾了半个多小时,工单处理一度回到纯人工状态,积压了几千条工单。
那次故障之后,我们做了三件事:第一,在代码里单独隔离了模型返回结果的解析层,外部字段变化只影响这一层;第二,加了熔断开关,连续错误率达到阈值后自动切换到降级方案;第三,所有核心配置支持热更新,不用发版就能调整参数。做完这些之后,后续再遇到类似问题,系统基本能自愈,运维同学只需要事后看日志确认即可。
5. 线上监控与持续优化:别让项目变成一次性交付
5.1 核心监控指标与告警阈值
很多人都以为项目上线就算结束了,但大模型项目恰恰相反——上线只是开始。模型行为是概率性的,业务数据分布也在变化,你今天交付的效果也许稳定,但下周新涌进来的一批工单可能让准确率直线下滑。所以必须要有一套线上监控体系。
我这边监控面板的指标清单大致是:
| 指标 | 观测方式 | 告警阈值 |
|---|---|---|
| 请求量 | 调用日志 | 无 |
| 成功率 | 成功调用数/总调用数 | 低于95%告警 |
| P95响应时间 | 延迟分布 | 超过8秒告警 |
| Token消耗 | 费用账单 | 每日环比涨幅超过30%告警 |
| 缓存命中率 | 缓存命中数/总请求数 | 持续为0时告警 |
| 降级触发次数 | 熔断日志 | 大于0即告警 |
| 分类分布变化 | 线上结果分布 | 类别比例畸变时告警 |
前四项好理解,后两项尤其是"分类分布变化"值得多说一句。线上工单的类别分布通常是相对稳定的,比如咨询类占50%、投诉类占20%。如果某天突然变成投诉类占70%,说明要么业务出了问题,要么模型行为发生了漂移。这种异常只有通过持续监控才能发现,而它往往意味着必须重新迭代模型,不能坐视不管。
5.2 反馈数据回流:让模型在业务反馈里持续变好
线上监控只能发现问题,真正让模型持续变好,依赖的是反馈数据回流机制。我们当时在客服工作台做了两个很轻量的设计:一是让客服可以一键标记"这个草稿有用"或"这个草稿没用";二是记录人工客服对草稿的修改内容,保存修改前后的完整对照。
这套数据太有价值了。"标记没用"的案例是天然的badcase,我们每周拉一批出来看,搞清楚模型在哪些环节让客服不满意,然后针对性改Prompt,或者补充few-shot示例。修改前后的对照数据则可以用来训练一个独立的"质量评估小模型",自动给草稿打质量分,未来上线新版本前用它先自动筛一遍,而不用每次都靠人工评审。
5.3 成本控制与模型升级策略
大模型按Token计费,成本控制是上线之后绕不开的话题。我们做了两个关键动作:一个是缓存,上面已经讲过,节省了很大一部分重复调用成本;另一个是分层调用——简单明确的工单先用规则引擎或小模型处理,只有复杂语义任务才调用大模型。这个策略实施之后,整体成本下降了40%左右,同时大模型的调用量更聚焦,效果反而更稳。
关于模型升级,我的建议是:不要有"新模型出来了就必须换"的心态。新模型的效果评估要在我们自建的标注集上跑一遍,用统一的评测标准对比新旧版本,确认核心指标没有退化再切换。切换时要灰度放量,先让5%的流量走新模型,观察两到三天,没有异常再逐步放量到100%。这个流程虽然慢,但能有效避免"模型一升级,线上就翻车"的尴尬。
最后再分享一点个人体会。大模型业务场景应用这个事,做到最后你会发现,真正决定成败的往往不是模型本身多先进,而是你有没有把需求分析、验收标准、稳定性预案、监控体系这些东西做到位。一次草率的模型选型、一段不设评审流程的Prompt上线、一次没有兜底方案的接口变更,都可能让整个项目前功尽弃。如果让我给后来者一句忠告,那就是:先从一个低风险、小流量的内部工具切入,把从需求到监控的全流程跑顺了,再逐步扩大使用范围。这套基本功练扎实了,不管底层模型换成什么,你都能从容应对。
