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。

### 如何在Spring框架中集成AI技术及相关库 #### 集成概述 Spring Framework 提供了一个灵活的开发环境,支持多种架构模式和技术栈。通过其模块化设计,开发者可以轻松地将第三方库和工具引入到项目中[^1]。对于人工智能AI)领域的需求,Spring 社区已经提供了专门的支持,例如 Spring AI 工具包以及与其他开源项目的协作。 --- #### 使用Spring AI支持ChatGPT和其他OpenAI模型 Spring AI 是一个新兴的技术方向,旨在简化与主流AI服务的集成过程。它可以通过依赖管理机制快速接入像 OpenAI 这样的外部API。具体来说,`spring-ai-openai` 模块能够帮助开发者调用 ChatGPT 和 DALL·E 等功能[^2]。以下是实现的一个基本示例: ```java import com.example.spring.ai.openai.OpenAiService; @RestController public class AiController { private final OpenAiService openAiService; public AiController(OpenAiService openAiService) { this.openAiService = openAiService; } @GetMapping("/chat") public String getResponse(@RequestParam String message) { return openAiService.generateText(message); } } ``` 上述代码展示了如何创建一个简单的REST接口来接收用户输入并返回由ChatGPT生成的结果。 --- #### 利用Apache Spark进行大规模数据处理 当涉及到复杂的机器学习任务时,通常需要强大的计算能力和高效的算法支持。此时可以选择 Apache Spark 来完成大数据集上的训练工作[^3]。Spark 的 MLlib 库包含了丰富的分类器、回归分析方法以及其他统计建模组件,这些都可以无缝嵌入到基于Spring的应用程序当中去。 为了使两者协同运作起来更加便捷高效,在实际操作过程中可能还需要考虑以下几个方面: - **配置文件优化**:合理设置内存分配参数以适应不同规模的数据量; - **分布式部署方案**:利用YARN或者Kubernetes编排集群资源调度; - **监控日志记录**:及时发现潜在性能瓶颈所在位置以便调整策略; 下面是一个关于加载本地CSV文件作为DataFrame对象的例子: ```scala val sparkSession = SparkSession.builder().appName("Example").getOrCreate() val df = spark.read.format("csv").option("header", "true").load("path/to/file.csv") // 执行某些转换逻辑... df.show() sparkSession.stop() ``` 注意这里采用的是Scala语法编写脚本形式运行的任务实例,当然也可以切换至Java版本如果更倾向于后者的话。 --- #### 整合其他类型的自动化测试工具或持续交付流程 除了前面提到的内容之外,还有许多额外的选择可以帮助进一步增强整个系统的智能化水平。比如借助特定插件把质量保障环节融入日常构建活动中——即所谓的DevOps实践之一部分[^4]。这样一来不仅提高了生产效率同时也降低了人为错误发生的概率。 --- #### 总结说明 综上所述,无论是针对自然语言理解还是图像识别等领域内的应用需求,亦或是面对海量结构化半结构化的信息挖掘挑战,Spring生态体系都能够提供相应的解决方案满足业务场景下的多样化诉求。与此同时不断涌现的新特性也使得未来充满无限可能性值得期待! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值