Spring AI Alibaba 项目接入兼容 OpenAI API 的大模型

1 依赖

主要的 maven 依赖如下所示:

jdk 21 + springboot 3.4.5 + spring-ai-alibaba-starter-dashscope 1.0.0.2 + spring-ai-openai 1.0.0

bash 复制代码
<properties>
    <java.version>21</java.version>
    <spring-ai.version>1.0.0</spring-ai.version>
    <spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.version>
    <spring-boot.version>3.4.5</spring-boot.version>
</properties>


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-bom</artifactId>
            <version>${spring-ai-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>${spring-ai.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--接入兼容OpenAI api的大模型-->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai</artifactId>
    </dependency>

</dependencies>

<build>
    <plugins>
        <!-- Maven 编译器插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>21</source>
                <target>21</target>
                <parameters>true</parameters> <!-- 支持参数名保留 -->
                <compilerArgs>
                    <arg>-Xlint:unchecked</arg>
                    <arg>-Xlint:deprecation</arg>
                </compilerArgs>
            </configuration>
        </plugin>

        <!-- Spring Boot Maven 插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
        </plugin>

        <!-- 资源处理插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

2 创建模型的 ChatClient

创建兼容 OpenAI API 的模型的 ChatClient 配置类,用于模型的调用。参考以下方法,可以为不同的模型创建不同的配置类。以火山引擎某模型为例,代码如下所示。

java 复制代码
@Configuration
public class OpenAIChatClientConfig {

    /**
     * 火山引擎模型baseUrl
     */
    @Value("${volces.baseUrl:test}")
    private String volcesBaseUrl;

    /**
     * 火山引擎模型apiKey
     */
    @Value("${volces.apiKey:test}")
    private String volcesApiKey;

    /**
     * 火山引擎模型-豆包模型v1
     */
    @Value("${volces.model.doubaoV1:test}")
    private String volcesModelDoubaoV1;


    // 获取火山引擎-豆包模型v1
    @Bean("chatClient4VolcesDoubaoV1")
    public ChatClient createChatClient4VolcesDoubaoV1() {
        OpenAiApi baseOpenAiApi = OpenAiApi.builder()
                .baseUrl(volcesBaseUrl)
                .apiKey(volcesApiKey)
                .completionsPath("/chat/completions")
                .build();

        OpenAiChatModel chatModel = OpenAiChatModel.builder()
                .openAiApi(baseOpenAiApi)
                .defaultOptions(OpenAiChatOptions.builder()
                        .model(volcesModelDoubaoV1)
                        .temperature(0.7)
                        .build())
                .build();

        return ChatClient.builder(chatModel)
                .defaultAdvisors()
                .defaultTools()
                .build();
    }


}

3 模型应用

使用上述创建的模型的 ChatClient,就可以进行模型的调用了。示例代码如下所示。

java 复制代码
@Slf4j
@RestController
@RequestMapping("/openai")
public class OpenAIChatClientController {
    private static final String DEFAULT_PROMPT = "你好,介绍下你自己!";

    @Resource
    private ChatClient chatClient4VolcesDoubaoV1;


    @GetMapping("/simple/chat")
    public String simpleChat(String prompt) {
        if (StringUtils.isBlank(prompt)) {
            prompt = DEFAULT_PROMPT;
        }
        String content;
        try {
            content = chatClient4VolcesDoubaoV1.prompt(prompt).call().content();
        } catch (Exception e) {
            log.error("simpleChat error", e);
            throw new RuntimeException(e.getMessage());
        }
        log.info("simpleChat --> \n prompt ={}, \n content = {}", prompt, content);
        return content;
    }


}
相关推荐
小王爱学人工智能1 天前
OpenCV的阈值处理
人工智能·opencv·计算机视觉
新智元1 天前
刚刚,光刻机巨头 ASML 杀入 AI!豪掷 15 亿押注「欧版 OpenAI」,成最大股东
人工智能·openai
机器之心1 天前
全球图生视频榜单第一,爱诗科技PixVerse V5如何改变一亿用户的视频创作
人工智能·openai
新智元1 天前
2025年了,AI还看不懂时钟!90%人都能答对,顶尖AI全军覆没
人工智能·openai
爱吃烤鸡翅的酸菜鱼1 天前
【Spring】原理:Bean的作用域与生命周期
后端·spring
湫兮之风1 天前
OpenCV: Mat存储方式全解析-单通道、多通道内存布局详解
人工智能·opencv·计算机视觉
机器之心1 天前
Claude不让我们用!国产平替能顶上吗?
人工智能·openai
程序员柳1 天前
基于YOLOv8的车辆轨迹识别与目标检测研究分析软件源代码+详细文档
人工智能·yolo·目标检测
算家计算1 天前
一站式高质量数字人动画框架——EchoMimic-V3本地部署教程: 13 亿参数实现统一多模态、多任务人体动画生成
人工智能·开源
API流转日记1 天前
Gemini-2.5-Flash-Image-Preview 与 GPT-4o 图像生成能力技术差异解析
人工智能·gpt·ai·chatgpt·ai作画·googlecloud