java2AI系列:SpringAI初体验,接入智谱大模型

张开发
2026/5/17 6:55:28 15 分钟阅读
java2AI系列:SpringAI初体验,接入智谱大模型
java2AI系列SpringAI初体验接入智谱大模型引Spring AI简介操作步骤依赖配置ChatClientController测试引AI确实是发展的太快了近半年直接呈现出指数型增长的趋势作为传统的java程序员即使精通大型分布式微服务系统的开发运维面对如今的就业市场老实讲真挺无力的。不管AI在对方企业是否有应用场景是否真的有落地实践从招聘岗位技能要求都迫使我们不得不快速补充AI技能。正如大佬讲的那样java程序要叠加AI buff技能并不是需要去啃python的LangChain、PyTorch、TensorFlow等开发框架当然有基础有能力的朋友去转型我个人觉得肯定也是挺好的java程序员的优势在于工程化能力企业已有的系统各种系统不是说不用了被AI大模型给取缔而是借助AI大模型的能力为系统的能力进行大幅升级。以我之前所参与的智能客服系统为例以前传统的方式通过规则引擎做多轮对话的智能问答也用了很多年缓解了很多人工坐席侧的咨询压力。公司的模型侧也一直在迭代承担了部分流量的智能问答。应该在半年以前模型侧的能力从意图识别到智能问答其实一直还算是被规则引擎的方式给碾压的但是随着大模型的能力提升很明显能感受到问答的质量出现大幅提升分流比例也一直在提高呈现出替换传统多轮对话的趋势。这只是我接触到的冰山一角大家平时用ai coding也能明显感受到让模型生成的代码质量最近半年内也有质的飞跃吧那么以前那些只会crud搞搞简单业务的螺丝钉地位就显得岌岌可危。当然我也不是给大家制造焦虑传递焦虑焦虑除了让自己身心俱疲外毫无意义要么转行要么卷起来呗要记住我们肯定有我们自身的优势。近期准备好好学习spring ailangchain4j有兴趣的朋友可以关注一下专栏。Spring AI简介Spring AI 是 Spring 官方推出的AI 工程化应用框架核心使命是连接企业数据与 AI 模型为 Java/Spring 生态开发者提供统一、可移植的方式集成大语言模型LLM、向量数据库等 AI 能力无需为不同厂商逐一适配降低企业级 AI 应用开发门槛。引入依赖在dependencyManagement中加入spring-ai-bom我这里选择的版本是1.1.2。dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion${spring-ai.version}/versiontypepom/typescopeimport/scope/dependency进入这个依赖的pom能看到spring ai支持的各种模型常见的如openai、deepseek、ollama部署的本地模型还有我这里准备使用的智谱ai大模型。deepseekzhipuai这里的starter是开箱即用的引入了对应模型的starter就需要添加对应模型的参数配置不然启动时会报错。操作步骤依赖以下是我的pom依赖我这儿只创建了一个module引入了zhipuai的starter。需要注意的是spring ai需要jdk17以上的版本。?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.5.10/versionrelativePath//parentgroupIdcom.roswu/groupIdartifactIdspring-ai-learning/artifactIdversion1.0.1-SNAPSHOT/versionnamespring-ai-learning/namedescriptionspring-ai-learning/descriptionpropertiesjava.version17/java.versionspring-ai.version1.1.2/spring-ai.versionmybatis-plus.version3.5.16/mybatis-plus.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-zhipuai/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion${spring-ai.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.42/version/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project配置模型配置有三个重要参数模型地址base-url模型秘钥api-key模型名称chat.model。如果是换成deepseek的话这里的zhipuai这个配置路径做对应的替换即可其它的都差不多。spring:application:name:spring-ai-learningai:zhipuai:# 模型地址base-url:https://open.bigmodel.cn/api/paas# apiKeyapi-key:${OPENAI_API_KEY}chat:# 模型名称model:GLM-4.7temperature:0.7server:port:8088ChatClient增加一个模型配置类注入一个ChatClient的bean这里的入参是ZhiPuAiChatModel类型与我们选用的模型和配置文件是对应的。ConfigurationpublicclassCommonConfiguration{BeanpublicChatClientchatClient(ZhiPuAiChatModelmodel){returnChatClient.builder(model).defaultSystem(你是一个智能桌面助手铁铁帮助缓解主人工作之余的疲惫和情绪情绪).build();}}defaultSystem参数用于设置系统提示词也可以配置到yaml里面。Controller这里定义了一个Controller提供两个api接口功能都一样只不过一个是同步调用一个是流式调用。同步调用就是待模型输出所有答案后一次性返回所有结果而流式调用可以流式输出答案。大家用的千问deepseek豆包都是采用的流式调用逐步加载出所有的答案体验更好。RequiredArgsConstructorRestControllerRequestMapping(api)publicclassChatController{privatefinalChatClientchatClient;/** * 同步调用 * * param prompt * return */RequestMapping(/chat)publicStringchat(RequestParamStringprompt){returnchatClient// 传入user提示词.prompt(prompt)// 同步请求会等待AI全部输出完才返回结果.call().content();}/** * 流式输出 * * param prompt * return */RequestMapping(value/stream/chat,producestext/html;charsetUTF-8)publicFluxStringstreamChat(RequestParamStringprompt){returnchatClient.prompt(prompt).stream().content();}}测试启动服务浏览器访问http://localhost:8088/api/chat?prompt上班好累啊请求完成后一次性加载全量的模型答案。http://localhost:8088/api/chat?prompt上班好累啊再访问http://localhost:8088/api/stream/chat?prompt上班好累啊答案则是逐步加载出来的响应更快。http://localhost:8088/api/stream/chat?prompt上班好累啊

更多文章