SpringAI+DeepSeek大模型应用开发实战
内容来自黑马程序员
这里写目录标题
- 认识AI和大模型
- 大模型应用开发
- 模型部署方案对比
- 模型部署-云服务
- 模型部署-本地部署
- 调用大模型
- 什么是大模型应用
- 传统应用和大模型应用
- 大模型应用
- 大模型应用开发技术架构
- SpringAI
- 对话机器人
- 快速入门
- 会话日志
- 会话记忆
认识AI和大模型
- AI的发展
AI,人工智能(Artificial Intelligence),使机器能够像人类一样思考、学习和解决问题的技术。
- 大语言模型
我们所熟知的大模型(Large Language Models, LLM),例如GP、DeepSeek底层都是采用Transformer神经网络模型。
- Transformer
大模型应用开发
模型部署方案对比
模型部署-云服务
国内知名的云服务平台都提供了全球知名的大模型的私有部署功能,甚至还提供了这些模型的API开发平台,无需部署就能提供。
云平台 | 公司 | 地址 |
---|---|---|
阿里百炼 | 阿里巴巴 | https://bailian.console.aliyun.com |
干帆平台 | 百度 | https://console.bce.baidu.com/qianfan/overview |
腾讯TI平台 | 腾讯 | https://cloud.tencent.com/product/ti |
SiliconCloud | 硅基流动 | https://siliconflow.cn/zh-cn/siliconcloud |
火山方舟-火山引擎 | 字节跳动 | https://www.volcengine.com/product/ark |
模型部署-本地部署
本地部署最简单的一种方案就是使用ollama,官网地址:https//ollama.com
调用大模型
以下是DeepSeek官方给出的一段API实例代码:
# Please install OpenAI SDK first: `pip3 install openai`from openai import OpenAIclient = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "Hello"},],stream=False
)print(response.choices[0].message.content)
什么是大模型应用
传统应用和大模型应用
大模型应用是基于大模型的推理、分析、生成能力,结合传统编程能力,开发出的各种应用。
大模型应用
大模型 | 对话产品 | 公司 | 地址 |
---|---|---|---|
GPT-3.5、GPT-4o | ChatGPT | OpenAI | https://chatgpt.com/ |
Claude 3.5 | Claude AI | Anthropic | https://claude.ai/chats |
DeepSeek-R1 | DeepSeek | DeepSeek | https://www.deepseek.com/ |
文心大模型3.5 | 文心一言 | 百度 | https://yiyan.baidu.com/ |
星火3.5 | 讯飞星火 | 科大讯飞 | https://xinghuo.xfyun.cn/desk |
Qwen-Max | 通义千问 | 阿里巴巴 | https://tongyi.aliyun.com/qianwen/ |
Moonshoot | Kimi | 月之暗面 | https://kimi.moonshot.cn/ |
Yi-Large | 零一万物 | 零一万物 | https://platform.lingyiwanwu.com/ |
大模型应用开发技术架构
SpringAI
对话机器人
快速入门
- 引入依赖
<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>
- 配置模型
spring:ai:ollama:base-url: http://localhost:11434chat:model: deepseek-r1:7b
spring:ai:openai:base-url: https://dashscope.aliyuncs.com/compatible-modelapi-key: ${OPENAI_API_KEY}chat:options:model: qwen-max # 模型名称temperature: 0.8 # 模型温柔度,值越大,输出结果越随机
- 配置客户端
@Beanpublic ChatClient chatClient(OllamaChatModel model){return ChatClient.builder(model).defaultSystem("你是可爱的助手,名字叫小团团").build();}
String content = chatClient.prompt().user("你是谁?").call().content();// 流式
Flux<String> content = chatClient.prompt().user("你是谁?").stream().content();
会话日志
SpringAI利用了AOP原理提供了AI会话是的拦截、增强等功能,也就是Advisor。
@Bean
public ChatClient chatClient(OllamaChatModel model){return ChatClient.builder(model) // 创建ChatClient工厂实例.defaultSystem("你是可爱的助手,名字叫小团团") .defaultAdvisors(new SimpleLoggerAdvisor()) // 配置日志Advisor.build(); // 构建ChatClient实例
}
会话记忆
大模型是具备记忆能力的,要想让大模型记住之前聊天的内容,唯一的办法就是把之前聊天的内容与新的提示词一起发给大模型。
from openai import OpenAI#1.初始化OpenAI客户端
from openai import OpenAI#1.初始化OpenAI客户端
client = OpenAI(api_key="<DeepSeek API Key>",base_url="https://api.deepseek.com")#2.发送http请求到大模型
response = client.chat.completions.create(model="deepseek-r1",temperature=0.7,messages=[{"role":"system","content":"你是一个热心的AI助手,你的名字叫小团团"},{"role":"user","content":"你好,你是谁? "},],stream=False
)
# 3.打印返回结果
print(response.choices[o].message.content)
- 定义会话存储方式
public interface ChatMemory {void add(String conversationId, List<Message> messages);List<Message> get(String conversationId, int lastN);void clear(String conversationId);}
@Beanpublic ChatMemory chatMemory(){return new InMemoryChatMemory();}
- 配置会话记忆
@Beanpublic ChatClient chatClient(OllamaChatModel model){return ChatClient.builder(model).defaultSystem("你是可爱的助手,名字叫小团团").defaultAdvisors(new SimpleLoggerAdvisor(),new MessageChatMemoryAdvisor(chatMemory())).build();}
- 添加会话id
Flux<String> content = chatclient.prompt().user("你好,我叫小明”).advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)).stream().content();
添加会话id到AdvisorContext上下文中
相关文章:

SpringAI+DeepSeek大模型应用开发实战
内容来自黑马程序员 这里写目录标题 认识AI和大模型大模型应用开发模型部署方案对比模型部署-云服务模型部署-本地部署调用大模型什么是大模型应用传统应用和大模型应用大模型应用 大模型应用开发技术架构 SpringAI对话机器人快速入门会话日志会话记忆 认识AI和大模型 AI的发…...
【Python Cookbook】文件与 IO(一)
文件与 IO(一) 1.读写文本数据2.打印输出至文件中3.使用其他分隔符或行终止符打印4.读写字节数据5.文件不存在才能写入 1.读写文本数据 你需要读写各种不同编码的文本数据,比如 ASCII,UTF-8 或 UTF-16 编码等。 使用带有 rt 模式…...
STM32 HAL库函数学习 GPIO篇
1、void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, const GPIO_InitTypeDef *pGPIO_Init) GPIO外设属于是任何芯片的最基础功能 ,STM32各个系列的GPIO初始化都是一致的,有不同的是部分系列在IO复用使用了单独一个成员属性Alternate 来表明这个IO的具体复用功…...

如何以 9 种方式将照片从 iPhone 传输到笔记本电脑
您的 iPhone 可能充满了以照片和视频形式捕捉的珍贵回忆。无论您是想备份它们、在更大的屏幕上编辑它们,还是只是释放设备上的空间,您都需要将照片从 iPhone 传输到笔记本电脑。幸运的是,有 9 种方便的方法可供使用,同时满足 Wind…...

根据jvm源码剖析类加载机制
根据jvm源码剖析类加载机制 java Test.class之后的大致流程 java Test.class ----> 对于windows操作系统 ----> java.exe调用jvm.dll文件创建JVM, ----> 在创建JVM中先由C的代码创建Boostarp(引导)类加载器, ----&g…...
Mixly1.0/2.0/3.0 (windows系统) 安装教程及使用常见问题解决
大家好!长期以来,不少用户在使用 Mixly 软件过程中遇到了各类问题。为了帮助大家更顺畅地使用该软件,齐护机器人工程师结合自身丰富经验,精心总结并推出了本期教程。在本教程中,我们将从 Mixly 图形化编程软件的安装步…...

DDS通信中间件——DDS-TSN规范
DDS通信中间件——DDS-TSN规范 做了十年DDS通信中间件产品的程序员和大家分享一下对DDS这套规范的个人理解。预期本系列文章将包括以下内容陆续更新: DDS规范概述DCPS规范解读 & QoS策略XTypes规范解读RTPS规范解读DDS安全规范解读DDS-RPC规范解读(…...

JWT安全:弱签名测试.【实现越权绕过.】
JWT安全:假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上,它们可以包含任何类型的数据,但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…...
MATLAB实现井字棋
一、智能决策系统与博弈游戏概述 (一)智能决策系统核心概念 智能决策系统(Intelligent Decision System, IDS)是通过数据驱动和算法模型模拟人类决策过程的计算机系统,核心目标是在复杂环境中自动生成最优策略&#…...

Baklib知识中台加速企业服务智能化实践
知识中台架构体系构建 Baklib 通过构建多层级架构体系实现知识中台的底层支撑,其核心包含数据采集层、知识加工层、服务输出层及智能应用层。在数据采集端,系统支持对接CRM、ERP等业务系统,结合NLP技术实现非结构化数据的自动抽取࿱…...
在AIX环境下修改oracle 11g rac的IP地址
0、当前环境 由于机房网络变更,客户要修改现在RAC的网络地址,这里记录一下。 主机操作系统:AIX 7.2 数据库版本:11.2.0.4 rac 数据库实例名:orcl1/orcl2 当前hosts文件配置 192.168.56.10 rac1 192.168.56.11 …...

VMware Tools 手动编译安装版
OWASPBWA安装VMware tools 安装时,显示如下提示 官方安装手册参考:https://knowledge.broadcom.com/external/article?legacyId1014294 按照提示,下载linux.iso文件,并连接到虚拟机的CDROM里,状态勾选已连接&#x…...

android平台驱动开发(六)--Makefile和Kconfig简介
Makefile: 1.编译进内核,还是以模块方式加载 模块方式编译成ko,通常是自己添加脚本方式insmod ,android 平台通常默认有modprobe加载,不需要额外添加insmod脚本 lsmod |grep test 可以查看是否安装成功 rmmod test-m.ko 可以删除ko 2.多…...

【手写系列】手写线程池
PS:本文的线程池为演示 Demo,皆在理解线程池的工作原理,并没有解决线程安全问题。 最简单一版的线程池 public class MyThreadPool {// 存放线程,复用已创建的线程List<Thread> threadList new ArrayList<>();publ…...
python学习打卡day40
DAY 40 训练和测试的规范写法 知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业&#…...
redis高并发问题
Redlock原理和存在的问题 Redlock 基于以下假设: 有多个(一般建议是 5 个)彼此独立的 Redis 实例(不是主从复制,也不是集群模式),它们之间没有数据同步。客户端可以与所有 Redis 实例通信。 …...

Live Helper Chat 安装部署
Live Helper Chat(LHC)是一款开源的实时客服聊天系统,适用于网站和应用,帮助企业与访问者即时沟通。它功能丰富、灵活、可自托管,常被用于在线客户支持、销售咨询以及技术支持场景。 🧰 系统要求 安装要求 您提供的链接指向 Live Helper Chat 的官方安装指南页面,详细…...

ARXML解析与可视化工具
随着汽车电子行业的快速发展,AUTOSAR标准在车辆软件架构中发挥着越来越重要的作用。然而,传统的ARXML文件处理工具往往存在高昂的许可费用、封闭的数据格式和复杂的使用门槛等问题。本文介绍一种基于TXT格式输出的ARXML解析方案,为开发团队提供了一个高效的替代解决方案。 …...

PnP(Perspective-n-Point)算法 | 用于求解已知n个3D点及其对应2D投影点的相机位姿
什么是PnP算法? PnP 全称是 Perspective-n-Point,中文叫“n点透视问题”。它的目标是: 已知一些空间中已知3D点的位置(世界坐标)和它们对应的2D图像像素坐标,求解摄像机的姿态(位置和平移&…...
LeetCode 热题 100 208. 实现 Trie (前缀树)
LeetCode 热题 100 | 208. 实现 Trie (前缀树) 大家好!今天我们来解决一道经典的算法题——实现 Trie (前缀树)。Trie(发音类似 “try”)是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构在自动补全和拼…...
python爬虫:RoboBrowser 的详细使用
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、RoboBrowser概述1.1 RoboBrowser 介绍1.2 安装 RoboBrowser1.3 与类似工具比较二、基本用法2.1 创建浏览器对象并访问网页2.2 查找元素2.3 填写和提交表单三、高级功能3.1 处理文件上传3.2 处理JavaScript重定向3.3…...

在日常管理服务器中如何防止SQL注入与XSS攻击?
在日常管理服务器时,防止SQL注入(Structured Query Language Injection)和XSS(Cross-Site Scripting)攻击是至关重要的,这些攻击可能会导致数据泄露、系统崩溃和信息泄露。以下是一份技术文章,介…...

Wkhtmltopdf使用
Wkhtmltopdf使用 1.windows本地使用2.golangwindows环境使用3.golangdocker容器中使用 1.windows本地使用 官网地址 https://wkhtmltopdf.org/,直接去里面下载自己想要的版本,这里以windows版本为例2.golangwindows环境使用 1.安装扩展go get -u githu…...

ArcGIS Pro 创建渔网格网过大,只有几个格网的解决方案
之前用ArcGIS Pro创建渔网的时候,发现创建出来格网过大,只有几个格网。 后来查阅资料,发现是坐标不对,导致设置格网大小时单位为度,而不是米,因此需要进行坐标系转换,网上有很多资料讲了ArcGIS …...

重学计算机网络之以太网
一:历史发展进程 DIX EtherNet V2 战胜IEEE802.3成为主流版本。总线型交换机拓扑机构代替集线器星型拓扑机构 1990年IEEE制定出星形以太网10BASE-T的标准**802.3i**。“10”代表10 Mbit/s 的数据率,BASE表示连接线上的信号是基带信号,T代表…...

《深度解构现代云原生微服务架构的七大支柱》
☁️《深度解构现代云原生微服务架构的七大支柱》 一线架构师实战总结,系统性拆解现代微服务架构中最核心的 7 大支柱模块,涵盖通信协议、容器编排、服务网格、弹性伸缩、安全治理、可观测性、CI/CD 等。文内附架构图、实操路径与真实案例,适…...

使用SCSS实现随机大小的方块在页面滚动
目录 一、scss中的插值语法 二、方块在界面上滚动的动画 一、scss中的插值语法 插值语法 #{} 是一种动态注入变量或表达式到选择器、属性名、属性值等位置的机制 .类名:nth-child(n) 表示需同时满足为父元素的第n个元素且类名为给定条件 效果图: <div class…...

AI 眼镜新纪元:贴片式TF卡与 SOC 芯片的黄金组合破局智能穿戴
目录 一、SD NAND:智能眼镜的“记忆中枢”突破空间限制的存储革命性能与可靠性的双重保障 二、SOC芯片:AI眼镜的“智慧大脑”从性能到能效的全面跃升多模态交互的底层支撑 三、SD NANDSOC:11>2的协同效应数据流水线的高效协同成本…...

论文阅读(六)Open Set Video HOI detection from Action-centric Chain-of-Look Prompting
论文来源:ICCV(2023) 项目地址:https://github.com/southnx/ACoLP 1.研究背景与问题 开放集场景下的泛化性:传统 HOI 检测假设训练集包含所有测试类别,但现实中存在大量未见过的 HOI 类别(如…...

算法学习--持续更新
算法 2025年5月24日 完成:快速排序、快速排序基数优化、尾递归优化 快排 public class QuickSort {public void sort(int[] nums, int left, int right) {if(left>right){return;}int partiton quickSort(nums,left,right);sort(nums,left,partiton-1);sort(nu…...