
【第二节】Java使用DeepSeek聊天--代码
Java接入DeepSeek的Api进行聊天
Java 接入DeepSeek聊天
公 众 号:木木与代码
本文作者:@MuMu
编写日期:2025年02月06日
本文字数:4197个字符
关注可了解更多的教程。问题或建议,请公众号留言;
【介绍】
最近DeepSeek很火,DeepSeek已经开源了,但是如果电脑配置不高还是不能在自己的个人电脑上部署,虽然我们可以直接登录DeepSeek的网页或手机App可以进行聊天,但是作为码农,代码爱好者总想自己写代码完成一些有趣的事情,所以我使用Java介入了DeepSeek的Api接口,实现了简单的和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示例” 获取完整的源码
到此本节文章内容已结束,谢谢您的阅读!
如有问题欢迎一起讨论!
结束
♥♥♥关注我们♥♥♥
更多推荐
所有评论(0)