大家好我是Java1234_小锋老师。过去两年大家聊 AI 应用开口闭口都是 Python。Java 这边其实也没闲着。Quarkus 把大模型、RAG、工具调用和 MCP 直接嵌进了熟悉的开发体验里写起来很像在写一个普通的 CDI 服务。先认识一下 QuarkusQuarkus 是面向云原生的 Java 框架口号很直白给 Java 开发者一套更轻、更快、更适合容器的开发方式。它在构建期就把大量工作做完启动快、内存占用低还能打成 GraalVM Native Image。日常开发里热部署、Dev UI、统一配置这些东西用过一次就很难回去。很多人第一次接触 Quarkus是冲着“微服务启动只要几十毫秒”去的。这几年它的重心已经不只是快而是把 Java 生态里那些常用能力REST、反应式、消息、安全、数据访问都收成一套一致的扩展模型。你加一个扩展配置几行属性剩下的交给框架。Quarkus 把云原生 Java 和大模型能力接到了一起。AI 到来之后这套思路被原封不动地带了过来。接入大模型不再是先搭一套 Python 服务再让 Java 去 HTTP 调用你可以直接在 Quarkus 应用里声明一个 AI 服务像注入普通 Bean 一样用它。为什么是 Quarkus 做 AIJava 做 AI以前总有点“隔了一层”的感觉模型在外面业务在里面两边靠 REST 硬连。Quarkus 走的是另一条路核心是 Quarkus LangChain4j 扩展。它把 LangChain4j 的能力收进 Quarkus 的扩展体系里常见能力大致就这几块声明式 AI Service一个接口加上注解就能对话、摘要、分类多模型接入OpenAI、Azure OpenAI、Ollama、Hugging Face 等换模型主要是改配置Tools / Function Calling模型可以调用你写好的 Java 方法RAG把文档检索和大模型拼在一起回答能落到自家资料上MCP用标准协议发现和调用外部工具可观测性日志、指标、链路跟踪跟着 Quarkus 那套走Native ImageAI 应用也能打成原生镜像启动仍然很快AI Service、RAG、Tools、MCP是现在这套能力的四块底座。一次典型的调用大概是这样查文档查系统查外部服务直接回答用户提问AI Service需要业务数据?RAG 检索本地 ToolMCP 工具大模型生成返回结果看着复杂落到代码上其实就几个注解。下面按使用顺序过一遍。声明式 AI Service写接口就能对话这是最容易上手的一层。你不用自己拼 Prompt、不用自己管理 HTTP 客户端定义一个接口就行。/** * 客服助手负责回答用户的自然语言问题。 */RegisterAiServicepublicinterfaceCustomerAssistant{/** * 与用户对话返回模型生成的回复。 */SystemMessage(你是电商客服回答要简洁不确定的事情不要编造。)Stringchat(UserMessageStringquestion);}配置也集中在application.properties里本地用 Ollama、线上切 OpenAI通常不用改 Java 代码# 本地开发可以用 Ollama quarkus.langchain4j.ollama.chat-model.model-namellama3.1 quarkus.langchain4j.ollama.chat-model.temperature0.2REST 层注入就能用和普通业务服务没有两样/** * 对外提供对话接口。 */Path(/chat)publicclassChatResource{InjectCustomerAssistantassistant;/** * 接收用户问题并返回 AI 回复。 */POSTpublicStringask(Stringquestion){returnassistant.chat(question);}}第一次写的时候会有点不习惯一个没有实现类的接口居然就能聊天。后面你会发现Quarkus 在构建期就把模型调用、JSON 映射、CDI 装配这些事做掉了。这正是它一贯的风格。Tools让模型去调你的业务方法纯聊天很快会碰到天花板。用户问“我的订单发了没”模型自己并不知道仓库里有什么。这时就把业务方法暴露成 Tool模型觉得需要时会自己调用。/** * 订单查询工具供大模型在对话中按需调用。 */ApplicationScopedpublicclassOrderTools{InjectOrderRepositoryorderRepository;/** * 根据订单号查询物流状态。 */Tool(根据订单号查询当前物流状态)publicStringfindOrderStatus(StringorderNo){OrderorderorderRepository.findByOrderNo(orderNo);if(ordernull){return未找到该订单;}return订单 orderNo 当前状态order.getStatus();}}AI 服务这边用ToolBox把工具挂上去/** * 能查询订单的客服助手。 */RegisterAiServicepublicinterfaceOrderAssistant{SystemMessage(你是订单助手。只有在需要查真实订单时才调用工具不要编造物流信息。)ToolBox(OrderTools.class)Stringchat(Stringquestion);}用户说“帮我看看 A2026001 发货了没”模型会先调用findOrderStatus再把结果组织成自然语言。业务规则还是你自己的 Java 代码模型只负责决定什么时候用、怎么把结果讲清楚。这个分工很重要别把库存扣减、权限校验交给 Prompt。RAG先查资料再开口说话模型的训练数据停在某个时间点也看不到你们公司的内部文档。RAG 的做法很朴素先把文档切块、向量化、存起来提问时先检索相关片段再把片段塞进 Prompt。Quarkus 这边可以自己实现RetrievalAugmentor也可以用 Easy RAG 走配置。一个常见写法是这样/** * 文档问答助手回答必须基于检索到的内容。 */RegisterAiServiceApplicationScopedSystemMessage(你是文档助手。优先根据检索到的资料作答资料里没有的内容请直接说不知道。)publicinterfaceDocsAssistant{/** * 基于知识库回答问题。 */Stringask(Stringquestion);}检索增强器可以做成一个 CDI Bean框架会自动挂到 AI 服务上/** * 把向量检索结果补充进用户问题。 */ApplicationScopedpublicclassDocsRetrievalAugmentorimplementsSupplierRetrievalAugmentor{InjectEmbeddingModelembeddingModel;InjectEmbeddingStoreTextSegmentembeddingStore;OverridepublicRetrievalAugmentorget(){EmbeddingStoreContentRetrieverretrieverEmbeddingStoreContentRetriever.builder().embeddingModel(embeddingModel).embeddingStore(embeddingStore).maxResults(3).build();returnDefaultRetrievalAugmentor.builder().contentRetriever(retriever).build();}}向量库可以接 Redis、PgVector、Chroma、Neo4j 这些常见存储。文档问答、内部知识库、制度查询基本都是这个模式。MCP把外部能力接进模型Tool 适合封装自家代码。可一旦工具散落在别的系统里每个都手写适配就累了。MCPModel Context Protocol就是为这件事准备的标准协议服务端暴露工具客户端按需发现和调用。Quarkus 两边都能做。你可以写一个 MCP Server把已有接口贡献出去也可以在 AI 服务里当 MCP Client去调用别人提供的工具。/** * 旅行助手通过 MCP 调用外部天气服务。 */RegisterAiServicepublicinterfaceTravelAssistant{SystemMessage( 你是旅行助手。用户问天气时先查地点再查气温 不要凭印象回答。 )McpToolBox(weather)Stringchat(Stringquestion);}对应配置大致如下quarkus.langchain4j.mcp.weather.transport-typestreamable-http quarkus.langchain4j.mcp.weather.urlhttp://localhost:8081/mcp本地方法用ToolBox远程能力用McpToolBox注解风格是统一的。对写 Java 的人来说学习成本很低。云原生这一套AI 也能跟着吃AI 功能接上之后Quarkus 原来的好处并没有丢掉。开发期可以用 Dev UI 看模型配置、试对话、检查工具有没有被扫描到。运行期日志、指标、链路跟踪仍然走 Micrometer 和 OpenTelemetry。部署时还能打成 Native Image冷启动和内存占用依然是 Quarkus 的强项。这对 Serverless、缩容到零、边缘节点这类场景很有用AI 服务不再必须是一个又重又慢的常驻进程。启动快、镜像小、链路可观测AI 服务也能按云原生的方式落地。实际项目里我比较推荐这个组合开发阶段用 Ollama 跑本地模型调试 Prompt 和工具知识类问题走 RAG别把公司文档全塞进 System Message业务动作走 Tool把真正的规则留在 Java 里跨系统能力走 MCP避免每个外部服务都写一套胶水代码上线前把模型切换、超时、限流和观测补齐写在最后Quarkus 拥抱 AI不是另起一套框架而是把大模型能力收进它本来就擅长的那套开发模型构建期优化、声明式 API、统一配置、云原生部署。如果你已经在用 Quarkus 做服务补 AI 能力的路径很短。先写一个RegisterAiService接口再按需要挂上 Tool、RAG 或 MCP。Java 做智能应用现在已经不必绕路了。
企业数字化 ERP 产品动态
相关推荐
3个坑教你手写实现:敏于行性能优化实录 3个坑教你手写实现:敏于行性能优化实录 报错一堆看不懂 StackTrace?别慌。 这行代码在敏于行项目里跑,CPU 直接飙到 90%。 今天带你手写实现一个极简的优化方案,不用引入重型框架。 性能瓶颈定位… · 2026/9/23 8:35:25
基于STM32的单相交流电子负载:SPWM生成与电流闭环设计 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 8:35:25
储能电站实时监控大屏搭建实战:5分钟出清下的数据架构与计算引擎 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/23 8:35:19
搞懂guo证书年审与电子查询,避开3个高频面试坑 搞懂guo证书年审与电子查询,避开3个高频面试坑 你是不是也这样:看了一堆关于guo行业的教程,感觉懂了,但真到了项目落地或者面试被问细节,脑子就一片空白?特别是那些看似枯燥的证书有效期、年审流程,还有电子证书怎么查,往往是 高频面试题… · 2026/9/23 9:20:47
usehooks.com 站点工程解析:基于 Astro 的 React Hooks 文档站结构与开发命令指南 前端 【免费下载链接】usehooks A collection of modern, server-safe React hooks – from the ui.dev team 项目地址: https://gitcode.com/gh_mirrors/us/usehooks 点击查看 免费下载 导读
本文以 usehooks.com/README.md 为核心,深入拆解 usehooks… · 2026/9/23 9:20:47
Convex 演示应用浏览器测试实战:用 Puppeteer 驱动无头 Chromium 守护前端行为 Convex 演示应用浏览器测试实战:用 Puppeteer 驱动无头 Chromium 守护前端行为 【免费下载链接】convex-backend The open-source reactive database for app developers 项目地址: https://gitcode.com/gh_mirrors/co/convex-backend
导读
本文基于 convex… · 2026/9/23 9:20:40
财务净现值计算公式:3个坑点让你面试必问变加分 财务净现值计算公式:3个坑点让你面试必问变加分 刚升级完财务系统,发现原来手算的NPV和代码跑出来的对不上,甚至直接报错。这种版本升级后 API… · 2026/9/23 9:20:32
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29