Spring AI + DeepSeek-R1 + RAG + Tool Calling:智能对话应用开发全家桶
在 AI 大模型技术飞速发展的当下,如何将这些强大的模型能力落地到实际应用中,成为了开发者们关注的焦点。特别是在企业内部知识库、教育问答系统等场景中,能够实现连续对话的 AI 应用具有巨大的应用价值。今天,我们就来聊聊如何结合 Spring AI、Spring AI Alibaba、DeepSeek-R1 模型、RAG 技术以及,快速搭建一个支持连续对话的 AI 应用。Spring AI 是一个开
一. 概述
在 AI 大模型技术飞速发展的当下,如何将这些强大的模型能力落地到实际应用中,成为了开发者们关注的焦点。特别是在企业内部知识库、教育问答系统等场景中,能够实现连续对话的 AI 应用具有巨大的应用价值。今天,我们就来聊聊如何结合 Spring AI、Spring AI Alibaba、DeepSeek-R1 模型、RAG 技术以及 Tool Calling,快速搭建一个支持连续对话的 AI 应用。
技术介绍
Spring AI:快速构建 AI 应用的框架
Spring AI 是一个开源框架,专注于帮助开发者快速构建对话系统。它提供了丰富的工具和库,从模型训练到应用部署,都能轻松搞定。简单来说,它就像一个“搭积木”的工具箱,让你可以快速拼出一个 AI 应用。
而 Spring AI Alibaba 则是 Spring AI 的扩展模块,专门为阿里巴巴的技术生态量身定制。它能让你轻松连接阿里云的服务,比如 DeepSeek-R1 模型,大大简化了在阿里云环境中开发 AI 应用的流程。换句话说,它就像一个“桥梁”,把 Spring AI 和阿里云的能力无缝连接起来。
阿里云百炼平台:强大的 AI 能力支持
阿里云百炼平台是这次项目的核心支持。它提供了 DeepSeek-R1 模型,一个高性能的 AI 模型,可以处理复杂的对话任务。此外,百炼平台还提供了文本嵌入模型 text-embedding-v2
,用于将文本转化为向量形式,方便进行相似度计算和检索。这种能力在对话系统中特别重要,因为它能帮助我们更精准地找到用户问题的答案。如何申请可以查看 如何 Spring AI 集成百炼平台。
RAG 技术:让对话更精准、更连贯
RAG(检索增强生成)是一种结合检索和生成模型的技术,它能让对话系统从大量文本数据中找到最相关的信息,并将其融入到对话生成中。简单来说,它就像一个“智能助手”,帮助你的 AI 模型更准确地回答问题,同时让对话更连贯、更有信息量。
Tool Calling:AI 模型的高级能力
Tool Calling 是一种让大语言模型调用外部工具的技术。它允许模型通过生成结构化输出来调用工具,即使不实际执行工具调用,也可以使用它来从非结构化文本中提取信息。Tool Calling 的主要优势包括:
- 增强功能:让模型能够执行特定任务,如数学运算、数据查询等。
- 提高效率和准确性:通过调用专门设计的工具,模型可以更快、更准确地完成任务。
- 灵活性和扩展性:可以根据需要调用不同的工具,使得系统具有高度的灵活性和可扩展性。
随着社区中越来越多的大语言模型支持 Tool Calling 能力,它正在逐步取代传统的 Func Calling,成为主流技术。学习和掌握 Tool Calling 技术对于开发者来说至关重要,它将帮助我们更好地利用大语言模型的强大功能,解决实际问题。
二. 环境准备
在开始之前,请确保你的环境满足以下要求:
- 操作系统:Windows 11
- Java 版本:JDK 17+(请注意 Spring Boot 3.4.4 的兼容性)
- 依赖管理:Maven 3.8.3+
- Docker 环境搭建:可以参考上一篇文章:实战:Spring AI + DeepSeek + RAG:快速搭建本地 AI 对话服务,这里面包含了
Docker 安装
,Redis
,Elasticsearch
安装等 - 阿里云百炼平台: 账号申请 后,可以查看到以下模型的选择
三. 功能介绍
- 集成 Spring AI 提供基础框架支持:Spring AI 作为对话系统开发的基础框架,提供了丰富的工具和库,帮助开发者快速搭建、训练和部署基于 AI 模型的应用程序,为整个项目提供了坚实的技术支撑。
- 集成 Spring AI Alibaba,无缝对接阿里百炼平台:通过 Spring AI Alibaba,我们能够轻松调用阿里百炼平台提供的多种 AI 模型,包括高性能的大模型
DeepSeek-R1
和文本嵌入模型text-embedding-v2
。这些模型为对话系统提供了强大的生成能力和精准的向量表示能力。 - 基于 Redis 实现记忆对话功能,并支持多种持久化方案:项目通过 Redis 实现了对话记忆功能,确保对话的连贯性和上下文一致性。同时,我们还提供了基于 Redis 的持久化方案,开发者可以根据需求灵活改造为 MySQL 持久化,或者采用 Redis + MySQL 的混合持久化方案,满足不同场景的需求。
- 通过向量模型与 ElasticSearch 实现本地知识库功能(RAG 技术):本项目采用阿里百炼平台提供的
text-embedding-v2
向量模型和ElasticSearch
数据库,实现了本地知识库功能。通过 RAG 技术,系统能够从知识库中检索相关信息并融入对话生成过程。为了验证 RAG 的功能,我们通过工具生成了一份虚拟的医院介绍(“不爱学习康复医院”),以及 3 个科室介绍(“学不会科”、“学不好科”、“爱学习科”)和 20 位医生的介绍。 - Tool Calling:通过串联场景实现复杂任务的自动化:项目通过模拟以下三个场景,展示了 Tool Calling 技术如何串联整个技术栈的能力:
- 场景 1:通过 RAG 找到医生后,进行挂号
- 场景 2:挂号当日请假
- 场景 3:挂号当日在医院附近找饭店
通过以上功能,本项目实现了从基础框架支持到复杂任务自动化的完整技术链条,包括 Spring AI + Spring AI Alibaba 调用阿里百炼平台、DeepSeek-R1 大模型、连续对话(Redis 实现)、RAG(向量模型 + ElasticSearch 实现)以及 Tool Calling(串联复杂场景)。这些技术的结合为开发者提供了一个强大的 AI 应用开发范例。
四. Spring AI 集成
1. maven的核心依赖
引入Spring Boot、Spring AI、Alibaba Cloud AI等核心依赖,确保项目能够顺利构建和运行。同时,通过配置Maven插件和仓库,优化项目的构建流程和依赖管理。
2. 核心配置(application.yml
)
这里一定要注意的是文本推理模型 model: deepseek-r1
, 嵌入模型model: text-embedding-v2
用来生成文本的向量数据。
说明:在配置文件中,我们设置了服务器端口、Redis连接信息、Elasticsearch地址以及AI模型的相关参数。通过这些配置,项目能够正确连接到各个服务,并使用指定的模型进行对话处理和数据存储。
3. 实现连续对话
控制器层(DeepseekChatController.java
)
说明:该控制器类提供了三个接口,分别用于数据加载、数据检索和连续对话。通过这些接口,用户可以与AI系统进行交互,实现数据的存储、查询和对话功能。其中,/rag/chat接口利用ChatClient和ChatMemory实现了连续对话的核心逻辑。这里提供了3个接口:
数据加载接口(/data/load)
- 功能:将预准备的文本数据加载到系统中。
- 流程:读取文本文件,将内容切分成小段,通过嵌入模型转化为向量,存储到向量存储中。
- 作用:为后续的对话和检索提供数据基础。
数据检索接口(/select)
- 功能:根据用户输入的查询内容,检索最相关的数据。
- 流程:将用户查询转化为向量,在向量存储中搜索相似内容,返回相关结果。
- 作用:快速找到与用户问题最相关的答案。
连续对话接口(/rag/chat)
-
功能:实现多轮连续对话。
-
流程:接收用户消息,结合之前的对话历史(通过ChatMemory获取),调用AI模型生成回复。
- 调用 Spring AI 的 ChatClient
chatClient.prompt()
:创建一个聊天请求的入口。.user(message)
:将用户的消息传递给 AI 模型。.advisors(new MessageChatMemoryAdvisor(chatMemory, userId, 100))
:- 使用
MessageChatMemoryAdvisor
管理对话记忆。 chatMemory
是存储对话上下文的内存对象。userId
是当前用户 ID,用于区分不同用户的对话。100
表示记忆的对话轮次上限,确保对话的连贯性。
- 使用
- 工具调用
.tools(new OaService(), new RestaurantService(), new HospitalService())
:- 注册三个工具服务:
OaService
:用于请假相关的操作。RestaurantService
:用于搜索医院附近的饭店。HospitalService
:用于挂号相关的操作。
- 这些工具将在对话中根据需要被调用。
- 注册三个工具服务:
- 执行调用
.call().content()
:执行 AI 模型的调用,并返回生成的文本内容。
- 返回结果
return text;
:将生成的文本内容返回给客户端。
- 调用 Spring AI 的 ChatClient
-
作用:让AI能够根据上下文生成连贯的回复。
通过这三个接口,DeepseekChatController实现了从数据加载到检索再到连续对话的完整流程,让AI能够高效地与用户互动。
Redis持久化(ChatRedisMemory.java
)
说明:此组件实现了 ChatMemory
接口,利用Redis进行对话历史记录的持久化存储。通过RedisTemplate操作Redis列表,实现了对话记录的添加、获取和清除功能,确保对话上下文能够在多次请求之间保持连贯,从而支持连续对话。
配置类与序列化(RedisConfig.java
)
说明:该配置类用于创建 RedisTemplate Bean
,通过设置不同的序列化方式,确保在与Redis进行数据交互时,键和值能够正确地进行序列化和反序列化操作,从而保证数据的完整性和可读性。
实体类(ChatEntity.java
)
说明:这是一个简单的Java实体类,用于表示对话中的每一条消息记录。包含对话ID、消息类型和消息文本三个属性,通过Lombok的注解自动生成构造方法、getter和setter方法,简化了代码编写。
4. 聊天对话的初始化bean
说明:
- 对话初始化:通过
ChatClient
配置对话规则和风格,确保对话的连贯性和一致性; - 向量检索:结合
QuestionAnswerAdvisor
和VectorStore
,从向量存储中检索相关信息,提升对话的准确性; - 对话记忆:基于 Redis 实现对话记忆,确保对话的上下文一致性。
5. Tool calling 相关服务
医院挂号服务(HospitalService.java
)
办公OA服务(OaService.java
)
6. 启动类(ToolCallingApplication.java
)
说明: 这是Spring Boot应用的启动类,通过 @SpringBootApplication
注解启用Spring Boot的功能,提高应用的性能和效率。
7. 数据准备
五. 测试与验证
环境启动
确保docker部署的redis和ollama服务都正常运行,通过 docker ps
查看
如果没有的话, 可以 通过docker start redis
, docker start elasticsearch
来启动
Spring 服务启动后,我们看看效果吧
我们Spring 项目中,开放了3个接口
六. 总结
通过 Spring AI 整合 DeepSeek-R1、RAG 和 Tool Calling,我们实现了:
-
基于私有知识的精准回答
-
动态工具调用能力
-
企业级可扩展架构
未来可扩展方向:
-
多模态处理能力
-
自动化工具发现机制
-
持续学习与知识更新
写在最后:更多AI学习资料请添加学习助手领取资料礼包
视频学习资料:
从0开始开发超级AI智能体,干掉所有重复工作
- 基于字节的coze平台从0到1搭建我们自己的智能体
- 从coze到超级创业个体:2025是AI Agent大爆炸的元年!
- 搭建智能体的七大步骤:需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估、部署
- 你的智能体如何并行调用多个通用AI大模型?
- 实战案例:AI Agent提取小红书文案以及图像进行OCR文字识别并同步写入飞书多维表格
- 实战案例:AI Agent提取抖音爆款短视频链接中的文案,基于大模型和提示词完成符合小红书风格和作者特点的文案仿写
DeepSeek AI Agent +自动化助力企业实现 AI 改造实战
- DeepSeek 大模型的本地部署与客户端chatbox本地知识库
- 程序员的跨时代产品,AI 代码编辑器cursor深入浅出与项目构建
- 软件机器人工具影刀RPA工业化地基本使用
- 影刀RPA WEB自动化采集Boss直聘岗位信息并存储
- 影刀AI Power与DeepSeek 工作流构建影刀AI Agent
- AI HR实战:结合影刀RPA+DeepSeek AI智能体,实现智能自动招聘机器人
大模型技术+ 数字人+混剪造就副业王炸组合
- 数字人的概念与价值
- 当前数字人的时代背景
- 数字人的市场需求
- 数字人与自媒体的关系和发展路径
- 商业化数字人的变现之路
- 基于coze搭建数字人超级智能体
- 大模型技术+数字人+混剪=最强副业方向
- AI大模型与数字人造就3分钟获客300条精准线索
- AI副业接单渠道与流量变现
- 程序员开发的AI数字人实战
更多推荐
所有评论(0)