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-4oChatGPTOpenAIhttps://chatgpt.com/
Claude 3.5Claude AIAnthropichttps://claude.ai/chats
DeepSeek-R1DeepSeekDeepSeekhttps://www.deepseek.com/
文心大模型3.5文心一言百度https://yiyan.baidu.com/
星火3.5讯飞星火科大讯飞https://xinghuo.xfyun.cn/desk
Qwen-Max通义千问阿里巴巴https://tongyi.aliyun.com/qianwen/
MoonshootKimi月之暗面https://kimi.moonshot.cn/
Yi-Large零一万物零一万物https://platform.lingyiwanwu.com/

在这里插入图片描述

大模型应用开发技术架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SpringAI

在这里插入图片描述

对话机器人

快速入门

  1. 引入依赖
<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>
  1. 配置模型
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 # 模型温柔度,值越大,输出结果越随机
  1. 配置客户端
   @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)

在这里插入图片描述

  1. 定义会话存储方式
 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();}
  1. 配置会话记忆
 @Beanpublic ChatClient chatClient(OllamaChatModel model){return ChatClient.builder(model).defaultSystem("你是可爱的助手,名字叫小团团").defaultAdvisors(new SimpleLoggerAdvisor(),new MessageChatMemoryAdvisor(chatMemory())).build();}
  1. 添加会话id
Flux<String> content = chatclient.prompt().user("你好,我叫小明”).advisors(a -> a.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)).stream().content();

添加会话id到AdvisorContext上下文中

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

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

相关文章

高温炉制造企业Odoo ERP实施规划与深度分析报告

摘要 本报告旨在为高温炉生产企业提供一个基于Odoo 18平台的企业资源规划&#xff08;ERP&#xff09;系统实施的全面分析与规划。报告首先系统梳理了高温炉制造业独特的业务流程特点&#xff0c;随后详细映射了Odoo 18各核心模块功能与这些业务需求的匹配程度。重点分析了生产…

简述什么是全局锁?它的应用场景有哪些?

全局锁是数据库管理系统中的一种特殊锁机制&#xff0c;用于对整个数据库实例进行加锁&#xff0c;使数据库处于只读状态&#xff0c;阻止所有数据更新&#xff08;DML&#xff09;、数据定义&#xff08;DDL&#xff09;及更新类事务提交等操作。 其核心应用场景包括&#xf…

window 显示驱动开发-呈现开销改进(二)

对共享表面的纹理格式支持 驱动程序应支持共享资源和可共享的后台缓冲区&#xff0c;以使用 DXGI_FORMAT 枚举中的这些附加纹理格式&#xff1a; DXGI_FORMAT_A8_UNORMDXGI_FORMAT_R8_UNORMDXGI_FORMAT_R8G8_UNORMDXGI_FORMAT_BC1_TYPELESS\*DXGI_FORMAT_BC1_UNORMDXGI_FORMAT…

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab&#xff0c;本文介绍将二者结合使用 项目源码上传至gitee提供公网访问&#xff1a;https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

深入解析 Redis Cluster 架构与实现(一)

#作者&#xff1a;stackofumbrella 文章目录 Redis Cluster特点Redis Cluster与其它集群模式的区别集群目标性能hash tagsMutli-key操作Cluster Bus安全写入&#xff08;write safety&#xff09;集群节点的属性集群拓扑节点间handshake重定向与reshardingMOVED重定向ASK重定向…

linux centos 服务器性能排查 vmstat、top等常用指令

背景:项目上经常出现系统运行缓慢,由于数据库服务器是linux服务器,记录下linux服务器性能排查常用指令 vmstat vmstat介绍 vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这…

在IIS上无法使用PUT等请求

错误来源&#xff1a; chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

Python训练第四十一天

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

Linux线程同步实战:多线程程序的同步与调度

个人主页&#xff1a;chian-ocean 文章专栏-Linux Linux线程同步实战&#xff1a;多线程程序的同步与调度 个人主页&#xff1a;chian-ocean文章专栏-Linux 前言&#xff1a;为什么要实现线程同步线程饥饿&#xff08;Thread Starvation&#xff09;示例&#xff1a;抢票问题 …

5.2 初识Spark Streaming

在本节实战中&#xff0c;我们初步探索了Spark Streaming&#xff0c;它是Spark的流式数据处理子框架&#xff0c;具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理&#xff0c;并通过两个案例演示了如何利用Spark Streaming实现词频统计。…

Go 即时通讯系统:日志模块重构,并从main函数开始

重构logger 上次写的logger.go过于繁琐&#xff0c;有很多没用到的功能&#xff1b;重构后只提供了简洁的日志接口&#xff0c;支持日志轮转、多级别日志记录等功能&#xff0c;并采用单例模式确保全局只有一个日志实例 全局变量 var (once sync.Once // 用于实现…

「数据采集与网络爬虫(使用Python工具)」【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 103 篇 - Date: 2025 - 06 - 01 Author: 郑龙浩/仟墨 文章目录 「据采集与网络爬虫」【使用工具&#xff1a;Python】一 数据采集1 数据采集综述&#xff08;1&#xff09;基本介绍&#xff08;2&#xff09;数据目标源&#xff08;3&#xff09;采集方式&#xff08;4&am…

响应式系统与Spring Boot响应式应用开发

响应式系统概述 过去十年间,为应对移动和云计算的需求,软件行业通过改进开发流程来构建更稳定、健壮且灵活的软件系统。这种演进不仅服务于传统用户端(桌面/Web),还需支持多样化设备(手机、传感器等)。为应对这些挑战,多个组织共同制定了《响应式宣言》(2014年发布)…

POJO、DTO和VO:Java应用中的三种关键对象详解

在软件开发特别是Java开发中&#xff0c;常常会遇到POJO、DTO和VO这三类对象。它们在不同场景下扮演着重要角色&#xff0c;有助于优化代码结构、增强系统安全性和提升性能。本文将全面解析这三者的定义、区别及常见使用场景&#xff0c;帮助你更好地理解和应用。 1. POJO&…

leetcode付费题 353. 贪吃蛇游戏解题思路

贪吃蛇游戏试玩:https://patorjk.com/games/snake/ 问题描述 设计一个贪吃蛇游戏,要求实现以下功能: 初始化游戏:给定网格宽度、高度和食物位置序列移动操作:根据指令(上、下、左、右)移动蛇头规则: 蛇头碰到边界或自身身体时游戏结束(返回-1)吃到食物时蛇身长度增加…

NLP学习路线图(十三):正则表达式

在自然语言处理&#xff08;NLP&#xff09;的浩瀚宇宙中&#xff0c;原始文本数据如同未经雕琢的璞玉。而文本预处理&#xff0c;尤其是其中至关重要的正则表达式技术&#xff0c;正是将这块璞玉转化为精美玉器的核心工具集。本文将深入探讨正则表达式在NLP文本预处理中的原理…

计算机网络(4)——网络层

1.概述 1.1 网络层服务 (1) 网络层为不同主机(Host)之间提供了一种逻辑通信机制 (2)每个主机和路由器都运行网络层协议 发送方&#xff1a;将来自传输层的消息封装到数据报(datagram)中接收方&#xff1a;向传输层交付数据段(segment) 1.2 网络层核心功能 路由选择(routing…

EMO2:基于末端执行器引导的音频驱动虚拟形象视频生成

今天带来EMO2&#xff08;全称End-Effector Guided Audio-Driven Avatar Video Generation&#xff09;是阿里巴巴智能计算研究院研发的创新型音频驱动视频生成技术。该技术通过结合音频输入和静态人像照片&#xff0c;生成高度逼真且富有表现力的动态视频内容&#xff0c;值得…

[Redis] Redis:高性能内存数据库与分布式架构设计

标题&#xff1a;[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis&#xff1f;一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构&#xff08;应用程序 数据库服务器&#xff09;2、应用程序和数据库服务器分离3…