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 提供了以下功能:
- 模型集成:通过通用 API 集成 AI 模型。
- 提示(Prompts):使用模板(类似于 Spring MVC 中的视图)与 AI 模型交互。
- 链式调用(Chaining Calls):支持将复杂问题分解为多个步骤逐步解决。
- 输出解析(Output Parsing):将字符串输出转换为 CSV 或 JSON 等格式。
- 自定义数据:允许模型使用自定义数据(如公司内部 FAQ),并学习特定的对话风格。
- 评估(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 的工作坊。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。