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

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 {@Resourceprivate 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 技术完美融合,通过其关键特性在多个方面为开发者提供了强大的助力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaweb-day02-JS(javascript)

1.JavaScript引入 &#xff08;1&#xff09;引入方式 2.JS语法 2.1 书写语法 2.2 变量 &#xff08;1&#xff09;var关键字定义的是全局变量&#xff1b; &#xff08;2&#xff09;可以重复声明&#xff1b; 2.3 数据类型&运算符 &#xff08;1&#xff09;数据类型…

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

七牛云AIGC内容安全方案助力企业合规创新

随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…

Python语法基础(三)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…

导入100道注会cpa题的方法,导入试题,自己刷题

一、问题描述 复习备考的小伙伴们&#xff0c;往往希望能够利用零碎的时间和手上的试题&#xff0c;来复习和备考 用一个能够导入自己试题的刷题工具&#xff0c;既能加强练习又能利用好零碎时间&#xff0c;是一个不错的解决方案 目前市面上刷题工具存下这些问题 1、要收费…

使用flink编写WordCount

1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 流程图&#xff1a; DataStream API开发 //nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/datastream/overview/ 添加依赖 <properties>&l…

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…

java全栈day10--后端Web基础(基础知识)

引言&#xff1a;只要能通过浏览器访问的网站全是B/S架构&#xff0c;其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址&#xff1a;Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程&#xff0c;建议…

elasticsearch的索引模版使用方法

5 索引模版⭐️⭐️⭐️⭐️⭐️ 索引模板就是创建索引时要遵循的模板规则索引模板仅对新创建的索引有效&#xff0c;已经创建的索引并不受索引模板的影响 5.1 索引模版的基本使用 1.查看所有的索引模板 GET 10.0.0.91:9200/_index_template2.创建自定义索引模板 xixi &…

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架&#xff0c;JAVA作为开发语…

Linux自动化构建-make/Makefile

目录 1. 背景2. 基本使用3. 推导过程4. 好用的操作5. 拓展语法 1. 背景 会不会写makefile&#xff0c;从⼀个侧⾯说明了⼀个⼈是否具备完成⼤型⼯程的能⼒⼀个⼯程中的源⽂件不计数&#xff0c;其按类型、功能、模块分别放在若⼲个⽬录中&#xff0c;makefile定义了⼀系列的规…

Ubuntu20.04+ROS 进行机械臂抓取仿真:环境搭建(一)

目录 一、从官网上下载UR机械臂 二、给UR机械臂添加夹爪 三、报错解决 本文详细介绍如何在Ubuntu20.04ROS环境中为Universal Robots的UR机械臂添加夹爪。首先从官方和第三方源下载必要的软件包&#xff0c;包括UR机械臂驱动、夹爪插件和相关依赖。然后&#xff0c;针对gazeb…

C++11(下)

C11&#xff08;下&#xff09; 1.条件变量2.包装器&#xff08;重要&#xff09;3.bind &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【C的学习】 &#x1f4dd;&#x1f4…

【组件封装】uniapp vue3 封装一个自定义下拉刷新组件pullRefresh,带刷新时间和加载动画教程

文章目录 前言一、实现原理二、组件样式和功能设计三、scroll-view 自定义下拉刷新使用回顾相关属性&#xff1a;最终版完整代码&#xff1a; 前言 手把手教你封装一个移动端 自定义下拉刷新组件带更新时间和加载动画&#xff08;PullRefresh&#xff09;&#xff0c;以uniapp …

14、保存与加载PyTorch训练的模型和超参数

文章目录 1. state_dict2. 模型保存3. check_point4. 详细保存5. Docker6. 机器学习常用库 1. state_dict nn.Module 类是所有神经网络构建的基类&#xff0c;即自己构建一个深度神经网络也是需要继承自nn.Module类才行&#xff0c;并且nn.Module中的state_dict包含神经网络中…

【Threejs进阶教程-着色器篇】9.顶点着色器入门

【Threejs进阶教程-着色器篇】9.顶点着色器入门 本系列教程第一篇地址&#xff0c;建议按顺序学习认识顶点着色器varying介绍顶点着色器与片元着色器分别的作用Threejs在Shader中的内置变量各种矩阵gl_Position 尝试使用顶点着色器增加分段数增强效果 制作平面鼓包效果鼓包效果…

w058基于web的美发门店管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…

leetcode 二叉树的最大深度

104. 二叉树的最大深度 已解答 简单 相关标签 相关企业 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3…

VMware ubuntu创建共享文件夹与Windows互传文件

1.如图1所示&#xff0c;点击虚拟机&#xff0c;点击设置&#xff1b; 图1 2.如图2所示&#xff0c;点击选项&#xff0c;点击共享文件夹&#xff0c;如图3所示&#xff0c;点击总是启用&#xff0c;点击添加&#xff1b; 图2 图3 3.如图4所示&#xff0c;出现命名共享文件夹…

matlab 实现混沌麻雀搜索算法的光伏MPPT控制仿真

1、内容简介 略 103-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略