【Spring AI】调用 DeepSeek 实现问答聊天


在人工智能交互应用愈发普及的今天,DeepSeek 作为高效的语言模型,具备出色的问答聊天能力。借助 Spring AI 框架,开发者能够轻松将 DeepSeek 集成到 Java 应用中。

一、基础概念解析

1.Spring AI 框架

Spring AI 是基于 Spring Boot 的开发框架,旨在降低 Java 开发者集成 AI 服务的门槛。它提供了标准化的编程接口和配置方式,支持接入多种 AI 模型与服务,无论是文本处理、图像识别还是智能对话功能,都能通过简洁的代码实现集成,极大提升了 AI 应用开发效率 。

2.DeepSeek 模型

DeepSeek 是一款先进的语言模型,通过大量文本数据训练,在自然语言理解和生成方面表现优异。它能够理解用户提问意图,并生成连贯、准确的回答,适用于智能客服、智能助手、在线问答等多种场景。在调用 DeepSeek 时,主要通过其 API 接口发送用户问题,并接收返回的答案数据。

二、开发环境搭建

1.JDK 环境准备

由于 Spring AI 基于 Java 开发,首先要确保系统安装了 Java Development Kit(JDK),推荐使用 JDK 11 及以上版本。可以从 Oracle 官网或 OpenJDK 官网下载对应操作系统的安装包。安装完成后,配置JAVA_HOME环境变量,在命令行中输入java -versionjavac -version,若能正确显示版本信息,说明 JDK 安装配置成功。

2.开发工具选择

建议使用 IntelliJ IDEA 作为开发工具,它对 Spring 项目有良好的支持,可方便地创建、运行和调试 Spring Boot 项目。当然,也可根据个人习惯选择 Eclipse 等其他 Java 开发工具,其核心功能均可满足项目开发需求。

三、项目创建与依赖添加

1.创建 Spring Boot 项目

打开 IntelliJ IDEA,通过 “Spring Initializr” 创建新的 Spring Boot 项目。在创建过程中,设置好项目的基本信息,如 Group、Artifact、Name 等。在依赖选择环节,务必勾选 “Spring Web” 依赖,用于后续创建 Web 服务,以实现通过 API 接口调用 DeepSeek;同时,添加 Spring AI 相关依赖。

对于使用 Maven 构建的项目,在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ai</artifactId>
    <version>{具体版本号}</version>
</dependency>

若使用 Gradle 构建项目,在build.gradle文件中添加如下依赖:

implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-ai:{具体版本号}'

具体的版本号可在 Maven 中央仓库或 Spring 官方文档中查询获取,确保使用稳定且兼容的版本。

2.DeepSeek API

要调用 DeepSeek 进行问答聊天,需要获取其 API 访问权限。前往 DeepSeek 官方平台申请 API Key,申请成功后,在 Spring Boot 项目的application.yml(或application.properties)配置文件中进行配置:

spring:
  ai:
    deepseek:
      api-key: {你的API密钥}
      base-url: {DeepSeek API基础地址}

{你的API密钥}替换为实际申请到的 API Key,{DeepSeek API基础地址}填写官方提供的 API 服务地址。如果 DeepSeek 支持自定义请求参数配置,如设置最大响应长度、温度参数等,也可在此文件中进行相应配置。

四、代码编写实现调用

1.创建问答服务类

在项目合适的包路径下,创建一个问答服务类,用于封装与 DeepSeek 交互的逻辑。示例代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class DeepSeekChatService {

    @Value("${spring.ai.deepseek.api-key}")
    private String apiKey;
    @Value("${spring.ai.deepseek.base-url}")
    private String baseUrl;

    private final RestTemplate restTemplate;

    public DeepSeekChatService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String sendQuestion(String question) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Authorization", "Bearer " + apiKey);

        String requestBody = "{\"question\": \"" + question + "\"}";
        HttpEntity<String> request = new HttpEntity<>(requestBody, headers);

        ResponseEntity<String> response = restTemplate.postForEntity(baseUrl, request, String.class);
        if (response.getStatusCode().is2xxSuccessful()) {
            // 解析返回数据获取答案,此处假设返回数据为JSON格式,包含"answer"字段
            // 实际需根据DeepSeek真实返回结构解析
            return extractAnswerFromResponse(response.getBody());
        }
        return "问答失败";
    }

    private String extractAnswerFromResponse(String responseBody) {
        // 实现具体的JSON解析逻辑,提取答案字段
        // 例如使用Jackson或Gson库解析
        return "";
    }
}

上述代码定义了DeepSeekChatService类,通过@Service注解将其声明为服务类。sendQuestion方法负责构建与 DeepSeek API 交互的请求,包括设置请求头(添加 API Key 进行认证)、构建请求体(包含用户问题),并使用RestTemplate发送 POST 请求。请求成功后,从返回数据中提取答案,不过实际应用中需要根据 DeepSeek 真实的返回数据结构,使用 JSON 解析库(如 Jackson、Gson)完成答案提取。

2.创建 Controller 类

创建 Controller 类用于接收前端请求,并调用问答服务类与 DeepSeek 交互,返回答案给前端。示例代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/chat")
public class ChatController {

    private final DeepSeekChatService deepSeekChatService;

    @Autowired
    public ChatController(DeepSeekChatService deepSeekChatService) {
        this.deepSeekChatService = deepSeekChatService;
    }

    @PostMapping
    public ResponseEntity<String> chat(@RequestBody String question) {
        try {
            String answer = deepSeekChatService.sendQuestion(question);
            return new ResponseEntity<>(answer, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity<>("问答异常", HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

ChatController类通过@RestController@RequestMapping注解配置为处理问答请求的控制器。chat方法接收前端传递的用户问题,调用DeepSeekChatServicesendQuestion方法获取答案,并将答案返回给前端。

3.前端调用示例

在项目的resources/static目录下,创建一个 HTML 文件,编写前端代码实现与后端交互,进行问答聊天:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Spring AI与DeepSeek问答聊天</title>
</head>

<body>
    <input type="text" id="question" placeholder="输入你的问题">
    <button onclick="sendQuestion()">发送问题</button>
    <div id="answer"></div>

    <script>
        function sendQuestion() {
            const question = document.getElementById('question').value;
            fetch('/chat', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify(question)
            })
          .then(response => response.text())
          .then(data => {
                document.getElementById('answer').innerHTML = data;
            })
          .catch(error => {
                console.error('请求失败:', error);
            });
        }
    </script>
</body>

</html>

上述前端代码创建了一个输入框用于输入问题,一个按钮触发问题发送操作,答案将显示在页面的<div>标签中。通过fetch函数向后端发送 POST 请求,并处理后端返回的答案数据进行展示。

五、项目运行与调试

完成代码编写后,启动 Spring Boot 项目。在浏览器中打开前端 HTML 页面,在输入框中输入问题,点击 “发送问题” 按钮,观察是否能成功调用 DeepSeek 获取答案并显示在页面上。

通过以上步骤,我们能够使用 Spring AI 成功调用 DeepSeek 实现问答聊天功能。在实际应用中,我们还可对功能进一步拓展,如增加对话历史记录管理、优化答案展示样式、实现更复杂的交互逻辑等。

### 集成 DeepSeek AI 服务到 Spring 框架 为了在 Spring 框架中集成并调用 DeepSeek AI 服务,开发者可以通过利用 Spring AI 提供的一系列工具和支持来实现这一目标。Spring AI 是由 Spring 团队推出的开源项目,专门用于简化人工智能技术与 Spring 应用之间的融合过程[^1]。 #### 准备工作 确保已经安装了必要的依赖项,并配置好 Maven 或 Gradle 构建文件以引入所需的库。对于想要使用 DeepSeek 的场景来说,如果当前无法访问在线的服务,则建议考虑本地部署该大模型来进行测试和发展目的[^2]。 #### 添加依赖 在 `pom.xml` 文件或者 build.gradle 中加入如下所示的相关依赖: 对于 Maven 用户: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-core</artifactId> <version>${spring-ai.version}</version> </dependency> <!-- 如果需要其他特定于 DeepSeek 的组件 --> <dependency> <groupId>com.example.deepseek</groupId> <artifactId>deepseek-client</artifactId> <version>${deepseek.version}</version> </dependency> ``` 对于 Gradle 用户: ```groovy implementation 'org.springframework.ai:spring-ai-core:${springAiVersion}' // 若有额外需求可添加更多依赖 implementation 'com.example.deepseek:deepseek-client:${deepSeekClientVersion}' ``` #### 编写代码逻辑 创建一个简单的 REST 控制器用来演示如何通过 HTTP 请求向 DeepSeek 发送数据并接收响应结果。这里假设有一个名为 `DeepSeekService` 的类负责处理具体的业务逻辑操作。 ```java @RestController @RequestMapping("/api/deepseek") public class DeepSeekController { private final DeepSeekService deepSeekService; public DeepSeekController(DeepSeekService deepSeekService) { this.deepSeekService = deepSeekService; } @PostMapping("/analyze") public ResponseEntity<String> analyze(@RequestBody String inputText) throws Exception { try { // 使用 spring ai 统一 api 调用 deepseek 进行分析 String result = deepSeekService.analyze(inputText); return new ResponseEntity<>(result, HttpStatus.OK); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } } ``` 上述例子展示了怎样构建一个基本的应用程序端点 `/api/deepseek/analyze` 来接受 POST 方法请求并将传入的数据传递给内部定义好的 `DeepSeekService` 实现对象进行进一步处理。 #### 测试应用 完成以上步骤之后就可以启动应用程序并对新建立起来的功能模块执行单元测试或是集成测试验证其正确性和稳定性了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会飞的架狗师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值