Spring AI简介

Spring AI是Spring 框架内的一个项目,为 Java 开发人员带来人工智能 (AI)的力量。
它是一个 spring 模块,可让您轻松创建基于 Java 的 AI 应用程序。

生成式人工智能术语须知:
让我们探索一下 Spring AI 在幕后使用的生成式 AI:
生成式 AI,也称为GenAI,是人工智能 (AI) 中一个令人着迷的领域,专注于根据输入提示创建新内容。让我们来分解一下:
什么是生成式人工智能?

  • 生成式人工智能允许用户输入各种提示来跨不同媒体类型生成新鲜内容,包括:
  • 代码:生成代码片段或整个程序。
  • 文本:生成故事、诗歌或其他书面内容。
  • 声音:创建音乐、声音效果或音频片段。
  • 视频:生成视频剪辑或动画。
  • 3D 设计:创建 3D 模型或结构。
  • 图片:创作视觉艺术、插图或设计。
  • 提示:在人工智能世界中,提示是给人工智能模型的短信。它包括上下文和问题。
  • 引擎盖下面发生了什么:提示被标记化,即将文本字符串分解为简单的单元。这些单位可以是单词甚至字符,具体取决于模型的设计。然后模型会处理该令牌,以根据接收到的输入来理解并生成响应。

Spring AI 提供什么
1. 基于文本的生成人工智能:
Spring AI 的核心是提供基于文本的生成人工智能系统。用户输入文本,它会响应并输出相关文本。这种基本但强大的功能允许多种基于文本的交互和解决方案,以满足不同的需求。

2. 与行业领先的生成式人工智能模型集成:
Spring AI 与科技行业几个最著名的生成式 AI 模型合作,包括 OpenAI、Azure Open AI、Bedrock(亚马逊)、Ollama 和 Vertex AI(谷歌)。通过利用这些平台的独特功能,Spring AI 增强了其产品,为用户提供尖端人工智能技术和广泛的功能。

3.输出解析器:
输出解析器是 Spring AI 的一个关键特性,显着影响 AI 生成内容的处理和呈现。它主要做了两件事:

  • 它指示提示所需的响应格式和结构,确保输出不是随机生成的,而是以特定格式(例如 JSON)呈现,并基于提供的上下文。
  • 发出提示并接收响应后,输出解析器会将此响应组织为结构化形式,如 Java bean、列表或可能的值映射。Spring AI 的这一方面至关重要,因为它允许根据特定用户需求定制响应,并将 AI 生成的内容无缝集成到各种应用程序和工作流程中。

4. 文档阅读器:
Spring AI 还具有文档阅读器,这是 Spring AI 开发团队的杰出产品之一。这些文档阅读器在检索增强生成 (RAG) 的背景下特别有用。

  • RAG 为您提供特定上下文的提示,确保 AI 不依赖于其全部广泛的训练知识。相反,它可以专注于您提供的特定文档,其中包含您感兴趣的信息。这种关注增强了人工智能响应的相关性和准确性。
  • Spring AI 的文档阅读器支持各种格式,包括简单文本、JSON 和 Tika,尤其是对 PDF 的支持。这种多功能性确保开发人员可以将这些格式的文档无缝集成到他们的工作流程中,从而使人工智能能够有效地提取和利用所包含的信息。

5.矢量存储集成:
Spring AI 配备了多种领先向量存储的集成功能,包括 Chroma、Pinecone、Redis、Weavite、Milvus、Azure 和 PostgreSQL (PG Vector)。在本博客的后面,我们将深入研究使用 PG Vector 进行编码。

  • 矢量存储使您能够将文档数据组织成更小的块或子文档。在向大型语言模型 (LLM) 提出问题之前,您可以查询向量存储以查看它对您的查询的了解。然后,向量存储提供这些子文档,作为 LLM 的简洁提示,而不是提交整个文档进行处理。
  • 考虑到提示中可包含的标记数量有限,此方法特别有用。通过将从向量存储中获得的子文档作为提示提供给法学硕士,我们可以有效地克服这些限制。
  • 从本质上讲,向量存储的功能很像搜索引擎,简化了查询大型数据集的过程并提高了与法学硕士交互的效率。

6. 提示模板:
制作有效的提示不仅仅是提出问题并期待准确的答复。这种方法可能足以满足简单的查询,但对于更复杂的场景,必须使用精致的模板。这些模板的结构允许您插入有关向人工智能提供的问题或说明的具体细节。Spring AI 支持这些提示模板,使用户能够更精确地定制提示,并提高获得相关且准确答案的可能性。

Spring AI 请求/响应

  1. 对话式问答会话,通过记住过去的上下文并做出相应的响应来模仿类人的交互。
  2. 根据提供的具体文件提出问题。
  3. 与编码和编程数据相关的问题。

第 1 章:使用 Spring Boot 和 OpenAI 集成构建基本的生成式 AI 应用程序。
开始使用 Spring Boot 开发基本的生成式 AI 应用程序,集成 Spring AI 和 OpenAI,以通过高级 AI 功能增强您的应用程序。请按照以下步骤设置环境、添加依赖项并创建 AI 驱动的 REST 端点。

第 1 步:初始化您的 Spring Boot 应用程序
使用 Spring Initializr 创建一个新的 Spring Boot 项目。对于此应用程序,您至少需要Spring Web依赖项。选择您首选的项目元数据(组、工件、项目名称)和其他设置(例如 Java 版本)。

第2步:配置Maven依赖项
要将高级生成式 AI 功能集成到 Spring Boot 应用程序中,特别是对于旨在利用 OpenAI 提供的 AI 模型的强大功能的项目,有必要在 Maven 文件中包含特定的依赖项和存储库pom.xml。此设置可确保您的应用程序能够访问 Spring 框架提供的最新的以 AI 为中心的功能。下面,我们详细介绍将标准 Spring Boot 应用程序转换为支持 AI 的生成项目所需的步骤和配置。

添加 Spring 快照存储库
第一步是将 Spring Snapshots 存储库添加到您的项目中。该存储库包含 Spring 库的开发版本,这些库经常更新为最新功能和错误修复。由于 Spring 中的 AI 集成可能仍在快速发展,因此使用快照版本可确保您能够访问最新的功能。存储库定义如下:


<repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
</repositories>


此配置允许 Maven 从指定的 Spring 快照存储库获取依赖项。

设置Java版本和Spring AI版本
接下来,我们定义 Java 版本和 Spring AI 库版本的属性。使用属性可以简化整个项目的版本管理。在此示例中,我们使用 Java 17 并指定0.8.0-SNAPSHOTSpring AI 库的版本:


<properties>
        <java.version>17</java.version>
        <SPRING-AI-VERSION>0.8.0-SNAPSHOT</SPRING-AI-VERSION>
</properties>

这种方法可以提高可维护性,特别是在升级到较新版本的 Java 或 Spring AI 库时。

添加 Spring AI 依赖项
最后,要在 Spring Boot 应用程序中启用 AI 功能,您必须添加spring-ai-openai-spring-boot-starter. 此入门包可能包括自动配置类、实用程序和其他必要组件,以便将 AI 模型无缝集成到您的应用程序中,从而可能提供与 OpenAI 的 API 或其他 AI 服务的接口:

通过合并这种依赖关系,开发人员可以访问预先配置的 AI 相关 Bean 和服务,从而简化 Spring Boot 框架内 AI 支持功能的开发。


<dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
            <version>${SPRING-AI-VERSION}</version>
</dependency>

第 3 步:创建 REST 控制器
此代码片段在 Spring Boot 应用程序中建立一个 REST 端点/topAthlete,该端点利用 AI 生成有关给定运动中顶级运动员的信息。当您访问此端点并通过subject查询参数输入一项运动时,它会指示 AI(通过ChatClient)编制该运动中杰出运动员的详细列表。此列表包括他们的收入、家庭背景以及他们所属的团队,采用 JSON 格式。管理AthleteController这个过程,利用人工智能功能来获取和呈现所请求的数据。

import org.springframework.ai.chat.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class AthleteController {

    private final ChatClient chatClient;

    public AthleteController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @GetMapping("/topAthlete")
    public String topAthlete(@RequestParam(
"subject") String subject) {
        return chatClient.call(
"give me the list of "+subject+" in the world in json format with their income, family, sports team");

    }
}

步骤 4:配置环境变量
在运行 Spring Boot 应用程序之前,安全地设置 OpenAI 集成所需的 API 密钥非常重要。
4.1 获取 OpenAI API 密钥:要使用 OpenAI 的服务,您首先需要获取 API 密钥。就是这样:

  • 访问OpenAI 官方网站并注册一个帐户,如果您已有帐户,请登录。
  • 登录后,导航至 API 部分并选择“API 密钥”。在这里,您可以生成新的 API 密钥。
  • 生成后,复制新的 API 密钥。您将使用此密钥来验证从 Spring Boot 应用程序到 OpenAI 服务的请求。

为此,您需要使用唯一的 OpenAI API 密钥添加一个环境变量。使用以下格式,将YOUR_API_KEY替换为您的实际 OpenAI API 密钥:
spring.ai.openai.api-key=YOUR_API_KEY

这会配置spring.ai.openai.api-key环境变量,这对于验证应用程序对 OpenAI 服务的请求至关重要。将 API 密钥保留为环境变量可确保它保持安全,并且不会在应用程序的源代码中进行硬编码。您可以在 IDE 的运行配置中或直接在操作系统的环境设置中设置此变量。
(请确保在启动应用程序之前完成此步骤,以通过成功与 OpenAI 的API 通信来启用其 AI 功能。)