SpringAI

机器学习:

  • 定义:人工智能的子领域,通过数据驱动的方法让计算机学习规律,进行预测或决策。
  • 核心方法

    • 监督学习(如线性回归、SVM)。

    • 无监督学习(如聚类、降维)。

    • 强化学习(如Q-learning)。

  • 特点:依赖特征工程,模型复杂度较低,适用于中小型数据。

深度学习:

  • 定义:基于深层神经网络的机器学习方法,可自动提取特征。
  • 关键技术

    • 神经网络架构:CNN(图像)、RNN/LSTM(序列数据)、Transformer。

    • 优化算法:反向传播、梯度下降(如Adam优化器)。

  • 优势:处理高维数据(如图像、文本),减少人工特征工程。

自然语言处理:

  • 目标:使计算机理解、生成人类语言。

  • 技术演进

    • 传统方法:词袋模型、TF-IDF、隐马尔可夫模型。

    • 深度学习方法:词嵌入(Word2Vec)、预训练模型(BERT、GPT)。

  • 任务:机器翻译、情感分析、文本生成等。

大语言模型:

  • 定义:参数量巨大(数亿至万亿)的深度学习模型,专注于语言任务。

  • 代表模型:GPT系列、BERT、T5。

  • 核心技术

    • Transformer架构:自注意力机制(捕捉长距离依赖)。

    • 预训练与微调:在大规模语料上预训练(如掩码语言建模),再针对下游任务微调。

大模型底层原理:

T:基于Transformer的神经网络

P:通过大量数据预训练,掌握自然语言规律

G:基于上文计算概率,生成下一个token

模型部署:

云部署:

优点:前期成本低、部署维护简单、弹性扩展、全球访问

缺点:数据隐私、网络依赖、长期成本高

本地部署:

优点:数据安全、不依赖外部网络、长期成本低、高度定制

缺点:初始成本高、维护复杂、部署周期长

开放API:

优点:前期成本极低、无需部署、无需维护、全球访问

缺点:数据隐私、网络依赖、长期成本高、定制限制

调用大模型:

传统应用和大模型应用:

大模型应用是基于大模型的推理、分析、生成能力,结合传统编程能力,开发出的各种应用

AI应用开发技术架构:

Fine-tuning(模型微调)

针对特有业务场景对基础大模型做数据训练与微调,以满足特定场景的需求。

SpringAI:

是一个大模型应用框架。其目标是将Spring生态系统的设计原则(如可移植性的模块化设计)应用于人工智能邻域。可以无缝接入Spring生态体系,快速改造传统项目。

对话机器人-入门

引入依赖:

配置模型:

配置客户端:

创建项目:

引入依赖自动完成

配置:

创建包config,包下创建相应类

创建controller包,包下创建相应的类:

手动加入

阻塞式,响应时间较长

流式默认采用event事件流,默认情况没有编码

需要在@RequestMapping注解后自己设置响应的类型

system设定:

这里是controller和前端的对话

对话机器人-会话日志

对chatclinet做修改加入环绕增强

修改配置文件,新增日志相关:

在application.yaml加入

日志功能通过环绕通知来去实现的

对话机器人-前端对接

解决跨域问题

对话机器人-会话记忆

步骤:

定义会话存储方式:

存储在内部的会话记忆

配置会话记忆:

添加会话id:

第三排:匿名环绕增强器

配置类中

添加

对话机器人-会话历史

新增接口:

public interface ChatHistoryRepository {

/**

* 保存会话记录

* @param type

* @param charId

*/

void save(String type,String charId);

/**

* 获取会话记录

* @param type

* @return

*/

List<String> getChatIds(String type);

}

接口实现:

/**

* @author TonySong

* @date 2025/4/12 0012

* @time 10:35

*/

@Component

public class InMemoryChatRepository implements ChatHistoryRepository{

private final Map<String,List<String>> chatHistory= new HashMap<>();

@Override

public void save(String type, String charId) {

// if(!chatHistory.containsKey(type)){

// chatHistory.put(charId,new ArrayList<>());

// }

// List<String> charIds = chatHistory.get(type);

List<String> charIds = chatHistory.computeIfAbsent(type, k -> new ArrayList<>());

if(charIds.contains(charId)){

return;

}

charIds.add(charId);

}

@Override

public List<String> getChatIds(String type) {

// List<String> list = chatHistory.get(type);

// return list==null? List.of():list;

return chatHistory.getOrDefault(type,List.of());

}

}

修改会话实现:

/**

* @author TonySong

* @date 2025/4/11 0011

* @time 17:39

*/

@RestController

@RequestMapping("/ai")

@RequiredArgsConstructor//启用带参构造完成创建

public class ChatController {

private final ChatClient chatClient;

private final ChatHistoryRepository chatHistoryRepository;

@RequestMapping(value = "/chat",produces = "text/html;charset=utf-8")

public Flux<String> chat(@RequestParam(value = "message",defaultValue = "你是谁") String message) {

//1、保存会话

chatHistoryRepository.save("chat",message);

//2、获取会话

return chatClient

.prompt()

.user(message)

.stream()

.content();

}

}

相关推荐
自由鬼1 小时前
如何处理Y2K38问题
java·运维·服务器·程序人生·安全·操作系统
_oP_i4 小时前
RabbitMQ 队列配置设置 RabbitMQ 消息监听器的并发消费者数量java
java·rabbitmq·java-rabbitmq
Monkey-旭4 小时前
Android Bitmap 完全指南:从基础到高级优化
android·java·人工智能·计算机视觉·kotlin·位图·bitmap
我爱996!4 小时前
SpringMVC——响应
java·服务器·前端
小宋10215 小时前
多线程向设备发送数据
java·spring·多线程
大佐不会说日语~6 小时前
Redis高频问题全解析
java·数据库·redis
寒水馨6 小时前
Java 17 新特性解析与代码示例
java·开发语言·jdk17·新特性·java17
启山智软6 小时前
选用Java开发商城的优势
java·开发语言
鹦鹉0076 小时前
SpringMVC的基本使用
java·spring·html·jsp
R cddddd6 小时前
Maven模块化开发与设计笔记
java·maven