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示例” 获取完整的源码

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

结束


 ♥♥♥关注我们♥♥♥

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐