Spring AI ChatClient集成Deepseek

下文将简述如何通过spring ai集成deepseek实现智能对话。在开始之前你需要在deepseek官网申请一个apikey,并设置到系统变量中,保障安全性。

ChatModel

在集成deepseek前,我们先要了解一个chat model,chat model是spring 集成的各大大语言模型,比如deepseek就有DeepSeekChatModel,openAI就有openAIChatModel;各自大模型的chatModel继承了spring ai的chatModel类,并重写了call方法和stream用于调用大模型。只需要添加相应配置,再调用chatModel就可实现调用。
在这里插入图片描述

Spring ai 1.0.1版本集成的大模型

目前版本支持的大模型如下
在这里插入图片描述
每种大模型的依赖都很相似,如引入openai,artifactId 就是spring-ai-starter-model-openai,引入deepseek,就是spring-ai-starter-model-deepseek

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>

Chat Client

chat client是Spring ai提供统一调用大模型的对象,通过ChatClient.Builder可以指定chatModel类型。

import org.springframework.ai.chat.ChatClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ChatClientConfig {@Beanpublic ChatClient openAiChatClient(OpenAiChatModel chatModel) {return ChatClient.create(chatModel);}@Beanpublic ChatClient anthropicChatClient(AnthropicChatModel chatModel) {return ChatClient.create(chatModel);}
}

以上简要介绍了一下Chat model和Chat client 下面正式介绍代码实现。

1.引入依赖

spring 提供了chatModel

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>3.5.3</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-deepseek</artifactId></dependency></dependencies>     <dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><repositories><repository><id>spring-milestones</id><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository><repository><name>Central Portal Snapshots</name><id>central-portal-snapshots</id><url>https://central.sonatype.com/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>

2.添加配置

在application.yml/properties中,只需要配置api-key就可以了, base-url和model都已经默认帮你配置了

spring:application:name: deepseekTestai:deepseek:api-key: ${DEEPSEEK_API_KEY}  

3.新增测试类测试代码

DeepSeekChatModel 如果默认的baseurl和model满足你的需求,只需要自动注入即可;不满足可以定义配置类,设置对应参数。通过 ChatClient.builder(deepSeekChatModel) .build();
就可以构建一个ChatCilent,并通过prompt传输问题,prompt有两种构造器,一种是直接传输String 字符串,一种是new Prompt对象。client提供了call和stream两种格式。
call一次性返回所有文本:
String content = client.prompt("你好") .call().content();
stream是流式输出,数据类型是Flux:
Flux<String> flux = client.prompt(new Prompt("你好,你是谁")) .stream().content();
要使用flux需要引入webflux相关依赖 。
完整代码如下:

@SpringBootTest
public class DeepseekTest {@Autowiredprivate DeepSeekChatModel deepSeekChatModel;@Testpublic void testCall() {ChatClient client = ChatClient.builder(deepSeekChatModel).build();String content = client.prompt("你好").call().content();System.out.println(content);}@Testpublic void testStream() {ChatClient client = ChatClient.builder(deepSeekChatModel).build();Flux<String> flux = client.prompt(new Prompt("你好,你是谁")).stream().content();flux.toIterable().forEach(System.out::print);}
}

4.测试结果

调用call方法:
在这里插入图片描述
调用stream方法:
在这里插入图片描述

以上简单的操作步骤就可以接入deepseek实现智能对话了!

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

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

相关文章

Azure微软云内网接入问题

1. 域名解析失败 azure需要给ClientSecretCredentialBuilder和AzureResourceManager都配置HTTP 代理,但还是会域名解析失败,netty会调用InetAddress.getByName解析域名.最终只能在hosts文件写死host和ip映射关系 2. netty版本不匹配,导致报错netty某个方法找不到 azure只用引入…

【IDEA】设置Debug调试时调试器不进入特定类(Spring框架、Mybatis框架)

问题 以Ruoyi-Vue项目为例&#xff0c;以Debug方式启动项目&#xff0c;在com.ruoyi.web.controller.system.SysUserController#list()方法中的userService.selectUserList(user)处打上断点&#xff0c;访问[系统管理–用户管理]页面&#xff0c;程序就会执行到该断点处此时按下…

OpenCV 视频处理全解析

OpenCV 视频处理全解析&#xff1a;从基础操作到高级应用​在计算机视觉领域&#xff0c;视频处理是一个核心且广泛应用的技术方向。无论是安防监控、自动驾驶还是短视频特效&#xff0c;都离不开对动态视频流的智能分析与处理。OpenCV 作为最流行的开源计算机视觉库&#xff0…

java如何使用正则提取字符串中的内容

在Java中使用正则表达式提取字符串内容&#xff0c;主要通过java.util.regex包中的Pattern和Matcher类实现。以下是详细步骤和示例&#xff1a;1. 基础流程 import java.util.regex.Matcher; import java.util.regex.Pattern;public class RegexExample {public static void ma…

Baumer高防护相机如何通过YoloV8深度学习模型实现行人跌倒的检测识别(C#代码UI界面版)

《------往期经典推荐------》 AI应用软件开发实战专栏【链接】 序号项目名称项目名称11.工业相机 YOLOv8 实现人物检测识别&#xff1a;&#xff08;C#代码&#xff0c;UI界面版&#xff09;2.工业相机 YOLOv8 实现PCB的缺陷检测&#xff1a;&#xff08;C#代码&#xff0…

jetson orin nx(8G)烧录super系统实录

1. 说明 2. 下载新版发布包&#xff08;在PC上下载&#xff09; Jetson Linux Archive | NVIDIA Developer 安装的jetpack版本为6.2.1&#xff08;rev.2)对应的Jetson Linux 36.4.4 点击绿色区域的36.4.4>&#xff0c;进入下载页面&#xff0c;如下 点击Driver Package(B…

LeetCode算法日记 - Day 11: 寻找峰值、山脉数组的峰顶索引

目录 1. 寻找峰值 1.1 题目解析 1.2 解法 1.3 代码实现 2. 山脉数组 2.1 题目解析 2.2 解法 2.3 代码实现 1. 寻找峰值 162. 寻找峰值 - 力扣&#xff08;LeetCode&#xff09; 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰…

Cherryusb UAC例程对接STM32 SAI播放音乐和录音(下)=>USB+SAI+TX+RX+DMA控制WM8978播放和录音实验

1. 程序基本框架 整个程序框架, 与之前的一篇文章《Cherryusb UAC例程对接STM32内置ADC和DAC播放音乐和录音(中)>UACSTM32 ADCDAC实现录音和播放》基本一致, 只是这次将ADC和DAC替换成了SAI TX/RX。因此这里不再赘述了。2. sai_dma_wm8978_usb.c主程序的实现说明 在menuconf…

Docker运行python项目:使用Docker成功启动FastAPI应用

根据昨天成功使用阿里云镜像加速后&#xff0c;我是根据windows本地的python项目&#xff0c;直接传到了centos&#xff0c;然后再导入到docker里面&#xff0c;然后进行运行&#xff0c;主要是发现运行的时候&#xff0c;老是提示一些库的问题&#xff0c;还有就是一些python老…

PowerShell来关闭 Windows 安全中心

你可以使用 PowerShell 来关闭 Windows 安全中心的盾牌图标&#xff08;通知&#xff09;。以下是几种方法&#xff0c;包括禁用通知、关闭 Windows Defender&#xff08;不推荐&#xff09;或调整注册表。方法 1&#xff1a;禁用 Windows 安全中心通知&#xff08;推荐&#x…

基于深度学习的老照片修复系统

背景随着时间的推移&#xff0c;老照片可能会因褪色、损坏或曝光不当而影响其视觉质量。这些珍贵的影像承载着历史和回忆&#xff0c;但由于物理损耗&#xff0c;它们的观赏价值和可读性逐渐下降。为了恢复这些照片的清晰度和色彩&#xff0c;本项目采用深度学习与先进的图像处…

深入解析Tomcat目录结构

Apache Tomcat 是一个强大的 Servlet 容器,它不仅支持 Java Servlet 和 JSP 技术,还提供了丰富的功能来帮助开发者构建和部署动态的 Web 应用。为了更好地理解和使用 Tomcat,了解其文件结构和组成部分是至关重要的。本文将深入探讨 Tomcat 的目录结构及其各个组件的作用。 …

专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载

原文链接&#xff1a;https://tecdat.cn/?p43595 当618大促的硝烟散去&#xff0c;抖音电商的生态分化愈发刺眼&#xff1a;服饰内衣以27.5%的份额稳坐头把交椅&#xff0c;而无数中小商家却在“流量荒”中挣扎。这场看似繁荣的盛宴里&#xff0c;平台规则如同无形的手&#x…

3.Ansible自动化之-编写和运行playbook

3.Ansible编写和运行 Playbook Playbook 介绍 如果把 Ansible 的ad-hoc命令比作 “一次性脚本”&#xff08;适合临时执行单个简单任务&#xff09;&#xff0c;那么Playbook就是 “可重复执行的程序”&#xff08;适合复杂、多步骤的管理流程&#xff09;。 举个例子&#…

Vue实时刷新,比如我提交审核,审核页面还需要点查询才能看到最新数据

refreshTimer: null,lastRefreshTime: null}; }, created() {console.log(组件创建&#xff0c;初始化数据...);this.loadLatestData();this.setupAutoRefresh(); }, activated() {// 当使用keep-alive时&#xff0c;组件激活时刷新数据console.log(组件激活&#xff0c;刷新数…

Docker入门:容器化技术的第一堂课

Docker入门&#xff1a;容器化技术的第一堂课 &#x1f31f; 你好&#xff0c;我是 励志成为糕手 &#xff01; &#x1f30c; 在代码的宇宙中&#xff0c;我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光&#xff0c;在逻辑的土壤里生长成璀璨的银河&#…

【SLAM】不同相机模型及其常见的链式求导推导

【SLAM】不同相机模型及其常见的链式求导推导1. 鱼眼相机模型链式求导1. 鱼眼相机畸变模型2. 雅可比矩阵的推导畸变坐标相对于归一化坐标的雅可比矩阵 Hdz/dznH_{dz/dzn}Hdz/dzn​畸变坐标相对于相机内参的雅可比矩阵 Hdz/dzetaH_{dz/dzeta}Hdz/dzeta​3. 注意4. 输入输出含义5…

【人工智能】本地部署 KTransformers并加载大模型笔记

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

TDengine IDMP 高级功能(3. 概念解释)

枚举集 为提升数据的可阅读性&#xff0c;IDMP 为数据提供枚举类型。您可以将一些整型数定义为一具有可读性的字符串。与其他软件一样&#xff0c;您可以定义多个枚举集&#xff0c;每个枚举集可以有多个枚举量。您可以增加、删除、修改、查询枚举集与枚举量。 但独特的是&am…

CUDA 入门教程(GPT优化版)

学习路径 一、环境准备与快速入门 搭建开发环境 ○ 安装 CUDA Toolkit,适用于 Windows(如 Visual Studio)或 Linux,确保你的设备为 NVIDIA GPU 并支持 CUDA。(wholetomato.com) ○ 如果你偏好轻量工具,也可用 VS Code + Nsight 开发环境进行 CUDA 编程。(wholetomato.com)…