SpringAI应用开发

一、人工智能简述


四次工业革命推动了人类社会发展和变革:

  • 蒸汽时代,发生在18世纪60年代~19世纪中期(大约是1760年到1860年),这一时期的特点是机械化生产和大规模生产。
  • 电气时代,发生在19世纪下半叶~20世纪初(大约1851年到1910年),电力、化学、石油等工业得以大发展;(科学技术是第一生产力)
  • 信息时代,发生在20世纪后半期(大约1945年到2000年),这一时期的特点是信息技术和数字技术的广泛应用,推动了社会生产力的又一次飞跃。
  • 工业4.0时代(智能化时代),发生在21世纪初到至今,这个时代以互联网产业化,工业智能化,工业一体化为代表,以人工智能,清洁能源,无人控制技术,量子信息技术,虚拟现实以及生物技术为主的全新技术革命;这一阶段主要依赖于互联网、物联网、大数据、人工智能等新兴技术的深度融合和创新应用,旨在实现更高效、更智能、更可持续的生产和生活方式。

什么是人工智能:

A system is ability to correctly interpret external data,to learn from such data,and to use
those learnings to achieve specific goals and tasks through flexible adaptation.

人工智能 (Artificial Intelligence,缩写为AI) 是一门交叉学科,旨研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统,它结合了数学、计算机科学、心理学、语言学、哲学等多个学科的理论,通过让计算机模拟人类的思考和行为过程,实现人机交互,提高计算机的智能水平,以更好地服务于人类社会;


人工智能发展历程:

起步发展期:

  • 1943年,提出神经元的数据模型,是现代人工智能学科的奠基石之一。
  • 1950年,Alan Mathison Turing 提出 :图灵测试
  • 1956年,正式使用人工智能(AI)这一术语。

反思发展期:(1970年~1979年)

  • 由于计算力及理论等的匮乏使得不切实际目标的落空,人工智能的发展走入低谷;

应用发展期:(1980年~1989年)

  • 人工智能走入应用发展的新阶段,专家系统模拟人类专家的知识和经验解决特定领域的问题,实现了人工智能
    从理论研究走向实际应用、从一般推理策略探讨转向运用专门知识的重大突破,而机器学习(特别是神经网络)
    探索不同的学习策略和各种学习方法,在大量的实际应用中也开始慢慢复苏;

平稳发展期:(1990年~2010年)

  • 由于互联网技术的迅速发展,加速了人工智能的创新研究,促使人工智能技术进一步走向实用化,人工智能相
    关的各个领域都取得长足进步。

蓬勃发展期:(2011年~至今)

  • 随着大数据、云计算、互联网、物联网等信息技术的发展,泛在感知数据和图形处理器等计算平台推动以深度神经网络为代表
    的人工智能技术飞速发展,大幅跨越了科学与应用之间的技术鸿沟,诸如图像分类、语音识别、知识问答、人机对弈、无人驾
    驶等人工智能技术实现了重大的技术突破,迎来爆发式增长的新高潮;
  • 2015年,马斯克等人共同建OpenAl;
  • 2016年,AlphaGo与围棋世界冠军、职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜;
  • 2022年11月30日,OpenAI研发的一款聊天机器人程序ChatGPT对外发布,引发AI的大爆发;
  • 2023年3月15日,OpenAl发布ChatGPT4.0,引爆了Al;
  • 2023年3月16日,百度发布文心一言;
  • 国内还有:科大讯飞认知智能大模型、阿里巴巴通义千问、华为盘古大模型、360智脑、京东言犀大模型等等;

什么是大模型:

大模型,是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数干亿个参数。其设计目的在于提高模型的表达能力和预测性能,以应对更加复杂的任务和数据;

大模型,简单来说,就是一个特别聪明、特别能干的“大脑”,这个“大脑”由很多个小小的“神经元”组成,每个“神经元”都能处理一部分信息,当这些“神经元”一起工作时,大模型就能理解并回答各种问题,或者完成各种复杂的任务。就像你有一个超级聪明的助手,它能帮你写邮件、写PPT、回答你的各种问题等等,它就像是一个上知天文,下知地理,无所不知的人;


如何训练一个大模型:

要训练一个大模型不容易,需要给它提供很多学习材料,就像我们小时候读书学习一样。而且为了让这个“大脑”更聪明,还需要很多高级的计算机设备来帮助它学习。

训练大模型:

  • 高性能的CPU和GPU,多核心和高主频的CPU以及支持CUDA的GPU加速训练过程;
  • 大容量存储设备,训练大模型需要存储大量的数据集、模型参数和中间结果;
  • 高速网络连接,通过网络连接将训练任务分配到多个计算节点上;
  • 深度学习框架,如TensorFlow、PyTorch等,这些框架提供了构建和训练模型的工具和库;
  • 分布式训练框架,为了加速大模型的训练,可以使用分布式训练框架,如Horovod、Ry等;
  • 编程语言和工具,Python是深度学习领域最常用的编程语言,还有(如Git)来管理代码和版本迭代;
  • 训练大模型非常耗电,高性能计算机和GPU进行长时间的工作,需要消耗大量的电力;

二、什么是SpringAI


Spring AI官网地址:https://spring.io/projects/spring-ai

image-20240515000430597

  • Spring Al是一个AI工程领域的应用程序框架;
  • 它的目标是将Spring生态系统的设计原则应用于人工智能领域,比如Spring生态系统的可移植性和模块化设计,并推广使用POO来构建人工智能领域应用程序;
  • Spring Al并不是要构建一个自己的AI大模型,而是让你快速对接各种AI大模型;

Spring AI主要特点:

Spring Al提供的API支持跨人工智能提供商的聊天,文本到图像,和嵌入模型等,同时支持同步和流API选项;

  • ChatModels聊天模型:OpenAI、Azure Open AI、Amazon Bedrock、Google Vertex AI Palm、Google Gemini、MistralAI。

  • Text-to-image Models文本到图像模型:如 OpenAI

  • Transcription (audio to text)Models 转录模型(音频到文本):如 OpenAI

  • Embedding Models嵌入模型:有OpenAI、Azure OpenAI、Ollama、ONNX、PostgresML、Bedrock Cohere、Bedrock Titan、Google VertexAI、Mistal AI。

  • Vector Databases:矢量数据库(提高跨不同提供商的可移植性),有Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Redis、Weaviate、Qdrant。

  • 用于AI模型和矢量存储的Spring Boot自动配置和启动器;

  • 函数调用,您可以声明java.util.Function的OpenAl模型的函数实现,用于其提示响应。如果在应
    用程序上下文中注册为@Bean,则可以直接将这些函数作为对象提供,或者引用它们的名称。这一功
    能最大限度地减少了不必要的代码,并使人工智能模型能够要求更多信息来完成其响应;
    支持的模型有:OpenAl、Azure OpenAl、VertexAl、Mistral Al。

  • 用于数据工程的ETL框架:

    • ETL框架的核心功能是使用Vector Store促进文档向模型提供者的传输。ETL框架基于Java函数式编程概念,可帮助您将多个步骤链接在一起;
    • 支持阅读各种格式的文档,包括PDF、JSON等;
    • 该框架允许数据操作以满足您的需求。这通常包括拆分文档以遵守上下文窗口限制,并使用关键字增强它们以提高文档检索效率;
    • 最后,处理后的文档存储在矢量数据库中,以便将来检索;
  • 提供了广泛的参考文档、示例应用程序和研讨会/课程材料;


开发SpringAI程序的前期准备:

1、注册账号(测试账号):https://api.xty.app/register?aff=hlP5 ,不需要科学上网

2、登录账号,创建一个令牌,复制apikey

3、点击首页,里面有springai连接的地址


OpenAI官方版,需要登录账号获取: https://platform.openai.com/

三、开发SpringAI应用程序


1. 快速入门(AI聊天程序)

Spring AI 要求:JDK17、SpringBoot3.2以上版本…服了

1、创建springboot项目,serverURL:https://start.springboot.io/,JDK选择17

image-20240515011515318

2、添加依赖

image-20240515012455780

项目结构:

image-20240515013553428

完整的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--SpringBoot3.x父工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><!-- Generated by https://start.springboot.io --><!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn --><groupId>cn.aopmin</groupId><artifactId>spring-ai-01-chat</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai-01-chat</name><description>spring-ai-01-chat</description><properties><!--jdk的编译版本--><java.version>17</java.version><!--锁定spring-ai的版本--><spring-ai.version>0.8.1</spring-ai.version></properties><dependencies><dependency><!--springbootweb开发起步依赖--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--spring ai 起步依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency><!--热部署插件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!--s相当于是继承一个父项目:spring-ai-bom父项--><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build><!--配置本项目的仓库,因为maven中央仓库没有spring-ai的jar包--><repositories><!--里程碑版本的仓库--><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

3、添加yml配置

spring:application:name: spring-ai-01-chatai:openai:api-key: sk-xxx #换成你的api-keybase-url: https://api.xty.appchat:options:model: gpt-3.5-turbo # gpt模型

4、编写controller层代码

  • 注入springai提供好的OpenAiChatClient对象
  • 调用call()方法,往openai服务端发请求
package cn.aopmin.chat.controller;import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** Chat-控制器类** @author 白豆五* @since 2024/5/15*/
@Slf4j
@RestController
public class ChatController {@Autowiredprivate OpenAiChatClient openAiChatClient;/*** 测试聊天** @param msg 提问的问题* @return 聊天结果*/@RequestMapping("/ai/chat")//如果不传参默认发讲个笑话吧public String chat(@RequestParam("msg", defaultValue = "给我讲个笑话吧") String msg) {// 调用OpenAI的Chat APIString called = openAiChatClient.call(msg);log.info("call:{}", called);return called;}
}

5、启动项目并测试:http://localhost:8080/ai/chat?msg=xxx

image-20240515031817922

image-20240515032212162

image-20240515032324364

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

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

相关文章

【C语言深度解剖】(12):C语言库函数的学习和模拟实现,一篇文章就够了!

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多C语言深度解剖点击专栏链接查看&…

第十七篇:数据库性能优化的数学视角:理论与实践的融合

数据库性能优化的数学视角&#xff1a;理论与实践的融合 1. 引言 在现代信息技术快速发展的背景下&#xff0c;数据库性能优化已经成为计算机科学领域的一个热点问题。随着数据量的爆炸式增长和用户需求的多样化&#xff0c;数据库系统所承载的数据处理任务变得越来越复杂&…

Redis第17讲——Redis zset结构实现滑动窗口限流

一、什么是滑动窗口限流 滑动窗口限流是一种流量控制策略&#xff0c;用于控制在一定时间内允许执行的操作数量或请求频率。它的工作方式类似于一个滑动时间窗口&#xff0c;对每个时间窗口的请求数量进行计数&#xff0c;并根据预先设置的限流策略来限制或调节流量&#xff0…

maven deploy项目发布到中央仓库GPG签名失败signing failed: No secret key

maven deploy项目发布到中央仓库GPG签名失败signing failed: No secret key 执行操作 在我执行命令打包项目到中央仓库时失败 mvn clean deploy错误信息 [INFO] --- gpg:3.1.0:sign (sign-artifacts) LocalCache --- [INFO] Signing 4 files with 9961AA14xxxxxxxxxxxxxxD…

Ps 滤镜:彩色铅笔

Ps菜单&#xff1a;滤镜/滤镜库/艺术效果/彩色铅笔 Filter Gallery/Artistic/Colored Pencil 彩色铅笔 Colored Pencil滤镜用于模拟用彩色铅笔手绘的艺术效果&#xff0c;它能够在纯色背景上重新绘制图像&#xff0c;同时保留边缘细节并显示出粗糙的阴影线。此滤镜特别适合用于…

STM32HAL库-中断篇

中断 中断简介 中断是一种事件处理机制&#xff0c;可以暂停主程序的运行&#xff0c;转而处理特定事件程序。 中断的作用和意义&#xff1a; 实时控制 在确定事件内对响应事件做出相应 故障处理 检测到故障需要第一时间处理 数据传输 如串口通信&#xff0c;不确定数…

Mamba:7 VENI VIDI VICI

若在阅读过程中有些知识点存在盲区&#xff0c;可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。 序列模型的效率与有效性之间的权衡取决于状态编…

实锤,阿里云盾会拦截百度云防护的IP!

今天凌晨&#xff0c;一位站长联系上云加速客服&#xff0c;反馈说&#xff0c;网站突然出现了502的情况。 在检查云防护子域名配置没有问题、本地强制回源没有问题的情况下&#xff0c;我们得出结论是要么服务器内防火墙拦截了云防护的IP段&#xff0c;要么服务器商拦截了云防…

分布式计算、并行计算、网格计算、边缘计算

分布式计算 分布式计算是一种计算方法&#xff0c;它将一个大型的计算任务分解成多个子任务&#xff0c;并将这些子任务分布在网络上的多台计算机&#xff08;节点&#xff09;上同时执行。这些节点通过通信网络协同工作&#xff0c;共同完成任务。每个节点可以独立处理自己的…

如何使用AzurEnum快速枚举Microsoft Entra ID(Azure AD)

AzurEnum是一款针对Azure的安全工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以轻松快速地枚举Microsoft Entra ID&#xff08;Azure AD&#xff09;。 该工具基于纯Python 3开发&#xff0c;可以在Windows和Linux系统上运行&#xff0c;但考虑到性能和稳定性&a…

远程桌面如何配置?使用快解析远程访问

远程桌面如何设置&#xff1f; 远程桌面作为windows系统内置的一个组件&#xff0c;多年来深受用户喜爱。使用此功能&#xff0c;我们能够轻而易举的控制我们想要控制的电脑。下面我就简单的介绍一下远程桌面的设置方法。 在讲具体设置方法之前&#xff0c;首先应该给大家普及…

dfs记忆化搜索,动态规划

动态规划概念&#xff1a; 给定一个问题&#xff0c;将其拆成一个个子问题&#xff0c;直到子问题可以直接解决。然后把子问题的答案保存起来&#xff0c;以减少重复计算。再根据子问题的答案反推&#xff0c;得出原问题解。 821 运行时间长的原因&#xff1a; 重复大量计算…

MLM之GPT-4o:GPT-4o(多模态/高智能/2倍速/视觉改进/128K的大窗口)的简介、安装和使用方法、案例应用之详细攻略

MLM之GPT-4o&#xff1a;GPT-4o(多模态/高智能/2倍速/视觉改进/128K的大窗口)的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年5月13日&#xff0c;OpenAI重磅发布新旗舰模型GPT-4o&#xff0c;这是一个全新的旗舰模型&#xff0c;可以实时跨越音频、视觉和…

Unity Render入门

概述 在unity中渲染相关的组件是和Render关联的&#xff0c;比如我们常见的3D模型中的MeshRender&#xff0c;UI中的RenderCanvas等都是和Render相关联的&#xff0c;相信在unity的学习过程中&#xff0c;一定看到过非常多和Render相关的内容&#xff0c;那让我们学习一下这部…

python批量生成防伪识别二维码

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 二维码(QR Code)是一种矩阵条码技术,它使用黑白矩形图案来表示二进制数据,这些矩形图案可以被设备扫描并解读。二维码可以被用来存储

每日一题——PAT(乙级)1002 写出这个数(举一反三、思想解读)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三题目链接 我的写法&#xff1a; nums_sounds{0:ling,1:yi,2:er,3:san,4:si,5:wu,6:liu,7:qi,8:ba,9:jiu, }sum0inputsinput() input_nums[] for i i…

绝地求生:29.2商城更新内容预览:挣脱尘网通行证,经典皮肤返场,空投活动

就在今天历经9小时维护&#xff0c;29.2版本终于上线&#xff0c;柠檬茶带大家一起看看&#xff0c;这次游戏里都更新了哪些内容吧。 挣脱尘网通行证 豪华版&#xff1a;$14.99 普通版&#xff1a;$4.99 豪华版比普通版多10级升级券和2套生存者宝箱 分支一 分支二 分支三 额外…

现代加密技术(对称和非对称加密)

1.分类 现代加密技术&#xff1a;对称和非对称加密&#xff0c;对称加密即共享密钥&#xff0c;非对称加密是公钥加密算法。 2.基础总结 AES是什么算法&#xff1f; 分组加密算法&#xff0c;对称加密算法AES的分组长度是&#xff1f;固定128位AES密钥长度是多少&#xff1f;支…

树莓派3B+入门(无外设)

昨日刚到一块树莓派3B&#xff0c;甚是喜爱&#xff0c;然半宿未眠 1、下载 在官网先下载烧录文件https://www.raspberrypi.com/software/ 下载完毕打开&#xff0c;选择&#xff0c;根据自己板子型号定 操作系统用最新的就行&#xff0c;64位不太稳定 储存卡&#xff0c;需…

C++ | Leetcode C++题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution { public:int numDecodings(string s) {int n s.size();// a f[i-2], b f[i-1], c f[i]int a 0, b 1, c;for (int i 1; i < n; i) {c 0;if (s[i - 1] ! 0) {c b;}if (i > 1 && s[i - 2] ! 0 &&a…