
存量培训系统要接入AI实际落地时比想象中要麻烦得多。很多团队一上来就想着选个最火的模型写个接口调通就上线结果跑一段时间后发现问题全冒出来了业务方A接的厂商1业务方B接的厂商2提示词各写各的上下文管理各自为政模型一换就要改一大堆代码。这套路子对于新项目还能接受但对已经在线上稳定运行的存量培训系统来说几乎就是泥潭。我自己在给一套跑了多年的企业内部培训平台做AI升级时就踩过这些坑最后沉淀出一套“统一AI能力网关适配层”的接入方案今天把它完整拆开讲一遍。含金量在于这套设计能让你在不动业务主流程的前提下把AI能力平滑地长到老系统身上并且后续换模型、加能力都不伤筋动骨。1. 存量系统的真实痛楚AI升级为什么不是“写个接口”那么简单先说背景。我接手的那套培训系统不是什么新潮的SaaS产品而是支撑了公司上千门课程、几万名员工学习记录的“老家伙”。它有完整的管理后台、课程体系、考试评估、积分激励技术栈是典型的Java单体应用加关系型数据库前两年才把前后端拆开。线上的稳定性要求高核心链路出了问题就是生产事故所以改造的原则第一条就是不能影响现有功能。当“给培训系统加上AI能力”这个需求落到我桌上时最开始收到的需求大概是这样培训管理员希望能用AI自动生成课程摘要和要点提炼学员希望有一个“AI助教”可以在学习过程中随时提问运营团队想用AI批量生成练习题和模拟场景管理层想看AI对学习数据的总结分析表面上看每个需求都是“调一个模型的API返回结果展示就行”。但真正动起手来很快就会发现几道绕不过去的坎第一道坎模型厂商不统一能力边界不一致。有的需求适合用对话能力强的模型有的需求适合用便宜轻快的模型。而且语言模型和向量模型完全是两个物种你没法用一套接口通吃。第二道坎业务系统不能跟某一个模型厂商强绑定。今天你觉得A厂商的模型效果好明天可能B厂商发布了一个更强还更便宜的或者A厂商某个版本要下线了。如果业务代码里到处直接调用厂商SDK光改这些调用点就够喝一壶。第三道坎存量系统的代码结构不能大改。老系统的模块划分、权限体系、数据模型都是历史沉淀下的既成事实。你不能为了让课程模块用上AI就去重构整个业务层架构。所以摆在我面前的核心问题就是怎样给一个没有AI基因的存量系统加一层能让AI能力“即插即用”的底座让业务方用起来简单让底层模型可替换让上层业务无感知这就引出了本文的核心方案——统一AI能力网关与适配层设计。2. 整体架构的主链路网关、适配层、业务接入三个层次各管什么在设计这套方案之前我画了一张非常朴素的架构草图就三个层次不搞花哨。你可以把它理解成一个中间商两头通吃一边把各种AI厂商的API包成统一格式另一边给业务系统提供一套简单到极致的调用方式。2.1 业务接入层屏蔽AI复杂性业务方只需要理解“能力”而不是“模型”对于使用AI能力的业务模块课程摘要生成、智能问答、练习题生成等他们不应该关心自己用的是GPT还是某个国产模型也不该关心上下文窗口是8K还是128K。他们唯一需要知道的是我调用的“能力”是什么传什么参数进去拿回什么结果。所以我把业务侧需要的能力先抽象成了几个统一动作generate生成类任务输入是素材和指令输出是生成内容understand理解类任务输入是文本或文档输出是提炼结论embed向量化任务输入是文本输出是向量chat对话类任务带上下文连续多轮交互evaluate评估类任务输入学员答案和评分标准输出评估结果这五个动作在接口设计上全部统一。业务方调用的路径都长一个样传入一个“能力编码”加一段JSON参数网关负责路由、鉴权、记录然后返回一个统一结构的响应。2.2 能力网关路由、鉴权、限流、计量、降级的“关卡”能力网关是整个接入体系的枢纽。所有AI请求都会过这一层但它不做模型相关的业务逻辑只做通用横向能力。我在这套系统里给网关定了五个核心职责路由分发。根据请求中的能力编码和参数里的模型偏好找到对应的模型供应商和模型版本。比如课程摘要生成默认走通用对话模型向量化任务走专用向量模型。路由规则可以在配置中心动态调整不需要发版。统一鉴权。存量系统的用户体系已经成熟网关需要做两级鉴权一级是验证调用方应用系统模块是否合法一级是解析用户身份并透传业务字段。这样模型厂商侧不需要感知你的用户体系。限流与配额。存量培训系统在业务高峰期的请求特征与AI场景不太匹配。网关需要给每个能力设置独立的QPS上限、单用户频控、总量配额。防止某个模块写了个死循环把模型调用额度打爆。链路追踪与计量。每次AI请求全链路打点包括耗时、token消耗、成本估算、成功失败状态。这些数据一是用于排查问题二是用于月底成本分摊三是用于模型效果对比。降级与熔断。当某个模型提供商的接口连续报错或响应超时时网关可以自动切换到备用模型或返回兜底内容。对业务方来说只是响应内容可能差点但不会因为AI挂了导致整个功能不可用。2.3 适配层解决“模型厂商SDK长得都不一样”的最后一公里这是整个方案里最需要动脑子的地方。每家模型厂商的SDK、接口格式、鉴权方式、参数名称都不同有的是OpenAI兼容格式有的是自家风格有的是同步响应有的是流式输出有的支持function calling有的还不支持。适配层要做的事情就是把“能包成统一动作的模型能力”翻译成统一网关内部格式再把统一响应翻译回业务侧需要的格式。我在这套系统里没有把适配层做成一个完全独立的服务而是作为网关内部的一个模块。因为适配层的调用频率高、逻辑轻拆成独立服务反而增加网络开销和部署复杂度。适配层的核心数据结构长这样内部统一请求对象能力编码 业务参数 模型配置供应商接口定义每个供应商实现一个公共接口输出统一的响应对象响应归一化器不同模型返回的不同JSON结构在这里被清洗成统一的输出结构3. 适配层的核心设计逻辑为什么这是决定项目生死的关键模块如果网关是路由的中枢适配层就是翻译的中枢。但翻译这件事远比看起来复杂它有几种完全不同的“译法”做错了会埋下大坑。3.1 能力抽象不是万能药有些模型特性必须暴露给上层很多方案喜欢做“过度抽象”把所有模型能力压成最小公约数。比如所有模型都支持文本输入那我就只暴露文本输入。这样做确实简单但代价是你永远只能用最弱的那一个模型。我在设计时坚持了一个原则统一的是调用方式和返回结构但允许通过参数透传模型特色能力。举个例子。有的对话模型支持“JSON模式”能保证输出是合法JSON有的模型支持“引用来源”可以在回答后面附上文档溯源。这些能力不能埋掉必须能在统一的请求参数中透传。所以我的统一请求对象里会有一个prompt模板和parameters字段。prompt模板负责任务级的内容组织parameters字段是模型级参数的透传入口。这样既能保证大部分场景用统一方式又不抹掉个别模型的差异优势。3.2 流式输出的适配一个极容易被低估的复杂度点培训系统里最像“传统”的功能就是AI助教的问答。如果做成同步阻塞式请求用户在界面上等3~5秒才看到一句话体验会很差。所以AI助教必须走流式输出也叫流式返回。但流式输出是所有模型接口里差异最大的地方。有的模型是SSE格式的事件流有的是webSocket有的是这里一段那里一段的拼接。而且流式数据里不仅包含增量文本还包含一些控制信息比如结束标志、token用量等。适配层对流式的处理方案是内部统一采用SSEServer-Sent Events模型其他形式的流在适配层翻译成SSE。网关给业务侧暴露的也是SSE接口。业务侧前端只需要按SSE协议解析即可不需要关心底层模型到底用的什么协议。这里有一个很容易踩的坑流式接口的超时配置、断线重连、中间状态管理绝不能按普通HTTP请求来做。我见过有团队接入流式接口时超时时间设成3秒结果稍微长一点的回答就被截断用户看到的答复永远只有一半。流式连接的感知时间内应该按“首包时间”判断而不是按“全部返回时间”。3.3 内置多轮对话管理帮业务方省掉最脏的活存量培训系统里做AI助教核心场景是“多轮对话”。但大多数老系统此前没有任何会话管理的基建。如果每个业务模块各自维护会话状态全局上下文无法共享切换模块后AI就“失忆”了。而且prompt会随着对话轮数增加越来越长token成本越来越高。我在适配层内置了一个轻量的多轮对话管理组件。每个会话有一个sessionId组件内部维护会话的消息列表。它做了三件关键事情上下文裁剪超出窗口时按策略丢弃最久远的消息保留最近的对话和关键摘要。会话摘要当对话轮数超过阈值用一次额外的模型调用生成对话摘要后续请求用摘要替换早期完整消息压缩token成本。会话过期清理老系统里用户可能一个账号多人共用也可能长期不活跃。会话要有过期策略避免僵尸会话占用内存和模型配额。这套组件极大降低了业务方的接入成本。业务方只需要在请求里带上sessionId不用自己管理聊天的历史记录也不用操心token超长的问题。4. 网关落地的几个关键细节从路由规则到成本控制网关听起来高大上落地的过程却全是细碎但决定成败的小决策。我把这些细节一个一个摆出来说。4.1 路由策略设计别把路由做成“if-else大法”路由最简单的实现就是按能力编码写一堆if-else然后指定固定模型。但这种硬编码会让后续的规则调整变得非常痛苦。我选择的是“规则模板 配置中心动态下发”的方式。每一条路由规则包含四个要素能力编码比如course.summary对应课程摘要模型供应商模型名称/版本参数模板比如temperature、max_tokens等规则在配置中心维护网关定期拉取并缓存支持动态刷新。运营同学灰度测试新模型时我只需要在配置中心新增一条规则把某个能力灰度比例调到5%把新模型挂上去就能在不发版的情况下做AB对比。灰度路由的内部控制逻辑是根据请求中的用户ID做一致性哈希取模命中灰度的用户走新模型其他用户走老模型。注意要用一致性哈希这样同一个用户在整个灰度期间始终命中同一个模型体验是一致的不会上一句是老模型、下一句是新模型上下文错乱。4.2 上下文窗口的治理培训系统里一个真实的算力陷阱培训系统的AI使用场景里课程资料往往很长一篇课程文档可能有几万字。如果直接全部塞进prompt再有钱也扛不住。我的方案是在网关层做了一个“上下文组装器”。它接收业务方传进来的原文在组装prompt前先做预处理清洗去掉HTML标签、多余空白、超长无意义文本分段按段落切分并统计每段字符数截断按模型上下文上限的70%做窗口预留其余空间留给指令和对话历史定位支持按关键词或命中的段落切片输入而不是全量塞入这里的关键认知是上下文窗口不是给你无限塞素材的它是留给“指令上下文素材对话历史输出预留”的。很多人只盯着模型的最大窗口把素材硬塞满结果输出被截断或者质量下降。我在网关里默认按总窗口的65%设定素材上限剩下的空间留给指令和输出效果比硬塞满好得多。4.3 缓存策略同样的摘要别生成两次对于课程摘要、习题生成这类“同一份素材多次复用”的场景结果具备高度确定性。如果每次都重新调用模型既费钱又慢。我在网关里内置了语义缓存和精确缓存两级。精确缓存好理解MD5计算请求参数和素材文本相同就命中。语义缓存更高级一点它不比对原文是否一致而是比对请求的“语义指纹”——即对素材做向量化比较相似度超过阈值的直接复用历史结果。但因为语义缓存涉及向量化调用和向量存储也是成本所以我对它的使用场景做了收敛只对高价值的读类能力启用比如课程摘要、知识点提炼写作类、对话类不做语义缓存。4.4 全局成本控制按月统计、按部门分摊、按模型对比接AI之后老板必然要问一个问题这个月AI花了多少钱花在哪里值不值我在网关里实现了“成本账单”模块。每一次模型调用都会记录业务模块、能力编码、模型供应商、模型名称、输入token数、输出token数、估算成本。数据落库后可以按任意维度聚合按部门或业务线看月度AI费用按模型看单位成本走势按能力看调用量和成本占比按用户看消耗Top榜单这块数据后来成为我们决定“哪个场景用贵模型、哪个场景降级用便宜模型”的核心依据。没有这套计量体系AI升级的成本治理就是一个黑盒。5. 安全与审计存量系统上AI绝不能踩的红线存量培训系统意味着什么意味着有存量的用户数据、员工学习记录、内部知识文档。这些数据在接入AI之前是躺在公司内网数据库里的接入AI之后就多了一道对外接口的风险敞口。5.1 数据脱敏不进模型服务的数据坚决不进培训系统里不是所有数据都适合发给外部模型。我在网关层内置了一个脱敏组件在请求真正发往模型厂商之前执行两道检查字段级脱敏识别请求体中的姓名、手机号、邮箱、工号等个人信息用占位符替换。敏感词过滤对prompt中的文本内容做敏感信息检测如果命中高危规则拦截请求并返回预设的“无法处理该内容”的提示。这些检查规则基于正则和词表维护在网关内不依赖外部服务。逻辑简单但有效。5.2 审计日志所有AI行为可追溯为了让AI调用行为可控可查我对每一次调用都保留了完整审计日志。日志包含四个层面调用方信息哪个业务模块、哪个用户发起的请求请求内容摘要传了什么参数、什么素材类型为了保护隐私素材全文不落库只存摘要和哈希模型处理信息最终路由到哪个厂商的哪个模型、token消耗、耗时响应状态成功、失败、降级、熔断等这套日志在排查问题时价值极大。比如某天用户反馈AI回答有误我可以顺着日志找到当时的请求上下文复现排查而不是靠用户截图猜问题。5.3 合规的底线思维这一点多说一句。接入外部模型服务时必须确认数据跨境、数据留存的合规边界。企业内部培训系统往往涉及员工信息尤其需要谨慎。我的建议是敏感数据优先走私有化部署的模型或安全合规的云端产品实在要使用外部通用模型务必在网络层做好隔离、请求前做好脱敏、响应前做好过滤。安全这块没有“做完了”一说只能在实际运行中不断加严。我在这套系统上线初期是“先紧后松”宁可多拦一些正常请求也要保证不出安全事故。等运营稳定后再逐步放开白名单和例外通道。6. 从接入到落地的实测体会那些文档里不会写的坑方案设计得再漂亮最终都要接受真实业务的毒打。把网关和适配层接进存量培训系统的过程中我踩了不少坑挑几个印象最深的讲讲。6.1 老系统的超时设置AI接口的第一个敌人存量系统的服务调用链路往往预设了很短的超时时间因为老的业务逻辑一般200毫秒内就该返回。AI场景不同哪怕是最快的模型秒级响应也是常态。如果业务模块调网关时还在用老超时配置结果就是大量请求被自家超时熔断。这个问题我们在联调阶段抓了出来。解决的方案是给AI调用单独设定超时阈值普通生成类任务允许15秒流式对话首包5秒。并且要求网关在慢请求时返回一个“处理中”的过渡状态而不是让业务方傻等超时。6.2 并发数的误判你以为的“高并发”不是模型的“高并发”培训系统的QPS峰值放在互联网产品里不算高但模型服务的并发承受能力比业务服务脆弱得多。尤其是大模型推理服务的并发数是有限资源很多主流厂商的API都有并发限制突发流量会直接触发限流报错。我在这套系统上线前做了并发压测结论非常直观当业务侧以一百路并发同时请求AI能力时部分模型服务开始出现明显延迟和限流。后来网关里加了并发配额机制对每个业务模块的AI并发做了上限控制超出部分排队处理或者降级。这样即使运营人员一次性批量生成几百门课程的摘要也不会把模型服务打崩。6.3 存储层的策略AI结果到底要不要落库课程摘要、AI出题这些结果是从模型拿回来的“一次性产出物”。如果每次请求都现算既慢又费钱。所以建立AI结果缓存库是必要的。更聪明的做法是AI生成的内容与业务数据解耦存储生成后标记版本。比如课程摘要是基于课程内容的课程内容更新了摘要就要失效重算。我给每条AI生成结果加了一个“素材版本号”字段当课程内容修改时缓存自动失效。这个细节如果忘了做用户看到的摘要就会经常和课程内容对不上非常尴尬。6.4 评价体系的建立AI升级不是上线就完事要持续观测存量系统里的AI功能上线后比功能开发更重要的是一套效果观测机制。我在网关里把每个能力的输出都打了标签并与业务结果挂钩。比如AI助教是否解决了用户问题我通过“用户是否追问”“用户是否结束会话”“会话后的满意度评价”来间接衡量。比如课程摘要是否受欢迎我通过页面的展开率、点赞率来判断。没有评价体系的AI升级很容易变成“上线了一堆功能但效果好坏全靠感觉”。运营和业务方说不清AI到底有用没用技术侧也无法决定下一步优化方向。这件事我在项目初期就拉上了产品运营一起搭了基础的数据看板后来证明这个决策非常关键很多优化方向都是靠数据来说话的。7. 后续迭代的具体方向这套方案还能往哪些地方延展网关和适配层落地之后这套设计变成了培训系统的一个AI基础设施。后续的迭代方向其实非常多我在实际规划中看到了三条清晰的路径。第一条路径是多模型Matcher的智能化。当前的路由规则还是基于人工配置的静态灰度。下一步可以基于历史调用的效果数据比如用户的点赞率、追问率、完成率让路由策略自动为每个能力寻找当前效果最好的模型组合。这样当新模型出现时系统可以自动试跑一段时间效果真的好就逐步放大流量效果不好就自动回退。这相当于让网关拥有了一个可迭代的模型自编排能力。第二条路径是让网关支持多模态能力。培训系统里不仅只有文本还有PPT、视频、语音。我现在的适配层扩展方向之一就是把语音识别、视频理解、图片生成也纳入统一能力体系。这样课程库里那些历史视频资源就能被AI“看懂”从而支撑更智能的检索和问答场景。第三条路径是把AI能力开放给更多内部系统。统一网关的复用价值在于它不只是为培训系统服务。当其他内部业务系统也需要AI能力时不需要自己从零对接模型只要按同样的规范接入网关即可。这就把一个单系统的改造升级成了公司级的AI公共设施后续的价值空间会大得多。最后分享一个实操上的切身体会如果让我给同样准备做存量系统AI升级的团队一个最核心、最实在的建议那就是不要寄希望于一次完美的架构设计而是先把“能跑通的最小闭环”做出来再在真实场景中逐步打磨适配层和网关。在我做这套方案的过程中最大的收获不是架构图本身而是一种思维方式的转变AI接入本质上不是“调API”而是“做工程”。模型的能力是上限但是否能用得好取决于你周边工程体系的完整度——路由、限流、缓存、审计、评估每一环都不能缺。把这些基础能力打磨扎实了模型换了一个又一个你的系统都能稳稳立在浪头上。这一点做过的人自然会懂。