部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

原创
作者头像
全干程序员demo
发布于 2025-03-18 01:36:13
发布于 2025-03-18 01:36:13
5580
举报
文章被收录于专栏:技术热文技术热文

20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

前言

在生成式AI技术蓬勃发展的今天,大语言模型已成为企业智能化转型和个人效率提升的核心驱动力。作为国产大模型的优秀代表,DeepSeek凭借其卓越的中文语义理解能力和开发者友好的API生态,正在成为构建本土化AI应用的首选平台。本文将以Spring Boot3+Vue2全栈技术为基础,手把手带你打造一个具备以下特性的AI对话系统:

  • 实时流式对话交互体验;
  • 支持Markdown代码块/表格的专业级内容渲染;
  • 前端安全防护与响应式界面设计;
  • 高扩展性的API接入架构。

为什么选择DeepSeek

  • 中文语境专家:针对中文语法特点优化,歧义识别准确率提升40%;
  • 极速响应:国内服务器部署,平均API延迟<800ms;
  • 成本可控:免费试用+阶梯定价模式,个人项目月均成本低至5元;
  • 流式输出:支持chunked数据传输,避免用户长时间等待。

技术架构解析

后端技术栈

  • SpringBoot 3.x:快速构建RESTful API
  • WebFlux:响应式流处理框架,QPS可达3000+;
  • Lombok:通过注解简化POJO模型。

前端技术栈

  • Vue2.x
  • WebSocket:双向实时通信支持;
  • XSS防御:DOMPurify过滤恶意脚本。

环境准备

  • JDK 17+;
  • Node.js 12+;
  • Maven 3.9+;
  • Ollama。

后端项目初始化

pom依赖

代码语言:xml
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.8</version>
    <relativePath/><!-- lookup parent from repository -->
</parent>
<groupId>cn.com.codingce</groupId>
<artifactId>deepseek</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>deepseek</name>
<url/>
<licenses>
    <license/>
</licenses>
<developers>
    <developer/>
</developers>
<scm>
    <connection/>
    <developerConnection/>
    <tag/>
    <url/>
</scm>
<properties>
    <java.version>17</java.version>
    <spring-ai.version>1.0.0-M5</spring-ai.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-bom</artifactId>
        <version>${spring-ai.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
</project>

yml配置文件

代码语言:yml
AI代码解释
复制
server:
  port: 8080
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:8b
  application:
    name: codingce-deepspeek
  webflux:
    base-path: /
  codec:
    max-in-memory-size: 10MB
logging:
  level:
    cn.com.codingce.deepseek: DEBUG
    org.springframework.web: INFO

核心服务实现

DeepSeekService 是一个核心服务类,主要负责处理与 Ollama 的通信和数据处理。整个服务采用响应式编程模式(Flux),实现非阻塞式处理,提高系统性能。同时通过日志记录,确保服务的可靠性和稳定性。

代码语言:java
AI代码解释
复制
package cn.com.codingce.deepseek.service;

import cn.com.codingce.deepseek.model.Message;
import cn.com.codingce.deepseek.model.MessageType;
import cn.com.codingce.deepseek.model.OllamaResponse;
import cn.com.codingce.deepseek.model.StreamResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.ollama.OllamaClient;
import org.springframework.ai.ollama.OllamaException;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Service
@AllArgsConstructor
@Slf4j
public class DeepSeekService {
    private final OllamaClient ollamaClient;
    private final ObjectMapper objectMapper;

    public Flux<Message> generateResponse(String prompt) {
        return Flux.create(sink -> {
            List<String> messages = new ArrayList<>();
            messages.add(prompt);

            try {
                ollamaClient.chat("deepseek-r1:8b", messages, response -> {
                    try {
                        OllamaResponse ollamaResponse = objectMapper.readValue(response, OllamaResponse.class);
                        String content = ollamaResponse.getContent();
                        if (content != null && !content.isEmpty()) {
                            sink.next(new Message(MessageType.ASSISTANT, content));
                        }
                    } catch (IOException e) {
                        log.error("Error processing Ollama response", e);
                        sink.error(e);
                    }
                }, error -> {
                    log.error("Error from Ollama", error);
                    sink.error(new RuntimeException("Error from Ollama", error));
                }, () -> {
                    log.info("Ollama chat completed");
                    sink.complete();
                });
            } catch (OllamaException e) {
                log.error("Error initiating Ollama chat", e);
                sink.error(e);
            }
        });
    }
}

WebSocket控制器

WebSocketController 是一个 WebSocket 控制器,用于处理前端与后端之间的实时通信。它支持消息的接收和发送,并将用户的消息传递给 DeepSeekService,然后将 AI 的响应实时推送给前端。

代码语言:java
AI代码解释
复制
package cn.com.codingce.deepseek.controller;

import cn.com.codingce.deepseek.model.Message;
import cn.com.codingce.deepseek.service.DeepSeekService;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;
import reactor.core.publisher.FluxSink;

import java.util.concurrent.ConcurrentHashMap;

@Controller
public class WebSocketController {
    private final DeepSeekService deepSeekService;
    private final ConcurrentHashMap<String, FluxSink<Message>> sinks = new ConcurrentHashMap<>();

    public WebSocketController(DeepSeekService deepSeekService) {
        this.deepSeekService = deepSeekService;
    }

    @MessageMapping("/chat")
    public void receiveMessage(String sessionId, String message) {
        sinks.putIfAbsent(sessionId, Flux.sink());
        FluxSink<Message> sink = sinks.get(sessionId);

        deepSeekService.generateResponse(message)
                .subscribe(sink::next, sink::error, sink::complete);
    }

    @SendTo("/topic/messages/{sessionId}")
    public Flux<Message> sendMessage(String sessionId) {
        return Flux.create(sinks.get(sessionId));
    }
}

前端项目初始化

项目结构

前端项目基于 Vue2 构建,主要包含以下目录结构:

代码语言:txt
AI代码解释
复制
src/
├── assets/
├── components/
│   └── ChatWindow.vue
├── App.vue
├── main.js

安装依赖

在项目根目录下运行以下命令安装依赖:

代码语言:bash
AI代码解释
复制
npm install

主组件

App.vue 是主组件,用于加载聊天窗口组件。

代码语言:vue
AI代码解释
复制
<template>
  <div id="app">
    <ChatWindow />
  </div>
</template>

<script>
import ChatWindow from './components/ChatWindow.vue';

export default {
  name: 'App',
  components: {
    ChatWindow
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

聊天窗口组件

ChatWindow.vue 是聊天窗口组件,负责显示消息和处理用户输入。

代码语言:vue
AI代码解释
复制
<template>
  <div class="chat-window">
    <div class="messages">
      <div v-for="message in messages" :key="message.id" class="message">
        <div :class="['message-content', { 'assistant': message.type === 'assistant' }]">
          <div v-html="message.content"></div>
        </div>
      </div>
    </div>
    <input v-model="inputMessage" @keyup.enter="sendMessage" placeholder="Type a message..." />
  </div>
</template>

<script>
import { WebSocketSubject } from 'rxjs/webSocket';
import DOMPurify from 'dompurify';

export default {
  name: 'ChatWindow',
  data() {
    return {
      messages: [],
      inputMessage: '',
      sessionId: Date.now().toString(),
      ws: null
    };
  },
  mounted() {
    this.connectWebSocket();
  },
  methods: {
    connectWebSocket() {
      this.ws = new WebSocketSubject(`ws://localhost:8080/ws/chat/${this.sessionId}`);
      this.ws.subscribe(
        (message) => {
          const sanitizedMessage = DOMPurify.sanitize(message.content);
          this.messages.push({ ...message, content: sanitizedMessage });
        },
        (error) => console.error('WebSocket error:', error),
        () => console.log('WebSocket closed')
      );
    },
    sendMessage() {
      if (this.inputMessage.trim()) {
        this.ws.next(this.inputMessage);
        this.messages.push({ id: Date.now(), type: 'user', content: this.inputMessage });
        this.inputMessage = '';
      }
    }
  },
  beforeDestroy() {
    if (this.ws) {
      this.ws.complete();
    }
  }
};
</script>

<style scoped>
.chat-window {
  width: 100%;
  max-width: 600px;
  margin: 0 auto;
  border: 1px solid #ccc;
  padding: 10px;
  border-radius: 5px;
}

.messages {
  height: 400px;
  overflow-y: scroll;
  margin-bottom: 10px;
}

.message {
  margin-bottom: 10px;
}

.message-content {
  padding: 5px;
  border-radius: 5px;
}

.message-content.assistant {
  background-color: #f0f0f0;
}

input {
  width: 100%;
  padding: 10px;
  box-sizing: border-box;
}
</style>

运行项目

启动后端

在后端项目启动 Spring Boot 应用

启动前端

在前端项目根目录下运行以下命令启动 Vue 项目:

代码语言:bash
AI代码解释
复制
npm run serve

打开浏览器,访问 http://localhost:8080,即可看到聊天窗口。输入消息后,即可与 AI 进行实时对话。

希望这篇文章能帮助你快速上手 DeepSeek 开发,开启你的 AI 应用构建之旅!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring AI + DeepSeek:轻松打造你的第一个 AI 应用
在当今数字化时代,人工智能(AI)已成为推动技术进步和创新的核心力量。从智能语音助手到图像识别系统,从个性化推荐引擎到自动化流程,AI 的应用无处不在,正深刻地改变着我们的生活和工作方式。
用户1220090
2025/02/27
7190
Spring AI + DeepSeek:轻松打造你的第一个 AI 应用
SpringAI+Ollama三部曲之二:细说开发
程序员欣宸
2024/05/26
2.4K0
SpringAI+Ollama三部曲之二:细说开发
Spring AI集成DeepSeek
随着Spring Boot的流行,越来越多的开发者选择利用其快速开发和简化配置的优势,构建企业级应用。Spring Boot通过自动化配置和高度的模块化,使得开发者可以更快速地实现业务功能。而Spring AI作为Spring生态的一部分,提供了与人工智能技术结合的能力,可以帮助开发者轻松将AI能力集成到Spring Boot项目中。
有一只柴犬
2025/02/23
9150
Spring AI集成DeepSeek
干货:DeepSeek+SpringAI实现流式对话!
前面一篇文章我们实现了《炸裂:SpringAI内置DeepSeek啦!》,但是大模型的响应速度通常是很慢的,为了避免用户用户能够耐心等待输出的结果,我们通常会使用流式输出一点点将结果输出给用户。
磊哥
2025/02/14
1K0
干货:DeepSeek+SpringAI实现流式对话!
Spring AI调用Ollama+DeepSeek
ChatClient 是一个接口,它定义了一个与聊天服务交互的客户端。这个接口主要用于创建聊天客户端对象,设置请求规范,以及发起聊天请求。
鱼找水需要时间
2025/06/02
1850
Spring AI调用Ollama+DeepSeek
SpringBoot系列之Spring AI+DeekSeek创建AI应用
随着人工智能技术的飞速发展,AI 已经成为现代软件应用中不可或缺的一部分。从智能对话系统到内容生成工具,AI 的应用场景日益丰富。Spring AI 是 Spring 官方推出的用于简化 AI 集成的框架,而 DeepSeek 是一个强大的 AI 平台,提供了高效、灵活的语言模型和 API 接口。通过将 Spring AI 与 DeepSeek 结合,开发者可以在 Spring Boot 应用中快速实现智能对话、文本生成等 AI 功能。
SmileNicky
2025/03/04
1.7K2
SpringBoot系列之Spring AI+DeekSeek创建AI应用
炸裂:SpringAI内置DeepSeek啦!
好消息,Spring AI 最新快照版已经内置 DeepSeek 了,所以以后项目中对接 DeepSeek 就方便多了。但因为快照版会有很多 Bug,所以今天咱们就来看稳定版的 Spring AI 如何对接 DeepSeek 满血版。
磊哥
2025/02/13
5160
炸裂:SpringAI内置DeepSeek啦!
Spring 宣布接入 DeepSeek!!
https://api-docs.deepseek.com/zh-cn/updates
码农编程进阶笔记
2025/02/25
1800
Spring 宣布接入 DeepSeek!!
langchain4j+springboot流式输出
dev/langchain4j/ollama/spring/AutoConfig.java
code4it
2025/02/24
1.1K0
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
程序员皮皮林
2024/10/23
2130
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
使用Spring AI调用AI模型
Spring AI是Spring框架对人工智能和机器学习的支持模块,它提供了一套简单易用的API来集成各种AI服务和模型。
阿珍
2025/03/27
4500
使用Spring AI调用AI模型
springAI初体验 让人人都能跑大模型
他们的设计理念是:为开发人员提供一个抽象接口,为将生成式AI作为独立组件纳入应用奠定基础
用户10143704
2024/04/05
1.1K0
实现免费ChatGPT前后端SpringBoot&Vue
第四步:复制密钥值,替换上面代码中的sk-*******,替换后的代码如下所示:.header(“Authorization”, “Bearer sk-1234567890123456789”)
知识浅谈
2024/05/25
3780
实现免费ChatGPT前后端SpringBoot&Vue
Spring Boot + WebSocket 实现 IM 即时通讯
即时通讯(IM)已经成为现代应用中不可或缺的一部分,从社交媒体到企业协作工具,无不依赖于IM技术来实现实时消息传递。本文将介绍如何使用Spring Boot和WebSocket实现一个简单的即时通讯系统。
IT_陈寒
2025/06/01
1830
Spring Boot + WebSocket 实现 IM 即时通讯
SpringBoot3-整合WebSocket
WebSocket 是一种网络通信协议,提供全双工通信通道,使服务器可以主动向客户端推送数据。与传统的 HTTP 请求-响应模式不同,WebSocket 在建立连接后,允许服务器和客户端之间进行双向实时通信。
CoderJia
2024/12/16
4160
SpringBoot3-整合WebSocket
AI大模型进阶系列(02)基于Spring AI实现AI chatbot助理|一句话让deepseek实现demo
最近AI程序员非常火热,在AI coding rank上,国际大模型排名靠前的是claude 3.7 sonnet、gemini-2.5、还有deepseek v3。在编程领域,国内的混元、通义、豆包背后的金主也在积极布局AI coding 助手。未来万物皆可AI的局面将百花齐放,大幅提升各行各业的效率。
拉丁解牛说技术
2025/04/08
4490
AI大模型进阶系列(02)基于Spring AI实现AI chatbot助理|一句话让deepseek实现demo
Spring AI、DeepSeek 与 MCP:对话驱动的接口查询新范式
开篇 随着人工智能技术的飞速发展,我们正步
磊叔的技术博客
2025/06/09
2840
Spring AI、DeepSeek 与 MCP:对话驱动的接口查询新范式
Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
最近DeepSeek开源了对openai-o1的第一代开源推理大模型:deepseek-r1,因其极低的成本和与openai-o1相当的性能引发了国内外的激烈讨论。
程序猿DD
2025/02/10
1K1
Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
使用腾讯云知识引擎接入满血DeepSeek-R1打造您专属的个人知识库
最近的DeepSeek好火,它是由杭州深度求索人工智能基础技术研究有限公司出品的一款先进的人工智能产品。DeepSeek以其强大的技术实力和创新应用,迅速在人工智能领域崭露头角,成为行业关注的焦点。
半月无霜
2025/03/06
2080
DeepSeek全链路开发指南:从零搭建智能问答系统到API无缝对接【内含知识库实战】
DeepSeek凭借其强大的推理能力形成了破圈效应。当其他大模型还在知识库问答的泥潭里挣扎时,DeepSeek-R1通过动态推理链分解技术,将复杂问题的解决准确率提升了37.6%。这直接导致了一个有趣现象:原本属于NLP工程师专属玩具的大模型,开始频繁出现在运维告警系统、电商客服工单甚至医院电子病历处理流程中。如果你也想接入DeepSeek开发企业级AI应用,那么——
别惹CC
2025/02/22
8015
DeepSeek全链路开发指南:从零搭建智能问答系统到API无缝对接【内含知识库实战】
推荐阅读
相关推荐
Spring AI + DeepSeek:轻松打造你的第一个 AI 应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档