Bootstrap

Spring Ai 基本使用

前言

       2024年5月30号Spring AI 的 1.0.0 里程碑 1 版本发布。表明版本已正在巩固,并且大部分主要错误和问题已经解决,API基本已确定,不会发生很大的变化。

        Spring AI 是一个广泛的概念,结合了 Spring 框架和 人工智能(AI)技术。虽然 Spring 框架本身主要用于构建企业级 Java 应用程序,而 AI 则涉及机器学习深度学习和其他智能技术,但通过将这两者结合,可以实现强大的应用功能。

         在与大模型集成方面,继LangChain4j之后,又一重大的框架诞生。标志着在人工智能的浪潮中,Java不会因此被边缘化,让生成式人工智能应用程序不仅适用于Python,也适用于Java。

Spring Ai官网:Spring AI

前置准备

要集成 Spring AI,你需要准备以下内容:

  1. API Key:根据你的需求,从 AI 开放平台申请 API Key。以下是一些常见的注册渠道:

    • OpenAI:
      • OpenAi-HK GPT4.0 API KEY By OPENAI HK 中转 ChatGPT
      • AiCore API New API
      • OpenAi 购买平台 首页 | OpenAI_GPT4_购买平台_OpenAI API - eylink 官网
    • ZhiPu-AI:
      • 官网 智谱 AI 开放平台

开发环境:确保你具备以下开发环境:

  • Java JDK:使用 JDK 8 以上版本。
  • IDE:推荐使用 IntelliJ IDEA 或 Eclipse。
  • 构建工具:使用 Maven 或 Gradle。
概念和案例实践

 新建SpringBoot工程,然后添加以下依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.4</version>
    </parent>
 
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.gorgor</groupId>
    <artifactId>spring-ai-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
 
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-M1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <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>
    </dependencies>
 
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>
</project>

2. 添加 application.yml 配置文件

在 src/main/resources 目录下创建 application.yml 文件,并添加以下配置:

需要配置api-key和openai api-key.

spring:
  ai:
    openai:
      api-key: your-openai-api-key
    zhipuai:
      api-key: your-zhipuai-api-key

ChatClient 和 ChatModel

ChatConfig 类:

@Configuration
public class ChatConfig {
 
    @Autowired
    private OpenAiChatModel openAiChatModel;
 
    @Bean
    public ChatClient chatClient() {
        return ChatClient
                .builder(openAiChatModel)
                .build();
    }
}

ChatDemoController 类:

@RestController
public class ChatDemoController {
    @Autowired
    private ChatClient chatClient;
    @Autowired
    private ZhiPuAiChatModel chatModel;
    @Autowired
    private OpenAiChatModel openAiChatModel;
    
    /**
     * OpenAI 聊天
     *
     * @param message
     * @return
     */
    @GetMapping("/ai/openAiChat")
    public Map<String, String> openAiChat(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", openAiChatModel.call(message));
    }
    
    /**
     * ZhiPuAI 聊天
     *
     * @param message
     * @return
     */
    @GetMapping("/ai/zhipuAiChat")
    public Map<String, String> zhipuAiChat(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }
    
    /**
     * ChatClient 使用 (流式调用)
     * @param message
     * @param voice
     * @return
     */
    @GetMapping("/ai/chatClient")
    public Map<String, String> chatClient(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message, @RequestParam(value = "voice", defaultValue = "default") String voice) {
        return Map.of(
                "completion",
                chatClient.prompt()
                        .system(sp -> sp.param("voice", voice))
                        .user(message)
                        .call()
                        .content());
    }
}

总结

        通过以上步骤,你可以在 Spring Boot 应用程序中集成 Spring AI,并与 OpenAI 和 ZhiPu AI 进行交互。Spring AI 的强大功能使得 Java 开发者能够轻松构建生成式人工智能应用程序,不再局限于 Python。

;