网站整站开发视频教程,3d绘图培训学校,贵州省交通建设集团网站,pc网页游戏网站这里写自定义目录标题 背景配置具体代码总结 背景
一说到调用openAI的api或者做一些小项目#xff0c;大部分例子都是python或者node实现的#xff0c;后来发现spring出了对于openai的支持框架#xff0c;所以尝试用一用。这里是SpringAI的地址#xff0c;有兴趣的可以去官… 这里写自定义目录标题 背景配置具体代码总结 背景
一说到调用openAI的api或者做一些小项目大部分例子都是python或者node实现的后来发现spring出了对于openai的支持框架所以尝试用一用。这里是SpringAI的地址有兴趣的可以去官网看Spring AI
配置
首先声明因为我是从0搭建的项目所以我用的全部都是最新版JDK22springboot3.3.0以下是对于spring AI的引用
propertiesjava.version17/java.versionspring-ai.version1.0.0-M1/spring-ai.versionspring-cloud.version2023.0.0/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai-spring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-zhipuai-spring-boot-starter/artifactId/dependency
因为众所周知的原因国内调用openAI是掉不通的所以就出现了众多的代理服务所以代码中也不能去调用openAI的官方域名要改成自己的配置此处打广告代理地址可以通过我的推荐链接注册smnet1会赠送¥1000 token 如下
spring:ai:openai:# 全局配置api-key: sk-this-is-key # 申请的api-keybase-url: https://api.smnet1.asia/ #代理地址可以通过我的推荐链接注册https://api.smnet1.asia/register?affxg61会赠送¥1000 token# 嵌入API配置embedding:options:model: kimi #我使用的代理支持多种模型所以这里填写自己想用的模型就可以# 聊天API配置chat:#指定某一个API配置(覆盖全局配置)api-key: sk-this-is-key # 申请的api-keybase-url: https://api.smnet1.asia/ #openAi访问地址(不写默认)options:model: kimi #我使用的代理支持多种模型所以这里填写自己想用的模型就可以zhipuai:api-key: this-is-zhipu-key # 申请的api-keybase-url: https://open.bigmodel.cn/api/paas/ #填写zhipu的访问地址chat:enabled: true具体代码
配置搞好了就到了实际使用的部分这个真的开箱即用如果没啥个性化需求的话不需要另外的配置了直接开调 RestController
RequestMapping(/ai)
public class ChatController {Autowiredprivate OpenAiChatModel chatClient;GetMapping(value /easyChat, params message, produces MediaType.TEXT_EVENT_STREAM_VALUE)public FluxServerSentEventString easyChat(RequestParam String message) {System.out.println(1111);//Prompt prompt new Prompt(message); 如果这里不想另外指定直接用这个就可以Prompt prompt new Prompt(message, OpenAiChatOptions.builder().withModel(kimi) //大模型用哪个.withTemperature(0.9f) //温度高更发散,准确性降低温度低更保守准确性高.build());System.out.println(chatClient.call(prompt)); //如果想直接拿到结果用这个call方法就可以//下面是流类型的返回一个字一个字的返回如果你像我一样用kimikimi不支持这样需要用return chatClient.stream(prompt).filter(Objects::nonNull).filter(chatResponse - chatResponse.getResults() ! null).flatMap(chatResponse - Flux.fromIterable(chatResponse.getResults())).filter(Objects::nonNull).map(Generation::getOutput).filter(Objects::nonNull).filter(content - Objects.nonNull(content.getContent())).map(AssistantMessage::getContent).filter(Objects::nonNull).map(content - ServerSentEvent.builder(content).build()).doOnNext(System.out::println).concatWith(Flux.just(ServerSentEvent.builder(complete).build())); // Optionally, you can add a completion signal}
}总结
现在想使用大模型真的门槛超低了不管是直接使用还是api调用怎么用这个问题解决起来还是很快的不过我的问题大部分还是不知道用它做什么我自己的能力不足以支撑我很好的使用它。