前面聊了Key、报错、流式、省钱、调优,都是单点。今天把这些串起来,走一遍从测试到上线的完整流程。你照着做,能少踩一半坑。

阶段一:本地验证,能跑就行

别上来就写完整业务逻辑。先开一个独立的测试脚本,就干一件事——调通接口。

把Key配好,messages写死,跑一次看返回。通了之后,改temperature、改模型、改prompt,反复试。这个阶段的目标是确认你的业务场景用哪个模型、什么参数效果最好。

我习惯在这个阶段用最便宜的模型跑,比如DeepSeek的flash版或者智谱的Lite版。效果不满意再升档到V3或者GLM-4。别一开始上最贵的,调参阶段浪费的钱没意义。

测试脚本里顺手把调用耗时和token数打出来,存到本地日志。后面选型的时候这些数据有用。

阶段二:封装成函数,加基础容错

脚本跑通了,把它封装成一个函数。输入是user消息,输出是AI回答。

函数里至少干三件事:超时设置(读取超时120秒起步)、重试逻辑(429和5xx重试3次,指数退避)、异常捕获(把错误码和返回信息完整记下来,别只打印"出错了")。

这个函数是你的核心基建。把Key放在环境变量里读,别硬编码。把模型名也做成可配置的,方便后面切换。

写几个单元测试,覆盖正常返回、超时、限流三种情况。后面改代码的时候跑一遍测试,不会把旧的搞坏。

阶段三:接入真实业务,小流量跑

把封装好的函数挂到你的应用里。比如你是做客服系统,就把AI回复的逻辑替换成调用这个函数。

但有个关键动作——只放5%到10%的真实请求走AI,其余请求走旧的逻辑或者返回占位符。这叫灰度。

灰度跑一周,盯着两样东西:错误率平均耗时。错误率超过1%就去查日志,看是代码问题还是厂商服务波动。平均耗时超过你预期就考虑换模型或者加缓存。

这一周里,人工抽查AI的回答质量。如果发现格式不对、内容跑偏,回去调prompt和temperature,重新发版。

阶段四:全量放开,监控跟上

灰度没问题了,把流量切成100%。

但监控不能停。至少配三个告警:单小时调用失败率超过5%单日消耗金额超过预算的80%单次请求平均耗时超过阈值(不同模型阈值不同,DeepSeek-V3我设5秒,大文件生成可以放宽)。

另外记一个容易被忽略的指标——Token输入输出比。如果这个比值突然变大,说明有人塞了很长的prompt或者对话历史膨胀了。去查调用日志,定位到具体用户或者业务场景,该优化优化。

阶段五:成本优化,别等到账单吓一跳

全量跑了一个月,拿着真实的调用数据做三件事。

第一,看哪些场景调用量最大。如果发现"欢迎语生成"占了30%的调用量,把它从大模型换成模板拼接,或者用便宜的Flash模型。

第二,开启语义缓存。重复率高的问题直接命中缓存,不回源大模型。配置方法之前的文章聊过,不展开。

第三,评估是否要切模型。比如你用V3跑了一个月,发现大部分请求的复杂度其实用不上那么大参数。切到DeepSeek-Chat或者GLM-4-Flash,单次成本降一半以上,效果差不多。

阶段六:应急预案,出了事不慌

上线的系统总要准备后手。提前写好三个脚本。

一键降级:所有AI请求直接返回固定话术,比如"系统升级中,稍后再试"。厂商大规模故障或者你的Key全被封了,立刻执行,保住核心功能不崩溃。

一键切Key:如果某个Key被限流或者额度用完,立刻换备用Key。这个操作应该做到秒级切换,不需要重新部署代码。

一键清缓存:如果缓存里的数据跟最新业务规则冲突了,比如退货政策改了,但缓存里还是旧版本,一键清空所有缓存条目,强制回源。

这三个脚本在测试环境验证过,上线当天再跑一遍确认能用。

上线当天,做这几件事

把环境变量在线上服务器全部确认一遍,尤其是模型名、base_url、超时时间。

先把新代码部署到一台机器,切1%流量过去。跑半小时,确认日志没有异常报错,再逐步扩大到所有机器。

整点看一下第一小时的错误率和平均耗时,跟灰度阶段的数据对比,偏差不大就继续观察。偏差大就回滚,别犹豫。

你迟早会碰到的事

厂商突然发公告说模型要升级,旧版本下线。留给你三周迁移时间。到时候你的代码里模型名一改就能切过去?我建议从一开始就把模型名写在配置文件里,不是硬编码。切模型只需要改一行配置,重启服务。

还有更麻烦的——厂商变更了API协议,从v1变成v2,请求格式变了。这种时候SDK要升级,代码要改。所以SDK版本锁死在LTS版,别追最新,除非有重大安全更新。厂商提前发升级通知,预留两周测试时间。

最后说一句,上线不是终点,是另一个起点。上线后第一个月,每天花十分钟看监控面板,了解你的调用模式。哪个时间段流量最高、哪个模型最费钱、哪个用户请求最重。看到异常及时动手,别等账单追着你跑。

这套流程跑下来,你的AI接入项目就算站住脚了。后面就是日常维护和持续优化,那就是另一个话题了。