一、人工智能简述
四次工业革命推动了人类社会发展和变革:
- 蒸汽时代,发生在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
- 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
2、添加依赖
项目结构:
完整的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-chat
ai:
openai:
api-key: sk-xxx #换成你的api-key
base-url: https://api.xty.app
chat:
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 {
@Autowired
private OpenAiChatClient openAiChatClient;
/**
* 测试聊天
*
* @param msg 提问的问题
* @return 聊天结果
*/
@RequestMapping("/ai/chat")//如果不传参默认发讲个笑话吧
public String chat(@RequestParam("msg", defaultValue = "给我讲个笑话吧") String msg) {
// 调用OpenAI的Chat API
String called = openAiChatClient.call(msg);
log.info("call:{}", called);
return called;
}
}
5、启动项目并测试:http://localhost:8080/ai/chat?msg=xxx