SpringAI应用开发

news2024/11/16 0:01:44

一、人工智能简述


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

  • 蒸汽时代,发生在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-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

image-20240515031817922

image-20240515032212162

image-20240515032324364

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

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

相关文章

一篇文章搞懂 SDN中Minint和Ryu的安装及使用

SDN 一、SDN介绍 一&#xff0e; 什么是SDN? SDN字面意思是软件定义网络&#xff0c;其试图摆脱硬件对网络架构的限制&#xff0c;这样便可以像升级、安装软件一样对网络进行修改&#xff0c;便于更多的APP&#xff08;应用程序&#xff09;能够快速部署到网络上。 如果把…

pcdn边缘云常见sla有哪些?如何避免被白嫖

PCDN&#xff08;Point-to-Point Content Delivery Network&#xff09;边缘云常见的SLA&#xff08;Service Level Agreement&#xff09;规则包括高峰期离线、服务时间、重传延时、限速等。这些规则是为了保证服务质量和用户体验。下面将详细解释这些规则&#xff0c;并提供一…

51单片机:点亮一个LED灯

1.新建工程 选择AT89C52&#xff0c;在Atmel下显示的是See Microchip 并不需要添加启动文件到文件夹中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm汇编即更底层 程序编写好后 nop(); 该函数在这个头文件里面 #include <INTRINS.H> #include <R…

flex 盒子布局 align-items: start; flex-wrap: wrap; justify-content: space-between;

flex 盒子布局 align-items: start; flex-wrap: wrap; justify-content: space-between; 总盒子 .allboc {display: flex;width: 100%;align-items: start;flex-wrap: wrap;justify-content: space-between; }左边 justify-content: flex-start; .blog-articles {display: fl…

3588 pwm android12 的操作,包含 NDK native C++

问题&#xff1a; 客户需要在android12 的界面上操作板卡上的 PWM 蜂鸣器设备。 过程&#xff1a; 1 了解一下 3588 android12 源码的 关于PWM 的驱动。 设备树找不到 pwm 但是&#xff0c; 还不知道&#xff0c;android12 最终包含的 设备树是哪个&#xff0c;但是经过我的…

鸿蒙OS开发:【Stage模型应用程序包结构】

Stage模型应用程序包结构 为了让开发者能对应用程序包在不同阶段的形态更有清晰的认知&#xff0c;分别对开发态、编译态、发布态的应用程序结构展开介绍。 开发态包结构 在DevEco Studio上[创建一个项目工程]&#xff0c;并尝试创建多个不同类型的Module。根据实际工程中的…

数据分析(二)——导入外部数据,导入Excel数据,CSV文件,txt文件,HTML网页,数据抽取,DataFrame对象的loc属性与iloc属性

一.导入外部数据 1.导入.xIs或.xIsx文件 pd.read_ excel(io,sheet_ name,header) 1.1常用参数说明 ●io:表示.xIs或.xIsx文件路径或类文件对象 ●sheet name:表示工作表&#xff0c;取值如下表所示 ●header:默认值为0&#xff0c;取第一行的值为列名&#xff0c;数据为除列…

C++ 结构体内存对齐

定义了两个结构体 typedef struct Cmd {uint8_t ua;uint8_t ub;uint8_t uc;uint32_t ue; } Cmd_t;typedef struct Cmd_tag {uint8_t value;uint8_t data[1]; // 将 data 定义为指向 Cmd_t 结构体的指针 } tag_t;在实际使用中&#xff0c;看见前人的代码是&#xff0c;new 一块内…

【Qt问题】windeployqt如何提取Qt依赖库

往期回顾 【Qt问题】Qt Creator 如何链接第三方库-CSDN博客 【Qt问题】Qt 如何带参数启动外部进程-CSDN博客 【Qt问题】VS2019 Qt win32项目如何添加x64编译方式-CSDN博客 【Qt问题】windeployqt如何提取Qt依赖库 考虑这个问题主要是&#xff1a;当我们的程序运行好之后&#…

BI报表大用处 揭秘BI报表在行业中的变革力量

BI报表&#xff0c;即商业智能报表&#xff0c;是一种利用商业智能技术将企业中的数据转换为有意义的信息和可视化展示的报告。它通过将企业内部的大量数据转化为直观、易于理解的图表和指标&#xff0c;帮助决策者快速捕捉关键业务信息&#xff0c;识别趋势和模式&#xff0c;…

【深度学习】Diffusion扩散模型的逆扩散问题

1、前言 上一篇&#xff0c;我们讲了Diffusion这个模型的原理推导。但在推导中&#xff0c;仍然遗留了一些问题。本文将解决那些问题 参考论文&#xff1a; ①Variational Diffusion Models (arxiv.org) ②Tutorial on Diffusion Models for Imaging and Vision (arxiv.org…

训练集、测试集与验证集:机器学习模型评估的基石

在机器学习中&#xff0c;为了评估模型的性能&#xff0c;我们通常会将数据集划分为训练集&#xff08;Training Set&#xff09;、验证集&#xff08;Validation Set&#xff09;和测试集&#xff08;Test Set&#xff09;。这种划分有助于我们更好地理解模型在不同数据上的表…

React 第三十六章 Scheduler 任务调度

Scheduler 用于在 React 应用中进行任务调度。它可以帮助开发人员在处理复杂的任务和操作时更好地管理和优化性能。 关于 Scheduler 在React 如何渲染的可以参考 React 第三十四章 React 渲染流程 下面我们根据流程图先简单的了解 Scheduler 的调度过程 Scheduler 维护两个队…

机器人SCI期刊,中科院3区,收稿范围广泛!

一、期刊名称 Journal of Intelligent & Robotic Systems 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;3.3 中科院分区&#xff1a;3区 出版方式&#xff1a;开放出版 版面费&#xff1a;$2990 三、期刊征稿范围…

基于springboot实现的家具销售电商平台

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

05-13 周一 量化是什么

05-13 周一 量化是什么 时间版本修改人描述2024年5月13日11:27:25V0.1宋全恒新建文档2024年5月14日16:21:20V1.0宋全恒了解 简介 神经网络在运行时有较高的计算成本&#xff0c;而且随着大模型时代的到来&#xff0c;知识由一个巨大的LLM存储&#xff0c;为了获取知识&#xf…

别再找了!吐血整理ChatGPT 3.5/4.0新手使用手册

引领科技潮流的ChatGPT早已名声在外&#xff0c;如今获取ChatGPT已变得触手可及&#xff0c;但很多人还多次提问如何使用chatgpt&#xff0c;为了避免陷入误区&#xff0c;本文旨在为广大ChatGPT爱好者提供一份实用的指南。 因此&#xff0c;帮助大家更好地掌握其使用技巧&…

免费PPT模板下载,无套路。

身在职场做好PPT是一项必备技能&#xff0c;如何快速做出好看又高级的PPT&#xff0c;收藏好这6个网站&#xff0c;不管你是工作总结、毕业论文、个人简历、企业宣传都能找到合适的模板&#xff0c;最重要的是可以免费下载。 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图…

请收好,这份思科备考攻略很细节

对于网络工程师来说&#xff0c;思科认证无疑是一块金字招牌。它不仅代表着专业技能&#xff0c;更是职业发展的加速器。 今天我们不聊选思科认证还是华为认证&#xff0c;只能说是各有各的好&#xff0c;如果你已经选择了思科认证&#xff0c;那么这份备考攻略将为你提供一些实…

C++笔试强训day22

目录 1.添加字符 2.数组变换 3.装箱问题 常规一维优化&#xff1a; 1.添加字符 链接 因为lenA < lenB < 50&#xff0c;因此可以无脑暴力解题&#xff1a; 遍历所有符合条件的匹配方法&#xff0c;找出最小的不同的数量&#xff0c;即最大的相同的数量 #include &…