鉴于OpenAI在业内的地位,很多大模型的调用接口都是兼容OpenAI的,因此,在接入OpenAI的接口风格大模型时,若官方没有提供高可用的starter,那么直接使用OpenAI的starter就是一个非常好的选择了
接下来我们将演示一下,如何通过OpenAI的starter接入讯飞大模型
一、项目初始化
1. 项目创建
创建一个SpringBoot项目,并引入SpringAI依赖,基本流程如 创建一个SpringAI-Demo工程
2. 添加依赖
我们这里直接使用OpenAI的starter作为大模型交互的工具,因此直接在依赖中,添加对应的stater即可
1 2 3 4 5 6 7 8 9 10
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> </dependency> </dependencies>
|
3. 配置文件
以讯飞星火为例,我们首先当官网申请对应的apiKey,并添加到配置文件中(或者通过环境变量、启动参数的方式传入)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| spring: ai: openai: api-key: ${spark-api-key} chat: options: model: lite base-url: https://spark-api-open.xf-yun.com
logging: level: org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor: debug
|
注意看上面的配置,参数是放在 spring.ai.openai 下面的
另外一个需要注意的点就是 base-url

虽然官方文档中给出的地址是 https://spark-api-open.xf-yun.com/v1/,但是我们不需要添加 /v1,原因在于OpenAI的实现中,已经自动补上了这个前缀

二、测试验证
接下来我们验证一下大模型的调用
1. 联调接口实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @RestController public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatModel chatModel) { chatClient = ChatClient.builder(chatModel) .defaultAdvisors(new SimpleLoggerAdvisor()) .build(); }
@GetMapping(path = "chat") public String chat(String msg) { return chatClient.prompt(msg).call().content(); } }
|
使用方式和前面介绍的SpringAI大模型调用没有任何区别,直接使用注入的ChatModel或者基于 ChatModel 创建 ChatClient
2. 访问验证
接下来直接访问这个接口,看看是否可以实现大模型的对话
1
| curl 'http://localhost:8080/chat?msg=介绍一下你自己的能力'
|

3. 手动创建模型
上面介绍的是直接使用注入的ChatModel或者基于 ChatModel 创建 ChatClient;若我们一个项目中,存在多个满足OpenAi风格的大模型,则直接使用上面的方式不太优雅,因此,我们可以手动创建模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| @RestController public class ChatController {
private final ChatModel dashModel;
public ChatController(Environment environment) { OpenAiApi openAiApi = OpenAiApi.builder().apiKey(getDashApiKey(environment)) .baseUrl("https://dashscope.aliyuncs.com/compatible-mode") .build(); dashModel = OpenAiChatModel.builder() .openAiApi(openAiApi) .defaultOptions(OpenAiChatOptions.builder().model("qwen-plus").build()) .build();
}
private String getDashApiKey(Environment environment) { final String key = "dash-api-key"; String val = environment.getProperty(key); if (StringUtils.isBlank(val)) { val = System.getProperty(key); if (val == null) { val = System.getenv(key); } } return val; }
@GetMapping(path = "aliChat") public String aliChat(String msg) { return dashModel.call(new UserMessage(msg)); } }
|

三、总结
本文主要介绍符合OpenAI接口风格的大模型接入方式,直接通过SpringAI-OpenAI的starter接入,或者手动创建模型,都可以实现便捷的大模型使用
文中所有涉及到的代码,可以到项目中获取 https://github.com/liuyueyi/spring-ai-demo
微信公众号: 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

打赏
如果觉得我的文章对您有帮助,请随意打赏。
微信打赏
支付宝打赏