Spring Ai 如何配置以及如何搭建
Spring Ai 如何配置以及如何搭建
解释什么是Spring ai
首先,我们用Spring ai 其实不是去了解他的LLM,以及底层用的一些东西,Spring AI,提供给我们的其实是对各种大模型快速调用,提供了大模型API的作用,Spring AI 的核心定位是提供对大模型的标准化调用接口和集成工具,而非训练自有模型或直接管理知识库。它的主要目标是简化AI能力在Java应用中的接入流程,通过抽象化和模块化设计,让开发者能快速对接多种大模型服务。
前期工作
首先我们要加入spring ai 的依赖,如果你用的是Maven,就加入如下配置:这里为什么要单独对spring-ai-core这个进行版本的限定,因为你可能之前引入过Spring ai ,所以为了避免版本不一致,后期我主动在仓库删掉了不一致的版本,不想删的可以显示指定。如下
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-core</artifactId><version>1.0.0</version></dependency>
目前大家应该都用的是阿里的仓库,但是现在配了阿里的仓库好像还是不能下载,具体可能每个人的环境不同,不能下载的通过如下路径,到阿里仓库搜索上面的依赖下载:
https://maven.aliyun.com/
然后放到你自己本地的Maven仓库,也不用什么命令。直接打开你的仓库,路径为如下,点进去看见这两个文件了注意我的是在D盘:D:\repository\org\springframework\experimental\ai
引入之后,就直接创建一个Controller就可以了代码如下:特别注意的是不同版本的AI实现不同,具体大家有用不同的版本可以自己搜索。1.0.0这个版本如下:
private final ChatClient chatClient; // 直接注入具体实现public TestController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/chat")public String callAi(@RequestParam String message){return chatClient.prompt().user(message) // 设置用户消息.call() // 执行调用.content(); // 获取响应内容}
代码简单的调用就完成了。下面是我们的配置,如果你要调用ChatGpt,那么就得配置Gpt的key,这个和阿里大模型,通义千问(Qwen)类似,一样得配置key
在yml中或者是你自己项目里面的配置文件中添加如下配置:api-key就是Key,base-url是代理网址
springai:openai:# OpenAI keyapi-key: base-url: # 添加超时配置chat:options:model: gpt-3.5-turbo # 默认模型temperature: 0.7 # 控制生成随机性
在这里插入代码片
到此Spring ai 就配置完了。感谢大家的阅读,谢谢,本篇博客就是在帮大家快速搭建环境,细节东西后续更新
关于大家为啥创建了chatClient报红,说没有这个Bean的错误,那是因为你引入的依赖版本不对,把你的包路径鼠标点进去,你大概率会发现,虽然你依赖里面引入了,但是还是用的旧版本,情况一这个原因大概率就是idea缓存还是指向了旧的版本。情况二是因为你之前引入了别的版本,手动修改之后,多个版本在你的Libraries中,你可以手动将别的版本删掉,或者清理缓存,或者是将你类中的import全部删掉,手动引入对应版本的jar包。下面这一行会报错!!!
private final ChatClient chatClient;
还有的是会报ChatClient.Builder,没有Builder这个方法,也是因为上面这个原因,版本的原因。
public TestController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}
具体我们看源码,1.0.0这个版本就是bulider,采用了建造者模式和分层初始化的思想
我们看第一个create
最简创建创建调用(隐藏观测系统细节)
第二个create
允许自定义观测系统
建造者模式的应用
static Builder builder(ChatModel chatModel) {return builder(chatModel, ObservationRegistry.NOOP, null);
}static Builder builder(/*全参数*/) {return new DefaultChatClientBuilder(chatModel, registry, convention);
}
为什么Spring要这么设计?
延迟初始化:
Builder 允许在构建时(build()调用时)才真正创建客户端
避免在Spring容器启动阶段立即连接AI服务
代替方案
// 替代方案(不推荐)
public TestController(ChatClient chatClient) {this.chatClient = chatClient;
}