一、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 模型中,提示文本并不只是一个简单的字符串。

ChatGPTAPI 中,一个提示包含多个文本输入,每个输入都会被赋予不同的角色。例如,有一个 系统角色 它告诉模型如何行为并设定互动的上下文。此外,还有一个 用户角色 通常就是用户的输入。

设计有效的提示既是一门艺术,也是一门科学。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 技术完美融合,通过其关键特性在多个方面为开发者提供了强大的助力。

SpringAI:Java 开发的智能新利器的更多相关文章

  1. 用Java开发的【智能语音开发板MEGA ESP32AI】

    有点激动 ~ ~ ~ 新鲜出炉,用视频看看效果哦 我们新研发出世的语音开发板MEGA ESP32AI,来看看吧,有点腻害哦!!!先演示下功能语音控制开关等.播报天气 戳下面链接看视频哦? MEGA E ...

  2. Java开发利器Myeclipse全面详解

    Java开发利器Myeclipse全面详解: Ctrl+1:修改代码错误 Alt+Shift+S:Source命令 Ctrl+7:单行注释 Ctrl+Shift+/ :多行注释 Ctrl+I :缩进( ...

  3. 郑晔谈 Java 开发:新工具、新框架、新思维【转载】【整理】

    原文地址 导语:"我很惊讶地发现,现在许多程序员讨论的内容几乎和我十多年前刚开始做 Java 时几乎完全一样.要知道,我们生存的这个行业号称是变化飞快的.其实,这十几年时间,在开发领域已经有 ...

  4. 如何在一台新电脑上配置JAVA开发环境

    对于JAVA新手来说,刚开始要学JAVA,而自己的电脑上毫无与JAVA开发有关的环境,应该如何进行配置呢? (安卓新手也需要JAVA开发环境) 第一步,下载.安装java JRE JRE (Java ...

  5. Java开发工具IntelliJ IDEA使用教程:创建新的Andriod项目

    IntelliJ IDEA社区版作为一个轻量级的Java开发IDE,本身是一个开箱即用的Android开发工具. 注意:在本次的教程中我们将以Android平台2.2为例进行IntelliJ IDEA ...

  6. 分享Java开发的利器-Lombok

    译注:Lombok是一个很老的项目了,也非常实用,但奇怪的是这么多年来似乎一直不温不火.很多Lombok特性可以参考它的官网介绍哈.兄弟连教育在这里只是简单介绍一下它的基础功能. Lombok是一个旨 ...

  7. SparkR:数据科学家的新利器

    摘要:R是数据科学家中最流行的编程语言和环境之一,在Spark中加入对R的支持是社区中较受关注的话题.作为增强Spark对数据科学家群体吸引力的最新举措,最近发布的Spark 1.4版本在现有的Sca ...

  8. 珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_194 也许有人从未听说过Python,但是不会有人没听说过Java,它作为一个拥有悠久历史的老牌编程语言,常年雄踞TIOBE编程语 ...

  9. 【搬砖】安卓入门(1)- Java开发入门

    01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代 ...

  10. 如何自学 Java 开发

    如何自学 Java 开发? 568赞同反对,不会显示你的姓名 李艾米IT路上学习 568 人赞同 Java Web前端技术 HTML 入门视频课程 1 HTML 简介 2 HTML基本结构[ 3 HT ...

随机推荐

  1. iptables 命令使用帮助总结

    本文为博主原创,转载请注明出处: 1.iptables 命令帮助参数 root@controller1:~# iptables --help iptables v1.6.1 Usage: iptabl ...

  2. OpenCV开发笔记(八十):基于特征点匹配实现全景图片拼接

    前言   一个摄像头视野不大的时候,我们希望进行两个视野合并,这样让正视的视野增大,从而可以看到更广阔的标准视野.拼接的方法分为两条路,第一条路是Sticher类,第二条思路是特征点匹配.  本篇使用 ...

  3. in notin exists not exists 性能优化算法总结

    in notin exists not exists 性能优化算法总结 1.1. in 和 exists 区别 1.2. not in 能不能走索引 1.3. not in 和 join 的关系 1. ...

  4. ARC119F 题解

    前言 ARC119F 好厉害,是没见过的自动机 DP. 正文 [1] 分析 主要分析一下为什么这么写. [2] 状态设计 [3] 自动机状态转移 感觉状态设计中最难的就是如何处理带 \(O\) 的. ...

  5. mongodb 中rs.stauts()命令参数解析

    转载请注明出处: rs.status()命令用于获取MongoDB副本集的状态信息.它提供了关于副本集中各个节点的详细信息,包括节点的健康状况.角色.选举状态等. 以下是查看一个mongo集群状态返回 ...

  6. RSA 对称加密,对称解密----公钥私钥加密解密过程

    RSA 对称加密,对称解密----公钥私钥加密解密过程(Java) 公司说不能传铭文密码,所以只能加密,再解密:麻烦事,其实这在需求文档没有,开发时间点也没有,浪费了了一上午的时间,还占用了公司给的开 ...

  7. el-table

    el-table-column 渲染的顺序不对,第一列被渲染到最后 el-table-column 必须作为 el-table 或 el-table-column 的直接子元素使用,如果不是将会导致标 ...

  8. JavaScript Bom和Dom的一般性详解

    一.JavaScript的组成 JavaScript的实现包括以下3个部分: ECMAScript(核心) 描述了JS的语法和基本对象. 文档对象模型 (DOM) 处理网页内容的方法和接口 浏览器对象 ...

  9. 如何用VMWARE创建一个Linux虚拟机

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们都是需要接触Linux服务器的,一般部署应用都是部署在Linux服务器上的~ 但一般的服务器要么需要购买,要么只是公司里的,那么有没有免费的L ...

  10. 高通USB overview

    一,Dedicated Connectivity Ports (USB) 1,USB 3.1 Type-C with DisplayPort 2,Support USB3-DisplayPort Co ...