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();

}

}

相关推荐
天河归来17 分钟前
springboot框架redis开启管道批量写入数据
java·spring boot·redis
张先shen26 分钟前
Elasticsearch RESTful API入门:全文搜索实战
java·大数据·elasticsearch·搜索引擎·全文检索·restful
codervibe27 分钟前
如何用 Spring Security 构建无状态权限控制系统(含角色菜单控制)
java·后端
codervibe30 分钟前
项目中如何用策略模式实现多角色登录解耦?(附实战代码)
java·后端
TCChzp32 分钟前
synchronized全链路解析:从字节码到JVM内核的锁实现与升级策略
java·jvm
大葱白菜33 分钟前
🧩 Java 枚举详解:从基础到实战,掌握类型安全与优雅设计
java·程序员
笑衬人心。35 分钟前
在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)
java·macos·intellij-idea
SimonKing42 分钟前
颠覆传统IO:零拷贝技术如何重塑Java高性能编程?
java·后端·程序员
sniper_fandc1 小时前
SpringBoot系列—MyBatis(xml使用)
java·spring boot·mybatis
胚芽鞘6811 小时前
查询依赖冲突工具maven Helper
java·数据库·maven