SpringAI:Java 开发的智能新利器
一、SpringAI 简介
随着人工智能技术的飞速发展,越来越多的开发者开始探索如何将
AI
能力集成到现有的应用中来提升产品的智能化水平。
Spring AI
正是为
Java
开发者提供的一款强大的
AI
框架,使得这一集成过程变得前所未有的简单和高效。
本文将深入探讨
Spring AI
的核心概念以及如何快速上手使用这款智能新利器。
二、什么是Spring AI?
目前
AI
应用程序开发框架主要是
Python
生态;而
Spring AI
是由
Spring
团队推出的一个扩展框架,专为将
AI
能力集成到
Java
应用中而设计。它利用
Spring
的生态系统优势,提供了一系列简单易用的
API
和工具,使开发者可以轻松地加载、训练和推理
AI模型
。这不仅降低了开发门槛,还极大地提高了开发效率。
Spring AI
的核心是解决
AI
集成的根本挑战:
将您的企业数据和 API 与 AI 模型连接起来。
三、Spring AI的核心概念
3.1. Models
模型
(Models)是指在处理和生成信息的算法,通常模仿人类认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测、文本、图像或其他输出,增强跨行业的各种应用。
Spring AI
支持多种
AI模型
包括神经网络、决策树等。模型可以通过训练数据进行训练,之后用于推理。
3.2. Prompts
提示
(Prompts)是基于语言输入的基础,指导
AI
模型生成特定输出。对于熟悉
ChatGPT
的人来说,提示可能看起来只是输入对话框中的文本,传送到
API
然而,它的内涵远不止于此,在许多
AI
模型中,提示文本并不只是一个简单的字符串。
在
ChatGPT
的
API
中,一个提示包含多个文本输入,每个输入都会被赋予不同的角色。例如,有一个
系统角色
它告诉模型如何行为并设定互动的上下文。此外,还有一个
用户角色
通常就是用户的输入。
设计有效的提示既是一门艺术,也是一门科学。
ChatGPT
被设计用于人类对话,这与使用
SQL
等语言
提问
的方式有很大不同。与
AI
模型交流更像是与另一个人对话。
3.3. Embeddings
嵌入
(Embeddings)是文本、图像或视频的数值表示,用于捕捉输入之间的关系。
嵌入通过将文本、图像和视频转换为浮点数数组(称为向量)来工作。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度被称为向量的维度。
通过计算两个文本的向量表示之间的数值距离,应用程序可以判断生成这些嵌入向量的对象之间的相似性。
3.4. Tokens
令牌
(Tokens)是
AI
模型工作的基础构件。输入时,模型会将单词转换为令牌;输出时,模型会将令牌重新转换为单词。
3.5. Structured Output
AI
模型的输出通常以
java.lang.String
的形式返回,即使你要求回复为
JSON
格式,但它并不是一个
JSON
数据结构,而只是一个字符串。
这一复杂性催生了一个专门的领域,涉及创建提示以获得预期输出,然后将生成的简单字符串转换为可用于应用集成的数据结构。
3.6. Bringing Your Data & APIs to the AI Model
如何让
AI
模型掌握它未被训练过的信息?
目前有三种方法可以定制
AI
模型以整合您的数据:
- 微调
(Fine Tuning):这种传统的机器学习技术涉及调整模型,并改变其内部权重。然而非常耗费资源。此外,有些模型可能不支持这一选项。 - 提示嵌入
(Prompt Stuffing):一种更实际的替代方案是将您的数据嵌入提供给模型的提示中。 - 函数调用
(Function Calling):这种技术允许注册自定义的用户函数,将大型语言模型与外部系统的 API 连接起来。
3.7. Retrieval Augmented Generation
RAG
是一种称为
检索增强生成
的技术,用以解决如何将相关数据整合到提示中以确保
AI
模型能够给出准确的回答。
这种方法涉及一种批处理风格的编程模型,其中任务从文档中读取非结构化数据,进行转换,然后将其写入向量数据库。从宏观角度看,这类似于一个
ETL
(提取、转换和加载)管道。向量数据库用于
RAG
技术中的检索部分。
四、快速上手指南
注意 Spring AI 支持 Spring Boot 3.2. x 和 3.3.x
Maven 仓库配置
在
pom.xml
中添加以下内容:
<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>
导入 Spring AI BOM
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
添加 OpenAI 聊天
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
使用 OpenAI 创建 API 来访问 ChatGPT 模型。在OpenAI 注册页面创建账户并在API 密钥页面生成令牌。
代码样例
@RestController
public class EmbeddingApiController {
@Resource
private EmbeddingClient client;
@GetMapping("/api/v1/embedding")
public Map<String, Object> getEmbedding(@RequestParam(name = "message", defaultValue = "Share a funny story") String input) {
EmbeddingResponse response = client.embedForResponse(Collections.singletonList(input));
return Collections.singletonMap("embedding", response);
}
}
总结
SpringAI
无疑是
Java
开发领域在人工智能方向上的重要创新。它将
Spring Framework
的优势与先进的
AI
技术完美融合,通过其关键特性在多个方面为开发者提供了强大的助力。