一. 概述

在 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 技术对于开发者来说至关重要,它将帮助我们更好地利用大语言模型的强大功能,解决实际问题。

二. 环境准备

在开始之前,请确保你的环境满足以下要求:

三. 功能介绍

  1. 集成 Spring AI 提供基础框架支持:Spring AI 作为对话系统开发的基础框架,提供了丰富的工具和库,帮助开发者快速搭建、训练和部署基于 AI 模型的应用程序,为整个项目提供了坚实的技术支撑。
  2. 集成 Spring AI Alibaba,无缝对接阿里百炼平台:通过 Spring AI Alibaba,我们能够轻松调用阿里百炼平台提供的多种 AI 模型,包括高性能的大模型 DeepSeek-R1 和文本嵌入模型 text-embedding-v2。这些模型为对话系统提供了强大的生成能力和精准的向量表示能力。
  3. 基于 Redis 实现记忆对话功能,并支持多种持久化方案:项目通过 Redis 实现了对话记忆功能,确保对话的连贯性和上下文一致性。同时,我们还提供了基于 Redis 的持久化方案,开发者可以根据需求灵活改造为 MySQL 持久化,或者采用 Redis + MySQL 的混合持久化方案,满足不同场景的需求。
  4. 通过向量模型与 ElasticSearch 实现本地知识库功能(RAG 技术):本项目采用阿里百炼平台提供的 text-embedding-v2 向量模型和 ElasticSearch 数据库,实现了本地知识库功能。通过 RAG 技术,系统能够从知识库中检索相关信息并融入对话生成过程。为了验证 RAG 的功能,我们通过工具生成了一份虚拟的医院介绍(“不爱学习康复医院”),以及 3 个科室介绍(“学不会科”、“学不好科”、“爱学习科”)和 20 位医生的介绍。
  5. 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;:将生成的文本内容返回给客户端。
  • 作用:让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 redisdocker start elasticsearch来启动

Spring 服务启动后,我们看看效果吧

我们Spring 项目中,开放了3个接口

六. 总结

通过 Spring AI 整合 DeepSeek-R1、RAG 和 Tool Calling,我们实现了:

  1. 基于私有知识的精准回答

  2. 动态工具调用能力

  3. 企业级可扩展架构

未来可扩展方向:

  • 多模态处理能力

  • 自动化工具发现机制

  • 持续学习与知识更新

 写在最后:更多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数字人实战

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐