【第二节】Java使用DeepSeek聊天--代码

Java 接入DeepSeek聊天

公 众 号:木木与代码
本文作者:@MuMu
编写日期:2025年02月06日
本文字数:4197个字符
关注可了解更多的教程。问题或建议,请公众号留言;

【介绍】

最近DeepSeek很火,DeepSeek已经开源了,但是如果电脑配置不高还是不能在自己的个人电脑上部署,虽然我们可以直接登录DeepSeek的网页或手机App可以进行聊天,但是作为码农,代码爱好者总想自己写代码完成一些有趣的事情,所以我使用Java介入了DeepSeek的Api接口,实现了简单的和DeepSeek聊天。

 专栏目录:

【第一节】Java使用DeepSeek聊天--准备工作

【第一节】Java使用DeepSeek聊天--代码编写

设置依赖库

因为我们使用DeepSeek的Api访问使用HTTP发送请求的,所以我们在自己的项目中配置HTTP依赖。我这次项目中使用的的是OKHTTP库,在项目的pom.xml文件中配置OKHTTP。

 <dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.3</version>
</dependency>

项目结构

通过分析DeepSeek对话api的参数要求,调用Api时需要传Api Key、模型类型、提问文本等参数。

api接口介绍:首次调用 API | DeepSeek API Docs

我们分别创建4个Java类来完成api调用的封装

apikey

要把申请的api key复制下来并替换成自己的api key

package com.mumu.test.deepseek;

/**
 * @Author: MuMu
 * @Date: 2025/2/6 9:35
 */
public class Config {
    public static final String BASE_URL = "https://api.deepseek.com/chat/completions";
    public static final String API_KEY = "DeepSeek申请的key";
}

请求模型

我们通过http根据DeepSeek api接口要去传递相关的参数,并监听和解析模型回答的内容。Java可以使用OKHttp库发送请求。

package com.mumu.test.deepseek;

import okhttp3.*;
import org.jetbrains.annotations.NotNull;
import org.json.JSONArray;
import org.json.JSONObject;

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

import static com.mumu.test.deepseek.Config.*;

/**
 * @Author: MuMu
 * @Date: 2025/2/6 9:50
 */
public class DeepSeekClient {

    public interface Lis{
        void error();
        void msg(String msg);
        void end();
    }

    public void ask(List<RequestMessageItem> requestMessageItemList, boolean  stream, Lis lis) {
        //  创建OkHttp客户端
        OkHttpClient client = new OkHttpClient();

        // 把用户提问添加到请求中
        String requestBody = new RequestBodyParameter("deepseek-chat", requestMessageItemList, stream).toString();
        RequestBody body = RequestBody.create(requestBody, MediaType.parse("application/json; charset=utf-8"));

        Request request = new Request.Builder()
                .url(BASE_URL)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .post(body)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                lis.error();
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    try {
                        String responseData = response.body().string();
                        lis.msg(responseData);
                        lis.end();
                    } catch (Exception e){
                        lis.error();
                    }
                } else {
                    lis.error();
                }
            }
        });
    }

    public String getMsg(String msg){
        JSONObject jsonObject = new JSONObject(msg);
        JSONArray choices = jsonObject.getJSONArray("choices");
        return choices.getJSONObject(0).getJSONObject("message").getString("content");
    }

}

解析模型返回的数据

模型回答的内容在choices[]的第一个元素的message{}的content中。

{
    "id": "f49b1a3a-50bd-44ff-ae42-4fbea8bb7b7d",
    "object": "chat.completion",
    "created": 1738807423,
    "model": "deepseek-chat",
    "choices": [{
        "index": 0,
        "message": {
            "role": "assistant",
            "content": "您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-V3。"
        },
        "logprobs": null,
        "finish_reason": "stop"
    }],
    "usage": {
        "prompt_tokens": 5,
        "completion_tokens": 37,
        "total_tokens": 42,
        "prompt_tokens_details": {
            "cached_tokens": 0
        },
        "prompt_cache_hit_tokens": 0,
        "prompt_cache_miss_tokens": 5
    },
    "system_fingerprint": "fp_3a5770e1b4"
}

public String getMsg(String msg){
    JSONObject jsonObject = new JSONObject(msg);
    JSONArray choices = jsonObject.getJSONArray("choices");
    return choices.getJSONObject(0).getJSONObject("message").getString("content");
}

测试

用户在终端输入文本,把用户的输入发送到DeepSeek,再把模型的回答显示出来。

package com.mumu.test.deepseek;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @Author: MuMu
 * @Date: 2025/2/6 11:28
 */
public class Test {

    // 聊天记录
    public static List<RequestMessageItem> requestMessageItemList = new ArrayList<>();


    public static void main(String[] args) {
        input();
    }


    // 键盘输入聊天
    public static void input(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("\n请输入您的问题:");
        String input = scanner.nextLine();
        if (input.isEmpty()){
            input();
            return;
        }

        System.out.print("思考中...");
        DeepSeekClient deepSeekClient = new DeepSeekClient();
        requestMessageItemList.add(new RequestMessageItem("user", input));


        deepSeekClient.ask(requestMessageItemList, false, new DeepSeekClient.Lis() {
            @Override
            public void error() {
                System.out.println("\n处理失败(服务器响应超时)");
                input();
            }

            @Override
            public void msg(String msg) {
                System.out.print("\n回答:");
                System.out.print(deepSeekClient.getMsg(msg));
            }

            @Override
            public void end() {
                System.out.print("\n");
                input();
            }
        });
    }
}

可以在DeepSeek的后台看到Api的调用情况。

   /  结尾   / 

完整的代码


关注公众号《木木与代码》回复关键词 “deepseek示例” 获取完整的源码

到此本节文章内容已结束,谢谢您的阅读!
如有问题欢迎一起讨论!

结束


 ♥♥♥关注我们♥♥♥

### 使用 Spring 和 DeepSeek 构建聊天机器人 为了使用 Spring 和 DeepSeek 构建聊天机器人,可以遵循以下方法来设置项目并实现功能。 #### 添加依赖项 首先,在项目的 `pom.xml` 文件中添加必要的 Maven 依赖项以引入 Spring AI 和 DeepSeek Reasoner 模型的支持: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>0.8.0-SNAPSHOT</version> </dependency> ``` 此配置允许应用程序利用 Spring 生态系统中的工具和服务来处理人工智能任务[^1]。 #### 加载和解析文档 对于知识库文件的操作,可以通过 `FileSystemDocumentLoader` 来加载本地存储的不同格式的文件,并通过 `TextDocumentParser` 将其转换为适合进一步处理的形式。这一步骤有助于准备用于训练模型的数据集或者作为推理过程的一部分输入给定的信息源[^2]。 #### 实现聊天逻辑 构建聊天机器人的核心在于定义对话管理机制以及与用户的交互方式。通常情况下,会涉及到自然语言理解 (NLU) 的模块分析用户消息意图;随后调用相应的业务服务执行具体操作;最后由响应生成器形成回复发送回前端界面显示给用户查看。 在实际开发过程中,可能还需要考虑如下方面: - 集成第三方 API 或者自定义算法增强语义理解和上下文感知能力; - 设计友好的用户体验确保流畅沟通体验; - 对话历史记录保存以便后续查询统计分析等用途。 ```java // 示例代码片段:创建一个简单的 REST 控制器接收 HTTP 请求并与客户端交流 @RestController @RequestMapping("/chatbot") public class ChatBotController { @PostMapping("/message") public ResponseEntity<String> handleMessage(@RequestBody String userMessage){ // 处理接收到的消息... return new ResponseEntity<>("这是来自服务器端的回答", HttpStatus.OK); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值