Administrator
Administrator
发布于 2025-08-31 / 36 阅读
1
0

【一】SpringAi实现多平台Ai的调用

最近学习了一下springAi,发现封装的蛮好的,记录一下学习过程

多平台接入方法
  1. 首先要接入依赖,我尝试的是openAi,通义两家接入(实现是通过openRouter提供的gpt-5-mini和通义提供的qwen-max)

<dependency>
          <groupId>org.springframework.ai</groupId>
          <artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
<dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        <version>1.0.0.2</version>
</dependency>
  1. 第二步,就是注入这两家的bean,并且可以做一些简单的系统提示词,温度等等的配置

package com.gyq.config;

import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SafeGuardAdvisor;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;


@Configuration
public class ChatClientConfig {
    @Bean(name = "QWenChatClient")
    public ChatClient qwenChatClient(DashScopeChatModel dashScopeChatModel) {
        DashScopeChatOptions dashScopeChatOptions = new DashScopeChatOptions();
        dashScopeChatOptions.setModel("qwen-max");
        return ChatClient
                .builder(dashScopeChatModel)
                .defaultOptions(dashScopeChatOptions)
                .build();
    }


    @Bean(name = "openAiChatClient")
    public ChatClient openrouterChatClient(OpenAiChatModel openAiChatModel) {
        OpenAiChatOptions openAiChatOptions = new OpenAiChatOptions();
        openAiChatOptions.setModel("openai/gpt-5-mini");
        return ChatClient
                .builder(openAiChatModel)
                .defaultOptions(openAiChatOptions)
                .build();
    }
}
  1. 最后一步,就可以写接口了

package com.gyq.controller;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.HashMap;


@RestController
public class ChatController {
    @Resource(name = "QWenChatClient")
    private ChatClient qwenChatClient;

    @Resource(name = "openAiChatClient")
    private ChatClient openAiChatClient;


    @GetMapping(value = "/qwen", produces = "text/stream;charset=UTF-8")
    public Flux<String> qWenChat(@RequestParam("userPrompt") String userPrompt) {
        return qwenChatClient
                .prompt("你将用诙谐幽默的话语来回答我的问题")
                .user(userPrompt)
                .stream()
                .content();
    }



    @GetMapping(value ="/openAi", produces = "text/stream;charset=UTF-8")
    public Flux<String> openAiChat(@RequestParam("userPrompt") String userPrompt) {
        return openAiChatClient
                .prompt()
                .user(userPrompt)
                .stream()
                .content();
    }

}
  1. 最后就是测试接口了,要求 /qwen 接口供应商是阿里巴巴 ,/openAi 接口供应商是 openai

  • 测试是没问题的,只是我加了一些提示词,所以看起来怪怪的,不要在意这些细节



评论