ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI应用底座工程化实践:用微服务思路治理大模型调用

AI应用底座工程化实践:用微服务思路治理大模型调用 1. 从一个真实困境说起为什么能跑的AI功能最后都成了烂摊子过去一年多我参与过好几个把大模型能力塞进业务系统的项目。最开始大家的做法出奇地一致业务代码里直接调一个模型接口拼一段提示词拿到返回结果往页面上一贴功能就算上线了。演示的时候效果惊艳领导点头用户叫好。但三个月之后再回头看这些项目几乎无一例外地陷入了同一种泥潭——提示词散落在十几个文件里没人敢改模型调用没有统一入口导致换一个供应商要动半个代码库某个接口超时直接把整个订单流程拖垮日志里全是调用失败却查不出到底哪一步出了问题。这不是个别团队的能力问题而是把AI能力当成普通业务逻辑来写必然导致的结果。AI调用和传统业务调用有一个本质区别它是不确定的、有延迟的、会失败的、成本随调用量线性增长的。你用一个普通的Service方法去包一个模型调用等于把所有这些不确定性直接暴露给了业务层。业务层本来只关心这个订单能不能创建现在却被迫要处理模型返回超时了怎么办返回内容不合规怎么办这个月token预算超了怎么办。QuickBlue 这个项目标题里提到的AI应用底座本质上就是在回答一个问题当AI能力从尝鲜功能变成系统基础设施时我们需要一层什么样的东西来兜住它这篇文章我不打算写成产品说明书而是想从一个后端工程师的视角把为什么需要这层底座这层底座到底该长什么样用现有的微服务技术栈怎么落地这几件事讲透。如果你正在做AI功能的工程化或者团队正准备把零散的AI能力收拢起来这篇内容应该能帮你少走一些弯路。2. 拆解AI应用底座这个词它到底要解决哪几类问题2.1 先厘清概念底座不是模型也不是框架很多人第一次听到AI应用底座会下意识地把它理解成某个大模型平台或者某个Agent框架。这是个误解。模型是能力提供方框架是开发工具而底座是运行时的治理层。打个比方模型像是发电厂框架像是电线而底座是那个配电箱——它不发电但它决定了电怎么分配、哪条线路过载了要跳闸、哪个房间用了多少电要计费。QuickBlue 定位为AI应用底座意味着它要处理的是模型调用之外的所有工程问题请求怎么路由到不同的模型、提示词怎么版本化管理、调用链路怎么追踪、失败怎么降级、成本怎么核算、权限怎么控制。这些问题在传统微服务里都有成熟的解法但AI场景给它们加了一层新的复杂度。2.2 四类核心问题决定了底座的存在价值我把实际项目中遇到的痛点归了归类基本逃不出下面这四类问题类别典型表现传统做法的后果调用治理模型接口散落各处换供应商要改代码供应商锁定迁移成本极高稳定性模型超时、限流、返回异常直接穿透到业务一个AI功能拖垮整条业务链路成本与可观测不知道谁在调、调了多少、花了多少预算失控问题无法定位能力复用每个业务线重复实现提示词、上下文管理重复造轮子质量参差不齐这四类问题里调用治理是最先暴露的。我见过一个团队因为业务代码里硬编码了某家模型的SDK结果那家模型涨价他们想换一家发现要改的地方有四十多处还得重新测试每一处。如果一开始就有一层统一入口换供应商只是改一个配置的事。稳定性问题则更隐蔽也更致命。模型调用天然比数据库查询慢动辄几秒甚至几十秒。如果业务线程直接同步等待高峰期线程池瞬间被打满。底座要做的就是把这种慢调用隔离出去用异步、熔断、降级这些手段把不确定性关在笼子里。2.3 为什么是现在需要底座而不是以后有个判断标准很实用当你的系统里AI调用点超过5个或者AI功能开始影响核心业务链路时就该考虑底座了。在这之前直接调用确实更快。但一旦越过这个临界点没有底座的代价会指数级上升。因为AI功能的迭代速度远快于传统功能提示词一周改三次是常态模型版本一个月更新一次也不稀奇。没有一个统一的治理层每次迭代都是一次全量回归的噩梦。3. 用微服务那套成熟思路来搭AI底座哪些能直接抄哪些要改造3.1 Spring Cloud 生态里哪些组件可以直接复用QuickBlue 这类底座如果团队本身就在用 Spring Cloud 体系那大部分基础设施是可以直接复用的不需要另起炉灶。我梳理了一下对应关系服务注册与发现模型调用服务本身就是一个微服务注册到 Nacos 或 Eureka业务方通过服务名调用而不是硬编码地址。配置中心模型供应商的API地址、密钥、超时参数、限流阈值全部放配置中心支持动态刷新。这一点特别重要换模型供应商时改配置即可不用重新发版。网关所有AI请求统一走网关在网关层做鉴权、限流、审计日志。业务方不直接接触模型服务。熔断降级Sentinel 或 Resilience4j 直接拿来用给模型调用配置独立的熔断策略。链路追踪Sleuth 或 Micrometer Tracing 加上模型调用的自定义Span一次请求经过哪些服务、调了哪个模型、耗时多少一目了然。这套东西的价值在于团队不需要学习新概念运维体系也是现成的。我个人的经验是能复用现有基础设施就绝不引入新组件每多一个组件就多一份运维负担。3.2 需要专门为AI场景改造的三个地方但直接套用微服务那套也有不够用的时候有三个地方必须做针对性改造。第一个是超时策略。传统微服务的超时通常是秒级但模型调用可能是十秒级甚至分钟级。如果沿用默认的超时配置要么大量误熔断要么线程被长时间占用。我的做法是给AI调用单独定义一套超时模板并且强制走异步业务线程提交任务后立即返回结果通过回调或轮询获取。第二个是重试逻辑。传统接口重试通常是安全的但模型调用重试要非常小心——它可能产生重复计费也可能因为模型本身的随机性导致两次结果不一致。底座的策略应该是只对明确的网络层错误重试对模型返回的业务性错误不重试并且重试必须带幂等标识。第三个是流量特征。AI调用的流量是突发的、不均匀的可能某个业务方一次性提交几千个请求。传统的固定限流阈值很难适配需要支持按业务方配额、按模型配额的多维度限流。3.3 JDK 21 带来的实际收益热词里提到了 JDK 21这不是赶时髦。对于AI底座这种高并发、大量IO等待的场景JDK 21 的虚拟线程是实打实的收益。传统线程池模式下每个模型调用占一个平台线程等待期间线程啥也干不了为了支撑并发只能把线程池开大但线程多了上下文切换开销又上来了。虚拟线程把这个矛盾解开了——你可以用同步的代码写法却获得接近异步的吞吐能力。我实测过一个场景同样的模型调用逻辑平台线程池配置200个线程QPS到某个点就上不去了换成虚拟线程后QPS有明显提升而且代码可读性没有下降。当然虚拟线程不是银弹如果底座里有大量synchronized块或者用了ThreadLocal需要先排查一遍否则可能踩到pin住的坑。4. 一个可落地的底座分层设计从接入到模型的全链路4.1 接入层业务方怎么无感地用上AI能力接入层的设计目标只有一个让业务方感觉不到AI调用的复杂性。业务方不应该关心用的是哪家模型、提示词存在哪、失败了怎么重试。它只需要说我要完成一个文本摘要任务底座负责把这件事办成。具体做法是提供一套声明式的调用接口。业务方通过一个统一的客户端发起请求请求里带上任务类型和业务参数底座根据任务类型路由到对应的模型和提示词模板。这样业务代码里看不到任何模型相关的细节换模型、改提示词都不需要业务方参与。这里有个设计取舍值得说要不要让业务方直接传提示词我的建议是不要。提示词一旦开放给业务方就等于把治理权交出去了版本管理、合规审查都无从谈起。正确做法是底座维护提示词模板库业务方只传参数模板的变更走独立的审批和灰度流程。4.2 编排层提示词、上下文、工具调用的统一管理编排层是底座里最AI的一层也是和传统微服务差异最大的地方。它要处理三件事提示词模板的渲染、对话上下文的组装、以及工具调用的编排。提示词模板管理我建议用版本化灰度的方式。每个模板有多个版本新版本先在小流量上验证效果确认没问题再全量。模板的变更记录要可追溯出问题能快速回滚。这一点在传统配置管理里是标配但很多AI项目完全没做提示词改了就改了出了问题都不知道是哪个版本导致的。上下文组装则要考虑token预算。对话历史不能无限往里塞需要有一套裁剪策略——按轮次裁剪、按重要性裁剪、或者用摘要压缩。底座的职责是把这套策略标准化而不是让每个业务方自己拍脑袋。工具调用也就是让模型去调外部API是编排层里最容易失控的部分。我的经验是工具必须注册在底座里业务方不能随意注册。每个工具要有明确的入参出参定义、超时设置、以及权限控制。否则模型可能调用到不该调的接口造成安全事故。4.3 模型适配层多供应商切换的关键抽象模型适配层是底座能不能换供应商不痛的关键。核心思路是定义一个统一的模型调用接口各家模型的SDK都适配到这个接口上。接口的设计要足够抽象不能带有某家模型的特殊概念。public interface ModelProvider { ModelResponse invoke(ModelRequest request); String getProviderName(); boolean supports(ModelCapability capability); }业务层只依赖ModelProvider接口具体用哪家实现由配置决定。新增一家供应商只需要写一个适配器实现注册进去即可。这里要注意的是不同模型的返回格式、错误码、计费方式都不一样适配层要把这些差异抹平向上提供一致的语义。4.4 治理层限流、熔断、降级、审计的落点治理层是底座的安全阀。限流要支持多维度——按业务方、按模型、按任务类型任何一维超限都能独立触发。熔断要区分错误类型网络错误和模型业务错误用不同的熔断策略。降级则要提前准备好兜底方案比如模型不可用时返回缓存结果或者走规则引擎。审计日志这块我想多说一句。AI调用的审计和传统接口审计不一样它需要记录输入输出内容但又不能无脑全记——涉及用户隐私的内容要脱敏记录量大了存储成本也很可观。我的做法是分级记录元数据谁、什么时候、调了什么全量记录输入输出内容按采样率记录敏感字段在记录前先脱敏。5. 落地过程中最容易踩的五个坑5.1 把底座做成了大泥球第一个坑是贪大求全。一开始就想把提示词管理、模型路由、成本核算、效果评估全做进去结果每个模块都半成品反而没人愿意用。我的建议是从最痛的点切入通常就是统一调用入口和配置化模型切换这两件事。先把这两件做扎实让业务方尝到甜头再逐步扩展。5.2 忽略了同步调用的线程占用问题前面提过但值得再强调。我见过一个项目底座本身设计得不错但业务方调用时还是同步等待结果高峰期线程池被打满整个服务不可用。底座的接口设计要从第一天就强制异步哪怕业务方暂时用不上异步也要把口子留出来。等出了问题再改成本高得多。5.3 提示词版本管理形同虚设很多团队也做了提示词管理但只是把提示词从代码里挪到了数据库没有版本、没有灰度、没有回滚。这等于没做。提示词是AI功能的核心逻辑它的变更管理应该和代码变更一样严格。我建议提示词模板纳入Git管理通过CI/CD流程发布而不是在数据库里直接改。5.4 成本核算粒度太粗这个月AI花了多少钱这种粒度没有意义你需要知道的是哪个业务方、哪个功能、哪个模型花了多少。成本核算要细到调用级别每次调用记录token消耗和对应费用这样才能定位到成本异常的具体来源。我见过一个团队成本突然涨了三倍查了一周才发现是某个测试环境的功能忘了关一直在跑批量任务。5.5 忘了给业务方留逃生通道底座做得再好也可能遇到底座本身故障的情况。这时候业务方如果完全没有绕过底座的能力就只能干等。我的做法是保留一个受控的直连通道平时关闭紧急情况下经过审批可以临时开启。这个通道要有严格的审计和时限用完即关。这不是对底座不信任而是工程上的冗余设计。6. 关于底座演进节奏的一点个人判断回到 QuickBlue 这个标题本身。我觉得AI应用底座这个概念在2026年会被越来越多团队接受但接受的方式不会是买一个现成的底座装上而是从自己最痛的点出发逐步长出一个底座。因为每个团队的AI应用场景、技术栈、组织架构都不一样没有哪个通用底座能开箱即用。我的建议是分三步走第一步把模型调用统一收口解决供应商切换和配置管理问题第二步加上治理能力解决稳定性和成本问题第三步做能力复用把提示词、上下文、工具调用这些沉淀成可复用的资产。每一步都要有明确的业务价值驱动而不是为了架构而架构。技术选型上如果团队已经在用 Spring Cloud 体系那就顺着这套体系往下做JDK 21 的虚拟线程该用就用。如果团队是Python技术栈为主也不必强行统一底座的核心是接口和治理逻辑用什么语言实现是次要的。关键是那层抽象要设计对让AI能力真正变成可管理、可观测、可复用的基础设施而不是散落在业务代码里的定时炸弹。
返回列表