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

作者:后端小肥肠

目录

1. 前言

为什么选择DeepSeek?

本文技术栈

2. 环境准备

2.1. 后端项目初始化

2.2. 前端项目初始化

3. 后端服务开发

3.1. 配置文件

3.2. 核心服务实现

4. 前端服务开发

4.1. 聊天组件ChatWindow.vue开发

5. 效果展示及源码获取

5.1. 效果展示

5.2. 源码获取

6. 结语

7. 参考链接


1. 前言

随着人工智能技术的快速发展,大语言模型在企业和个人应用中扮演着越来越重要的角色。作为国产大语言模型的新秀,DeepSeek以其出色的中文理解能力和开放的API接口,为开发者提供了构建AI应用的新选择。

在本文中,我将带领大家使用SpringBoot和Vue技术栈,快速搭建一个具有实时对话功能的AI助手系统。这个系统不仅支持流式响应,还具备优雅的界面展示和Markdown格式的内容渲染,让AI回答更加清晰易读。

为什么选择DeepSeek?

  • 优秀的中文理解能力,对中文语境的把握更加准确
  • 开放友好的API接口,支持流式输出
  • 合理的定价策略,适合个人开发者和小型企业
  • 部署在国内服务器,响应速度快,无需科学上网

本文技术栈

后端:

  • SpringBoot 2.x
  • WebSocket/WebFlux:实现实时数据流传输
  • Lombok:简化Java代码
  • Jackson:JSON处理

前端:

  • Vue 2.x
  • SockJS:处理WebSocket通信
  • Marked:Markdown渲染
  • DOMPurify:防止XSS攻击

让我们开始动手实践,用短短10分钟时间,搭建一个专业的AI对话系统!

2. 环境准备

  • JDK 8+
  • Node.js 12+
  • Maven 3.6+
  • IDE(推荐IntelliJ IDEA)
  • DeepSeek API密钥

DeepSpeek API秘钥可以用硅基流动来获取,不知道具体方法的可以参考我的另外一篇博客。DeepSpeek服务器繁忙?这几种替代方案帮你流畅使用!(附本地部署教程)-优快云博客

2.1. 后端项目初始化

创建maven工程:

新增pom依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

2.2. 前端项目初始化

vue create xfc-deepspeek-front
cd xfc-deepspeek-front
npm install sockjs-client marked dompurify

3. 后端服务开发

3.1. 配置文件

server:
  port: 8080

spring:
  application:
    name: xfc-deepspeek
  webflux:
    base-path: /
  codec:
    max-in-memory-size: 10MB

deepseek:
  api-url: https://api.siliconflow.cn/v1/chat/completions
  api-key: your_api_key_here

logging:
  level:
    com.xfc: DEBUG

3.2. 核心服务实现

@Slf4j
@Service
@RequiredArgsConstructor
public class DeepSeekService {
    private final DeepSeekConfig config;
    private final WebClient.Builder webClientBuilder;
    
    public Flux<String> handleChatWebSocket(String question) {
        return sendChatRequest(question)
                .doOnNext(response -> log.info("发送响应: {}", response))
                .onErrorResume(e -> {
                    log.error("WebSocket通信错误: {}", e.getMessage());
                    return Flux.just("抱歉,服务器处理请求时发生错误,请稍后重试。");
                });
    }
    
    // ... 其他实现代码见完整源文件
}

DeepSeekService 是一个核心服务类,主要负责处理与 DeepSeek API 的通信和数据处理,包含三个主要功能模块:

命令行交互功能(startInteractiveChat方法):

提供命令行方式与AI对话,支持问答记录保存到本地文件。用户可以输入问题,实时查看AI响应,并自动保存对话历史。

WebSocket通信功能(handleChatWebSocket方法):

处理前端WebSocket请求,将用户问题转发给DeepSeek API,并将响应通过WebSocket返回给前端。包含错误处理机制,确保通信稳定性。

API请求处理功能(sendChatRequest方法):

负责与DeepSeek API的具体通信实现。使用WebClient发送异步请求,支持流式响应处理。包含完善的错误处理机制,如超时控制(60秒)、重试机制(最多3次,间隔2秒)、异常处理等。对API响应进行JSON解析,提取有效内容。

整个服务采用响应式编程模式(Flux),实现非阻塞式处理,提高系统性能。同时通过日志记录、错误重试、优雅降级等机制,确保服务的可靠性和稳定性。saveToFile方法提供了对话历史的本地存储功能,支持时间戳记录。

4. 前端服务开发

4.1. 聊天组件ChatWindow.vue开发

<template>
  <div class="chat-container">
    <div class="message-container" ref="messageContainer">
      <div 
        v-for="(message, index) in messages" 
        :key="index"
        :class="['message', message.type + '-message']"
      >
        <div v-if="message.type === 'bot'" v-html="renderMarkdown(message.content)"></div>
        <div v-else>{{ message.content }}</div>
      </div>
    </div>
    <!-- ... 其他模板代码 -->
  </div>
</template>

<script>
import SockJS from 'sockjs-client';
import { marked } from 'marked';
import DOMPurify from 'dompurify';

export default {
  name: 'ChatWindow',
  // ... 完整实现代码见源文件
}
</script>

这个 ChatWindow.vue 组件是一个完整的聊天界面实现,主要分为三个部分:

界面结构部分使用了 flex 布局,包含消息显示区、输入区和连接状态提示区。消息显示区支持滚动和自动定位到最新消息,输入区包含输入框和发送按钮,状态区显示连接情况。

功能实现部分主要通过 WebSocket 实现实时通信。initWebSocket 方法负责建立连接,包含连接成功、接收消息、错误处理和断开重连等完整生命周期管理。消息发送和接收通过 sendMessageappendMessage 方法处理,支持用户消息和机器人回复的区分显示。特别的是,通过 marked 库实现了 Markdown 格式的渲染,并使用 DOMPurify 防止 XSS 攻击。

样式设计部分为不同类型的消息(用户消息、机器人回复、错误提示)定义了不同的样式,并通过 :deep 选择器为 Markdown 内容添加了详细的样式支持,包括标题、代码块、表格、列表等多种格式的样式定义,确保内容展示的专业性和美观性。整体设计注重用户体验,包含了状态提示、错误处理等完善机制。

5. 效果展示及源码获取

5.1. 效果展示

后端日志:

上图显示了项目运行时的日志信息,记录了 WebSocket 连接和 DeepSeek 服务的交互过程,包括消息接收和响应的详细日志。

系统界面:

上图为AI 对话系统的用户界面截图。整个界面支持 Markdown 格式的渲染,使得回答内容层次分明,易于阅读。

后台链接断开提示:

5.2. 源码获取

关注gzh后端小肥肠,点击【资源】菜单即可获取完整源码。

6. 结语

通过本文的实践,我们成功搭建了一个基于SpringBoot和Vue的AI对话系统。该系统具有以下特点:

实时对话:基于WebSocket的流式响应

优雅展示:支持Markdown格式渲染

稳定可靠:完善的错误处理机制

易于扩展:清晰的代码结构

获取源码后可以自行扩展优化方向,如加入除DeepSpeek之外的其他模型的API,记录会话历史,集成RAG,感兴趣的朋友可以点个关注,小肥肠将持续更新DeepSpeek更多进阶玩法~

7. 参考链接

DeepSeek API 调用 - Spring Boot 实现_deepseek-spring-boot-starter-优快云博客

<think>嗯,用户的问题是如何将Spring BootVue集成到Ollama项目中,想要一个教程或接入指南。首先,我需要理解Ollama是什么。Ollama是一个本地运行和部署大型语言模型的工具,对吧?所以用户可能想在自己的本地环境中集成Spring Boot作为后端Vue作为前端,然后连接Ollama提供的模型服务。 接下来,我需要考虑整个项目的结构。通常,Spring Boot作为后端提供RESTful API,Vue作为前端通过HTTP调用这些API,而Ollama则作为模型服务运行在本地,可能需要通过HTTP或者其他方式与Spring Boot交互。 首先,用户可能需要配置Spring Boot项目,添加相关的依赖,比如Web依赖,可能还有HTTP客户端用来和Ollama通信。然后,在Spring Boot中创建Controller,处理前端Vue发来的请求,再将这些请求转发给Ollama的API。记得Ollama可能有自己的API接口,比如生成文本的端点,需要查阅Ollama的文档确认具体的URL和参数。 然后是Vue部分的集成。Vue需要调用Spring Boot的API,所以需要配置axios或者fetch来发送请求。这里要注意跨域问题,可能需要在Spring Boot后端配置CORS,允许Vue前端的地址访问。 接下来,Ollama的部署。用户需要在本地下載并安装Ollama,然后启动模型服务,确保Spring Boot后端能够访问到Ollama的端口,比如默认的11434端口。可能需要测试一下直接调用Ollama的API是否正常,比如用curl命令发送请求,确保模型能正确返回结果。 然后,整合这三部分。Spring Boot作为中间层,接收Vue的请求,处理后再转发给Ollama,获取结果后返回给Vue前端。可能需要处理异步请求,比如使用Spring的WebClient或者AsyncRestTemplate来非阻塞地调用Ollama的API,提高性能。 另外,用户可能关心具体的代码示例,比如Spring Boot的Controller如何编写,如何发送HTTP请求到Ollama,Vue组件如何调用API。需要给出一些代码片段,比如使用RestTemplate或WebClient的例子,Vue中使用axios的例子。 还要注意配置方面,比如Ollama的地址可能在application.properties中配置,方便不同环境切换。另外,异常处理也很重要,比如Ollama服务不可用时,如何返回友好的错误信息给前端。 可能还需要考虑安全性,比如是否需要API密钥,或者用户认证,但根据引用内容,用户之前提到过使用Spring-ai接入本地模型,可能Ollama本身不需要复杂的认证,因为是本地部署。 最后,可能需要给出一个完整的项目结构示例,说明各个部分的位置,比如前后端分离的结构,如何启动项目,以及测试步骤。 用户之前的问题中提到过Spring-ai的使用,但这里可能不需要,因为Ollama可能有自己的API,直接通过HTTP调用即可。不过如果有相关的库或SDK可以简化调用,也可以推荐,但根据引用,用户可能更倾向于直接调用API而不是使用额外框架。 总结步骤应该是:1. 创建Spring Boot项目,添加依赖;2. 编写Controller处理请求;3. 集成Ollama API调用;4. 创建Vue项目,配置API调用;5. 处理跨域;6. 测试整个流程。</think>### Spring Boot + Vue + Ollama集成指南 #### 一、项目架构设计 ``` project-root/ ├── backend/ (Spring Boot) │ ├── src/main/java/ │ └── application.properties └── frontend/ (Vue) └── src/ ``` #### 二、Spring Boot后端配置(三步实现) 1. 添加依赖(pom.xml): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> ``` 2. 配置Ollama连接(application.properties): ```properties ollama.url=http://localhost:11434 ollama.model=llama2 ``` 3. 创建API控制器(OllamaController.java): ```java @RestController @CrossOrigin(origins = "http://localhost:8080") public class OllamaController { @Value("${ollama.url}") private String ollamaUrl; @PostMapping("/generate") public ResponseEntity<String> generateText(@RequestBody String prompt) { WebClient client = WebClient.create(ollamaUrl); OllamaRequest request = new OllamaRequest(prompt); return client.post() .uri("/api/generate") .bodyValue(request) .retrieve() .toEntity(String.class) .block(); } static class OllamaRequest { private String prompt; // 构造函数和getter } } ``` #### 三、Vue前端集成(两步实现) 1. 安装axios: ```bash npm install axios ``` 2. 创建AI交互组件(AIChat.vue): ```vue <template> <div> <input v-model="inputText"/> <button @click="generate">生成</button> <div>{{ response }}</div> </div> </template> <script> import axios from 'axios'; export default { data() { return { inputText: '', response: '' } }, methods: { async generate() { try { const res = await axios.post('http://localhost:8080/generate', this.inputText); this.response = res.data; } catch (error) { console.error('请求失败:', error); } } } } </script> ``` #### 四、Ollama本地部署 1. 下载安装(Mac/Linux): ```bash curl -fsSL https://ollama.ai/install.sh | sh ``` 2. 启动服务并加载模型: ```bash ollama serve & ollama pull llama2 ``` #### 五、项目启动流程 1. 启动Ollama服务 2. 运行Spring Boot应用: ```bash mvn spring-boot:run ``` 3. 启动Vue应用: ```bash npm run serve ``` #### 六、验证集成 通过Postman测试完整链路: ``` POST http://localhost:8080/generate Body: "解释量子力学的基本原理" ``` 预期响应示例: ```json { "response": "量子力学是描述微观粒子运动规律的物理学理论...", "created_at": "2024-03-14T10:00:00Z" } ```
评论 129
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端小肥肠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值