springboot接入springai-openAi代理和智谱ai调用示例

本文主要是介绍springboot接入springai-openAi代理和智谱ai调用示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里写自定义目录标题

    • 背景
    • 配置
    • 具体代码
    • 总结

背景

一说到调用openAI的api或者做一些小项目,大部分例子都是python或者node实现的,后来发现spring出了对于openai的支持框架,所以尝试用一用。这里是SpringAI的地址,有兴趣的可以去官网看:Spring AI

配置

首先声明,因为我是从0搭建的项目,所以我用的全部都是最新版,JDK22,springboot3.3.0,以下是对于spring AI的引用:

<properties><java.version>17</java.version><spring-ai.version>1.0.0-M1</spring-ai.version><spring-cloud.version>2023.0.0</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-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?aff=xg61,会赠送¥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 Flux<ServerSentEvent<String>> 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方法就可以//下面是流类型的返回,一个字一个字的返回,如果你像我一样用kimi,kimi不支持这样,需要用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调用,怎么用这个问题解决起来还是很快的,不过我的问题大部分还是不知道用它做什么,我自己的能力不足以支撑我很好的使用它。

这篇关于springboot接入springai-openAi代理和智谱ai调用示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1060886

相关文章

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与