Spring AI 提供与 OpenAI 和 Azure OpenAI 的集成

Spring AI 项目概述

Spring AI 是一个实验性项目,由 Spring 团队在 SpringOne 会议上推出,旨在通过 Spring 的常见概念创建 AI 应用程序。目前,该项目集成了 Azure OpenAI 和 OpenAI 作为 AI 后端,支持内容生成、代码生成、语义搜索和摘要等用例。

背景与动机

历史上,Python 常用于快速访问由 C 和 C++ 编写的 AI 算法。生成式 AI(如 OpenAI 的 ChatGPT)使得通过 HTTP 访问预训练模型成为可能,这为 Java 等语言高效地与 AI 算法交互提供了便利。ChatGPT 基于预训练模型,开发者可以像使用数据库一样轻松地使用 AI,而无需数据科学家收集数据和训练模型。

然而,OpenAI 和 Azure OpenAI 的 Java 客户端 API 存在差异,这使得在两者之间切换较为困难。Spring AI 提供了对这些客户端 API 的抽象层,灵感来源于 Python 库 LangChain 和 LlamaIndex,这些库的设计理念与 Spring 项目类似,包括模块化、可扩展性和与多种数据源的集成。

Spring AI 的主要功能

Spring AI 提供了以下功能:

  1. 模型集成:通过通用 API 集成 AI 模型。
  2. 提示(Prompts):使用模板(类似于 Spring MVC 中的视图)与 AI 模型交互。
  3. 链式调用(Chaining Calls):支持将复杂问题分解为多个步骤逐步解决。
  4. 输出解析(Output Parsing):将字符串输出转换为 CSV 或 JSON 等格式。
  5. 自定义数据:允许模型使用自定义数据(如公司内部 FAQ),并学习特定的对话风格。
  6. 评估(Evaluating):通过测试评估答案,确保项目质量。

使用 Spring AI

Spring AI 目前仅提供快照版本,使用前需添加以下仓库:

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

使用 OpenAI 时,添加以下依赖:

<dependency>
    <groupId>org.springframework.experimental.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>0.2.0-SNAPSHOT</version>
</dependency>

使用 Azure OpenAI 时,添加以下依赖:

<dependency>
    <groupId>org.springframework.experimental.ai</groupId>
    <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
    <version>0.2.0-SNAPSHOT</version>
</dependency>

此外,还可以使用 Spring CLI 创建新项目。以下命令分别用于创建 OpenAI 和 Azure OpenAI 项目:

spring boot new ai
spring boot new ai-azure

配置 API 密钥

在使用 OpenAI 或 Azure OpenAI 之前,需要提供 API 密钥。对于 OpenAI,可以在 API Keys 页面生成令牌,并通过环境变量配置:

export SPRING_AI_OPENAI_API_KEY=<INSERT KEY HERE>

对于 Azure OpenAI,可以从 Azure OpenAI Service 部分获取端点和 API 密钥,并通过环境变量配置:

export SPRING_AI_AZURE_OPENAI_API_KEY=<INSERT KEY HERE>
export SPRING_AI_AZURE_OPENAI_ENDPOINT=<INSERT ENDPOINT URL HERE>

使用示例

可以通过以下代码与 Azure OpenAI 服务交互:

AiClient aiClient = new AzureOpenAiClient();
String response = aiClient.generate("What's the answer to the Ultimate Question of Life, the Universe, and Everything?");

Spring Boot Starter 会自动创建 AiClient,只需一行代码即可与 AI 模型交互。

提示模板与自定义数据

可以使用提示模板生成问题,例如:

@Bean
ApplicationRunner applicationRunner (@Value("classpath:/your-prompt.st) 
        Resource resource, AiClient aiClient) { return args -> {

    var promptTemplate = new PromptTemplate(resource);
    var prompt = promptTemplate.create(Map.of("topic", "developers"));

    var response = aiClient.generate(prompt);
    System.out.println(response.getGeneration());
    };
}

还可以向模型提供自定义信息,例如公司内部的 FAQ:

@Value("classpath:/myCustomInformation.txt) Resource myCustomInformation;
var prompt = "... {context}...";
var promptTemplate = new PromptTemplate(prompt);
promptTemplate.create(Map.of("context", myCustomInformation));

其他资源

Spring 开发者倡导者 Josh Long 与 Spring AI 项目负责人 Dr. Mark Pollack 进行了一次访谈,讨论了该项目的各种可能性并创建了多个代码示例。更多信息可参考参考文档和针对 Azure OpenAI 的工作坊

阅读 31
0 条评论