冰河技术
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
导读
♻学习路线
  • 面试必问系列

    • 面试必问
  • 架构与模式

    • Java极简设计模式
    • 实战高并发设计模式
  • Java核心技术

    • Java8新特性
    • IOC核心技术
    • JVM调优技术
  • 容器化核心技术

    • Dockek核心技术
  • 分布式存储

    • Mycat核心技术
  • 数据库核心技术

    • MySQL基础篇
  • 服务器核心技术

    • Nginx核心技术
  • 渗透核心技术

    • 渗透实战技术
  • 底层技术
  • 源码分析
  • 基础案例
  • 实战案例
  • 面试
  • 系统架构
  • Spring6核心技术
  • 分布式事务

    • 分布式事务系列视频
  • SpringBoot
  • SpringCloudAlibaba
  • 🔥AI大模型项目

    • 一站式AI智能平台
    • AI智能客服系统
    • AI智能问答系统
    • 实战AI大模型
  • 中间件项目

    • 手写高性能Redis组件
    • 手写高性能脱敏组件
    • 手写线程池项目
    • 手写高性能SQL引擎
    • 手写高性能Polaris网关
    • 手写高性能RPC项目
  • 高并发项目

    • 分布式IM即时通讯系统(新)
    • 分布式Seckill秒杀系统
    • 实战高并发设计模式
  • 微服务项目

    • 简易电商脚手架项目
  • 手撕源码

    • 手撕Spring6源码
🌍知识星球
  • 总览

    • 《书籍汇总》
  • 出版图书

    • 《深入理解高并发编程:核心原理与案例实战》
    • 《深入理解高并发编程:JDK核心技术》
    • 《深入高平行開發:深度原理&專案實戰》
    • 《深入理解分布式事务:原理与实战》
    • 《MySQL技术大全:开发、优化与运维实战》
    • 《海量数据处理与大数据技术实战》
  • 电子书籍

    • 《实战高并发设计模式》
    • 《深入理解高并发编程(第2版)》
    • 《深入理解高并发编程(第1版)》
    • 《从零开始手写RPC框架(基础篇)》
    • 《SpringCloud Alibaba实战》
    • 《冰河的渗透实战笔记》
    • 《MySQL核心知识手册》
    • 《Spring IOC核心技术》
  • 关于自己
  • 关于学习
  • 关于职场
B站
Github
  • 开篇:专栏介绍

    • 开篇:实战AI大模型专栏正式开撸
  • 第01部分:DeepSeek API实战

    • 第01节:实战Java和Python调用DeepSeek API
    • 第02节:DeepSeek API流式调用实战
    • 第03节:基于SpringAI实现智能问答系统
  • 第02部分:部署AI大模型

    • 第01节:DeepSeek本地部署+知识库+联网搜索
    • 第02节:DeepSeek R1蒸馏模型组本地部署与调用
    • 第03节:DeepSeek R1蒸馏模型组Ollama调用
    • 第04节:基于Windows系统部署DeepSeek多模态生成模型
    • 第05节:基于Ubuntu系统部署DeepSeek多模态生成模型
    • 第06节:基于Ollama+OpenWebUI和DeepSeek-R1本地部署AI对话系统
    • 第07节:Sealos Cloud+K8S一键脚本部署
    • 第08节:私有化部署Sealos Cloud+Devbox+Minio
  • 第03部分:生成AI应用

    • 第01节:构建生成式AI应用-安装Ollama+Dify
    • 第02节:构建生成式AI应用-接入DeepSeek大模型
    • 第03节:通过Ollama+Dify+DeepSeek+searxng创建Agent应用
    • 第04节:通过Ollama+Dify+Qwen3创建Agent应用
    • 第05节:通过Dify实现构建AI图片生成应用
    • 第06节:基于Dify+llama3+Stable Diffusion搭建AI图片生成应用
    • 第07节:基于Dify+deepseekR1搭建文章理解助手
    • 第08节:基于Dify+deepseekR1搭建智能客服机器人
    • 第09节:基于MCP插件加入高德地图MCP Server
    • 第10节:搭建云IDE平台并安装Dify
    • 第11节:基于ACE-Step搭建生成式AI音乐应用
  • 第04部分:AI数字人应用

    • 第01节:实践QEMU-KVM 虚拟化
    • 第02节:基于Dify chatflow工作流生成专业级提示词
    • 第03节:基于Awesome-Digital-Human-Live打造AI数字人
    • 第04节:基于多个大模型改写数字人应用(代码版)
    • 第05节:基于开源数字人硅基heygem生成AI数字人
  • 第05部分:增强与优化

    • 第01节:增强优化ComfyUI并安装插件
    • 第02节:从源码到Docker部署Qwen3-VL接口
    • 第03节:分离部署Duix.Avatar服务端和客户端
  • 专栏总结

    • 总结:实战AI大模型整体专栏总结

《实战AI大模型》DeepSeek API实战-第03节:基于SpringAI实现智能问答系统

作者:冰河
星球:http://m6z.cn/6aeFbs
博客:https://binghe.site
文章汇总:https://binghe.site/md/all/all.html
源码获取地址:https://t.zsxq.com/0dhvFs5oR

大家好,我是冰河~~

在人工智能技术迅猛发展的今天,大语言模型正在深刻改变着人机交互的方式。然而对于广大Java开发者而言,如何将先进的AI能力快速、高效地集成到现有的Spring生态系统中,仍然面临着不小的挑战。今天,带着大家使用Spring AI构建一个功能完备的简单智能问答系统。

Spring AI作为Spring官方推出的AI集成框架,为开发者提供了统一、简洁的抽象层,极大地简化了AI能力的集成复杂度。无论是为现有业务系统添加智能客服功能,还是构建全新的AI驱动型应用,都可以使用SpringAI实现。

一、环境准备

1.1 项目依赖

首先,创建一个Spring Boot项目,并添加必要的依赖

<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <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>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-core</artifactId>
        <version>1.0.0-M6</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
        <version>1.0.0-M6</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
    </dependency>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.25</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

1.2 配置API密钥

在application.yml中配置API密钥

server:
  port: 5555

spring:
  ai:
    openai:
      api-key: sk-xxxxx # 替换成自己的硅基流动API密钥
      base-url: https://api.siliconflow.cn/
      embedding:
        options:
          model: BAAI/bge-m3
      chat:
        options:
          model: deepseek-ai/DeepSeek-V3

注意:为了安全起见,建议通过环境变量注入API密钥,而不是直接硬编码在配置文件中。

二、核心代码实现

2.1 主应用类

创建Spring Boot应用的入口类

源码详见:deepseek-case-qa-01工程下的io.binghe.framework.deepseek.qa.QaApplication。

@SpringBootApplication
public class QaApplication {

    public static void main(String[] args) {
        SpringApplication.run(QaApplication.class, args);
    }

    @Bean
    public ChatClient chatClient(OpenAiChatModel model){
        return ChatClient
                .builder(model)
                .build();
    }

    @Bean
    public VectorStore vectorStore(EmbeddingModel embeddingModel) {
        VectorStore vectorStore = SimpleVectorStore.builder(embeddingModel).build();

        // 构建测试数据
        List<Document> documents =
                List.of(new Document("Hello Spring AI"),
                        new Document("Hello Spring Boot"));
        // 添加到向量数据库
        vectorStore.add(documents);

        return vectorStore;
    }
}

2.2 请求模型

创建一个简单的模型类来封装问题请求。

源码详见:deepseek-case-qa-01工程下的io.binghe.framework.deepseek.qa.request.QuestionRequest。

@Data
public class QuestionRequest {
    private String question;
    private String sessionId;
}

2.3 问答服务

实现问答核心服务。

源码详见:deepseek-case-qa-01工程下的io.binghe.framework.deepseek.qa.service.QaService。

@Service
public class QaService {

    private final ChatClient chatClient;
    private final PromptTemplate promptTemplate;

    @Autowired
    public QaService(ChatClient chatClient) {
        this.chatClient = chatClient;
        // 创建一个提示模板,指导AI如何回答问题
        this.promptTemplate = new PromptTemplate("""
            你是一个智能问答助手,请简洁、准确地回答用户的问题。
            如果你不知道答案,请直接说不知道,不要编造信息。
            
            用户问题: {question}
            
            回答:
            """);
    }

    public String getAnswer(String question) {
        // 准备模板参数
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("question", question);

        // 创建提示
        Prompt prompt = promptTemplate.create(parameters);

        // 调用AI获取回答
        return chatClient.prompt(prompt).call().content();
    }
}

2.4 添加对话历史

支持多轮对话。

源码详见:deepseek-case-qa-01工程下的io.binghe.framework.deepseek.qa.service.ConversationService。

@Service
public class ConversationService {

    private final ChatClient chatClient;

    private final Map<String, List<Message>> conversations = new ConcurrentHashMap<>();

    @Autowired
    public ConversationService(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    public String chat(String sessionId, String userMessage) {
        // 获取或创建会话历史
        List<Message> messages = conversations.computeIfAbsent(sessionId, k -> new ArrayList<>());

        // 添加用户消息
        messages.add(new UserMessage(userMessage));

        // 创建带有历史上下文的提示
        Prompt prompt = new Prompt(messages);

        // 调用AI
        String response = chatClient.prompt(prompt).call().content();

        // 保存AI回复
        messages.add(new AssistantMessage(response));

        // 管理会话长度,避免超出Token限制
        if (messages.size() > 10) {
            messages = messages.subList(messages.size() - 10, messages.size());
            conversations.put(sessionId, messages);
        }

        return response;
    }

    public void clearConversation(String sessionId) {
        conversations.remove(sessionId);
    }
}

2.5 添加知识库集成

使用向量存储和检索增强生成(RAG)。

源码详见:deepseek-case-qa-01工程下的io.binghe.framework.deepseek.qa.service.KnowledgeBaseQaService。

查看完整文章

加入冰河技术知识星球,解锁完整技术文章、小册、视频与完整代码

在 GitHub 上编辑此页
上次更新: 2026/4/29 16:18
Contributors: binghe001
Prev
第02节:DeepSeek API流式调用实战
阅读全文
×

扫码或搜索:冰河技术
发送:290992
即可立即永久解锁本站全部文章

星球会员
跳转链接