ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

企业级AI应用底座QuickBlue:基于JDK 21与Spring Cloud的架构设计与实战

企业级AI应用底座QuickBlue:基于JDK 21与Spring Cloud的架构设计与实战 1. 从一次技术选型争论说起QuickBlue 到底是什么前阵子跟几个做企业级平台的朋友吃饭席间聊到一个挺有意思的话题现在团队里新来的开发同学上手一个业务系统第一周基本都在干同一件事——搭环境、配网关、接认证、写日志切面、调链路追踪。等这些“跟业务没关系”的活儿干完两周过去了业务代码一行没写。有个哥们儿当时就拍桌子说我们是不是该搞个“底座”了别让每个项目都从零开始造轮子。这个“底座”就是我今天想聊的AI 应用底座而QuickBlue就是这类底座的一个典型代表。简单说QuickBlue 是一套面向企业级 AI 应用场景的基础开发框架与运行时支撑平台它把微服务治理、认证鉴权、可观测性、配置管理、AI 能力接入这些通用能力打包成开箱即用的模块让业务团队只关注自己的业务逻辑和 AI 场景本身。你可以把它理解成“企业 AI 应用的毛坯房”——水电、承重墙、管线都给你预埋好了你进去只管装修自己的房间。那为什么企业现在特别需要一个“AI 应用底座”因为过去两年AI 从“能聊两句”变成了“要真干活”。以前做个 Demo调个接口返回一段文本大家鼓鼓掌就完事了。现在企业要的是AI 要接内部知识库、要能调用业务系统 API、要做多轮对话状态管理、要控制 token 成本、要审计每一次调用、要保证高并发下不崩。这些需求叠加在一起就不是一个“调 API 的脚本”能扛住的了它本质上变成了一个分布式系统的工程问题。QuickBlue 这类底座要解决的正是这个工程问题。它适合谁来参考我认为有三类人最该关注一是正在做企业 AI 平台选型的技术负责人二是被微服务治理折磨过的后端架构师三是想从“写 Prompt”进阶到“做 AI 系统”的开发者。不管你基础如何只要你的团队开始认真对待 AI 落地底座这件事就绕不开。2. 为什么“裸奔式”AI 应用撑不过三个月2.1 从 Demo 到生产三个必然踩到的坑我见过太多团队AI 应用第一版两周上线老板很满意然后三个月后系统开始“发疯”。问题出在哪我总结下来裸奔式 AI 应用几乎必然踩三个坑。第一个坑是状态与并发。大模型调用是慢操作一次几秒到几十秒。Demo 阶段一个人用没问题一旦几十个用户同时进来线程池瞬间打满后面的请求全部排队超时。更麻烦的是多轮对话会话状态存在内存里服务一重启全丢用户回来发现 AI“失忆”了。这不是模型的问题是架构的问题。第二个坑是治理能力缺失。AI 应用往往要调用多个后端服务知识库检索、业务数据查询、工具函数执行。这些调用散落在代码各处没有统一的超时控制、重试策略、熔断降级。某个下游服务一慢整个 AI 链路跟着卡死。你想排查日志里只有一句“调用失败”连是哪个环节慢都不知道。第三个坑是成本与安全失控。没有统一的 token 计量和限流某个用户写了个死循环 Prompt一夜之间烧掉几千块。没有统一的鉴权和审计谁调了什么、返回了什么完全查不到。企业场景下这是致命的。2.2 底座思维把“重复劳动”变成“基础设施”QuickBlue 这类底座的核心思路就是把上面这些重复且容易出错的活儿从业务代码里抽出来变成平台能力。这跟当年 Spring 把事务管理、依赖注入抽出来是一个道理。你不再需要在每个 Service 里手写try-catch事务而是交给框架。具体到 AI 应用底座它至少要把这几件事标准化服务注册与发现让 AI 服务能被找到、统一网关所有请求的入口做鉴权限流、配置中心模型参数、Prompt 模板动态调整、可观测性链路追踪、指标监控、日志聚合、AI 能力适配层屏蔽不同模型厂商的差异。这些能力单独看都不新鲜但把它们整合成一套开箱即用的底座价值就出来了。提示判断一个团队是否需要底座有个简单标准——如果新项目启动时超过 30% 的时间花在“非业务”的搭建和配置上那就该考虑底座了。2.3 技术选型的现实考量为什么是 JDK 21 Spring CloudQuickBlue 这类底座在技术栈上目前主流选择是JDK 21配合Spring Cloud生态。这个组合不是拍脑袋定的背后有很实际的考量。JDK 21 是 LTS 版本最大的亮点是虚拟线程正式转正。虚拟线程对 AI 应用意义重大因为 AI 调用是典型的 IO 密集型场景——大部分时间在等模型返回。传统平台线程模型下一个线程等 IO 就占着一个 OS 线程并发上不去。虚拟线程让“一个请求一个线程”的简单模型重新变得可行不用再为了并发去写复杂的响应式代码。我实测过一个场景同样的模型调用逻辑虚拟线程模式下吞吐量提升了三到四倍代码还更简单了。Spring Cloud 则是企业 Java 生态里最成熟的微服务方案。虽然网上总有人说“Spring Cloud Alibaba 停更了”之类的但需要澄清的是Spring Cloud 本身作为一套规范和抽象一直在演进。底座的选型逻辑是用 Spring Cloud 的抽象接口具体实现可以灵活替换。比如服务发现可以用 Nacos 也可以用 Consul网关可以用 Spring Cloud Gateway 也可以换别的。底座的价值在于把这些选择封装起来让业务方不感知底层切换。3. QuickBlue 底座的核心模块拆解3.1 服务治理层让 AI 服务“找得到、扛得住”服务治理是底座的地基。QuickBlue 在这一层要做的事情用一句话概括让每个 AI 能力都成为一个可被发现、可被治理的服务。具体来说服务注册与发现是第一步。每个 AI 服务启动时把自己的地址、端口、健康状态注册到注册中心。网关和其他服务通过注册中心找到它。这样做的直接好处是弹性伸缩——模型推理服务压力大直接多起几个实例注册进来流量自动分摊不需要改任何配置。但光有注册发现不够还得有负载均衡和熔断降级。AI 服务有个特点不同请求的耗时差异极大。简单问答可能 1 秒返回复杂推理可能 30 秒。如果负载均衡策略还是简单的轮询慢请求会把某个实例拖垮。QuickBlue 这类底座通常会支持基于响应时间的加权负载均衡把更多流量分给响应快的实例。熔断降级更是刚需。假设你的 AI 应用依赖一个外部知识库服务这个服务偶尔抽风。没有熔断的话每次调用都等超时线程池很快耗尽。有了熔断连续失败几次后直接走降级逻辑——比如返回缓存结果或者提示“知识库暂时不可用”。这里的关键参数是熔断阈值和半开时间我一般建议失败率阈值设在 50%半开时间 10 秒起步具体要根据下游服务的恢复速度调。3.2 统一网关层所有 AI 请求的“总闸”网关是底座的门面也是安全的第一道防线。QuickBlue 的网关层要处理的事情比普通微服务网关更复杂因为 AI 请求有它的特殊性。首先是认证鉴权。企业场景下不是谁都能调 AI 能力的。网关要校验 token、解析用户身份、判断这个用户有没有权限调用某个模型或某个知识库。这里有个细节AI 请求往往携带大量上下文如果每个请求都在网关做完整的权限校验网关本身会成为瓶颈。常见的优化是网关只做粗粒度鉴权比如校验 token 有效性细粒度的权限判断下沉到具体服务用缓存加速。其次是限流。AI 调用的成本远高于普通 API限流策略要更精细。我见过一个实际案例某团队没做限流一个用户写了个脚本疯狂调接口一天烧掉上万块。QuickBlue 这类底座通常支持多维度限流——按用户、按 IP、按模型、按 token 数量。这里有个经验token 维度的限流比请求数维度的限流更合理因为一次请求可能消耗几千 token也可能只消耗几十。再就是请求路由和协议转换。AI 应用可能同时对接多个模型厂商每个厂商的 API 格式不一样。网关层可以做协议适配对上提供统一的 API对下适配不同厂商。这样业务代码只写一套换模型时只改网关配置。3.3 配置与可观测层让系统“看得见、调得动”配置中心在 AI 底座里的重要性被很多人低估了。AI 应用有个特点参数调整极其频繁。Prompt 模板要改、模型温度要调、超时时间要变、降级策略要换。如果这些都写死在代码里每次调整都要重新打包发布效率极低。QuickBlue 的配置中心要支持动态刷新——改完配置服务不重启就能生效。更进一步还要支持灰度发布——新 Prompt 先给 10% 的用户用效果好再全量。这个能力在 AI 场景下特别有价值因为 Prompt 的效果很难离线评估必须线上验证。可观测性则是排查问题的眼睛。AI 链路的调用关系比普通微服务更复杂一个用户请求可能触发“网关 → 对话服务 → 知识库检索 → 模型调用 → 工具执行”这样一条长链路。没有链路追踪出了问题根本不知道卡在哪。QuickBlue 通常会集成链路追踪组件给每个请求打上 traceId把整条链路的耗时、状态、关键参数都记录下来。指标监控方面除了常规的 QPS、延迟、错误率AI 底座还要关注token 消耗速率、模型调用成功率、缓存命中率这些特有指标。我建议把这些指标做成大盘实时盯着一旦 token 消耗速率异常飙升立刻能发现。4. 实操从零搭建一个最小可用的 AI 应用底座4.1 环境准备与依赖选型假设我们现在要动手搭一个 QuickBlue 风格的最小底座先把环境和依赖理清楚。JDK 21 是基础安装完记得确认java -version输出的是 21。构建工具用 Maven 或 Gradle 都行我习惯 Maven生态兼容性好。核心依赖我列一个表方便对照组件选型作用备注服务注册Nacos服务发现与配置也可以用 Consul网关Spring Cloud Gateway统一入口响应式性能好熔断限流Sentinel流量控制规则可动态配置链路追踪Micrometer Tracing调用链记录对接 Zipkin 或 OTLP配置中心Nacos Config动态配置与注册中心共用AI 适配Spring AI模型调用抽象屏蔽厂商差异这里重点说下Spring AI。它是 Spring 生态里专门做 AI 集成的项目提供了统一的 ChatClient、EmbeddingClient 等抽象。用它最大的好处是换模型不改代码——今天用这个厂商明天换那个厂商业务代码基本不动。这跟底座“屏蔽差异”的思路完全一致。注意Nacos 的版本要和 Spring Cloud Alibaba 的版本对齐版本不匹配是新手最容易踩的坑。建议直接查官方版本对应表别自己猜。4.2 服务注册与网关配置实操环境好了先让一个 AI 服务能注册上去。在application.yml里加 Nacos 注册配置spring: application: name: ai-chat-service cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: quickblue-dev启动类上加EnableDiscoveryClient服务启动后就能在 Nacos 控制台看到它。这一步看着简单但有个细节namespace 一定要区分环境。开发、测试、生产用不同的 namespace否则本地调试的服务会注册到生产环境引发诡异问题。我踩过这个坑本地起了一个测试服务结果生产流量打过来直接报错。网关配置稍微复杂点。Spring Cloud Gateway 的路由规则可以写在配置文件里也可以动态从 Nacos 拉。我推荐动态配置改路由不用重启网关。一个典型的 AI 服务路由长这样spring: cloud: gateway: routes: - id: ai-chat-route uri: lb://ai-chat-service predicates: - Path/api/chat/** filters: - StripPrefix2 - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20这里的lb://表示走负载均衡RequestRateLimiter做限流每秒补充 10 个令牌突发容量 20。这个参数要根据实际模型调用成本调成本高的模型限得严一点。4.3 AI 能力接入与统一封装底座最核心的价值之一是把 AI 能力调用统一封装。我一般会定义一个AiService接口内部用 Spring AI 的 ChatClient 实现Service public class AiServiceImpl implements AiService { private final ChatClient chatClient; public AiServiceImpl(ChatClient.Builder builder) { this.chatClient builder .defaultSystem(你是一个企业助手回答要简洁准确) .build(); } Override public String chat(String userId, String message) { return chatClient.prompt() .user(message) .call() .content(); } }这段代码看着简单但封装的价值在于所有 AI 调用都走这一个入口。这样我可以在这一层统一加日志、加计量、加缓存、加降级。比如加一个 token 计量就在chat方法里记录每次调用的 token 数上报到监控系统。加缓存也方便对相同的问题直接返回缓存结果省 token。这里有个实操心得缓存 key 的设计要考虑用户上下文。同样的问题不同用户问答案可能不同因为权限不同。所以缓存 key 不能只用问题文本要加上用户角色或权限标识。我一般用userId questionHash做 key简单有效。4.4 链路追踪与日志聚合配置链路追踪的配置Micrometer Tracing 已经做得很傻瓜了。加依赖、配一下采样率就行management: tracing: sampling: probability: 1.0采样率生产环境一般设 0.1 到 0.3开发环境设 1.0 全采样。设太高会影响性能设太低排查问题时又找不到数据。我建议关键链路全采样非关键链路低采样这个可以通过自定义采样策略实现。日志方面AI 应用的日志要特别注意脱敏。用户输入可能包含敏感信息模型返回也可能包含内部数据。日志里不能明文记录这些。我一般会在日志框架里加一个脱敏过滤器对特定字段做掩码处理。这个工作不做出了事就是大事故。5. 踩坑实录那些文档里不会写的经验5.1 虚拟线程的“坑”与“真香”JDK 21 的虚拟线程确实香但有几个坑得提前知道。第一个坑是synchronized 块会钉住载体线程。虚拟线程遇到synchronized时会阻塞底层的平台线程虚拟线程的优势就没了。解决办法是尽量用ReentrantLock替代synchronized。这个问题在 AI 应用里特别容易碰到因为很多老代码库还在用synchronized。第二个坑是线程本地变量ThreadLocal的滥用。虚拟线程数量可能非常多每个都存一份 ThreadLocal 数据内存会爆。AI 应用里常见的 traceId 传递如果用 ThreadLocal 存在虚拟线程场景下要小心。推荐用 Micrometer 的上下文传播机制它对新线程模型支持更好。但话说回来虚拟线程带来的代码简化是实打实的。以前为了高并发要写一堆响应式代码调试极其痛苦。现在用虚拟线程代码还是同步写法可读性好性能也够。我个人的建议是新项目直接用虚拟线程老项目逐步迁移。5.2 微服务拆分的粒度问题做底座绕不开微服务拆分。我见过两种极端一种是拆得太细一个 AI 应用拆出二十个服务服务间调用关系像蜘蛛网排查一个问题要跳五个服务另一种是拆得太粗所有 AI 逻辑塞一个服务里改一处影响全身。我的经验是AI 应用的拆分粒度可以按能力边界来定。对话管理是一个服务知识库检索是一个服务模型调用是一个服务工具执行是一个服务。这四个服务的变更频率和伸缩需求不一样对话管理逻辑经常改模型调用需要弹性伸缩知识库检索对延迟敏感。拆开之后各自独立演进互不影响。但也不要为了拆而拆。如果两个能力总是一起变更、一起伸缩那就没必要拆。拆分的标准是“变更频率和伸缩需求的差异”不是“代码行数”。5.3 常见问题速查表问题现象可能原因排查方向解决建议服务注册不上namespace 或 group 不匹配检查 Nacos 配置统一环境命名规范网关 503后端服务未注册或健康检查失败看注册中心实例列表检查健康检查端点熔断误触发阈值设置过严看熔断器指标调大失败率阈值token 消耗异常无限流或 Prompt 死循环看 token 监控大盘加 token 维度限流链路断掉异步调用未传播上下文看 traceId 是否连续用上下文传播工具配置不生效未加动态刷新注解检查 RefreshScope加注解并确认配置源这张表是我自己踩坑总结的基本覆盖了日常 80% 的问题。遇到问题先查表能省不少时间。5.4 关于“Spring Cloud Alibaba 停更”的理性看待网上经常有人问“Spring Cloud Alibaba 是不是停更了还能不能用”。我的看法是关注抽象不要绑定实现。Spring Cloud 提供的是接口和规范Nacos、Sentinel 这些是具体实现。即使某个实现更新慢了换一个实现就行业务代码不用大改。底座的架构设计要遵循这个原则面向接口编程实现可插拔。服务发现用DiscoveryClient接口熔断用CircuitBreaker接口配置用ConfigDataLoader接口。这样底层换实现时上层无感知。这也是 QuickBlue 这类底座能保持生命力的关键——它不绑定任何一家厂商而是提供一套可替换的集成方案。6. 底座之上AI 应用还能怎么扩展底座搭好之后上层能做的事情就多了。我分享几个我觉得比较有价值的扩展方向。第一个是多模型路由。底座统一了模型调用接口后可以根据请求特征动态选择模型。简单问题走小模型省成本复杂问题走大模型保质量。这个路由策略可以配置化根据问题长度、关键词、用户等级来定。我实测下来合理路由能省 40% 以上的 token 成本。第二个是RAG 能力标准化。检索增强生成是企业 AI 的刚需但每个项目的实现方式都不一样。底座可以把 RAG 的流程标准化文档解析、向量化、检索、重排、生成每个环节提供默认实现和扩展点。业务方只需要配置自己的知识库不用重复造轮子。第三个是Agent 编排。当 AI 需要调用多个工具完成复杂任务时就需要 Agent 编排能力。底座可以提供工具注册、任务规划、执行监控的基础设施。这块目前还在快速演进但方向是明确的AI 应用会从“单次问答”走向“多步任务执行”底座要为此做好准备。我个人在实际操作中的体会是底座的价值不在于它现在支持多少功能而在于它的扩展性。一个好的底座应该让新增一个 AI 能力像搭积木一样简单——注册服务、配置路由、接入模型三步搞定。如果每加一个功能都要改底座核心代码那这个底座的设计就有问题。最后分享一个小技巧底座建设初期不要追求大而全。先解决最痛的两三个问题——通常是服务治理和统一网关——让业务团队先用起来再根据反馈迭代。我见过太多团队底座规划了半年功能列表列了几十项结果业务等不及自己搭了一套底座还没上线就废弃了。小步快跑快速验证比完美规划重要得多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进