Hi,大家好,我是灰小猿,
大家都知道最近DeepSeek爆火,他以其优秀的大模型和支持深度推理和思考,受到了广大网友的热爱。那么作为Java程序员,如何在你的Java程序中接入deepseek实现聊天问答?所以今天咱们来点实战干货:用Java代码调通DeepSeek的API,做个能自动聊天的问答程序! 过程中可能会遇到各种“坑”,别慌,我会把我实践过程中遇到的常见问题和解决方法都列出来,保证你代码跑得飞起~
一、准备工作:先搞到“钥匙”和“地图”*
1. 申请API Key(钥匙)
- 首先打开DeepSeek官网,注册账号 → 进入开发者中心 → 创建应用 → 拿到你的API Key(一串字符串,千万别泄露!)。
- 如果找不到入口,这里点击“DeepSeek API文档”,里面有详细指引。
2. 查看API文档(地图)
- 进入API文档:
- 重点看这几个信息:
- 请求地址:比如
https://api.deepseek.com/v1/chat
(不同版本可能不同) - 请求方式:一般是POST
- 请求头:需要带
Authorization
和Content-Type
- 请求体格式:比如JSON格式的
{"messages": [...]}
- 请求地址:比如
二、写代码:四步搞定!
步骤1:创建一个Java项目
用IDEA或Eclipse新建个Java项目,别告诉我你还不会~
步骤2:添加HTTP请求库
推荐用 OkHttp(简单好用),在 pom.xml
里加依赖:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
步骤3:核心代码——发请求,收回复
直接上代码(关键注释已标注👇):
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;
import java.io.IOException;
import java.util.Collections;
public class DeepSeekClient02 {
/**
* 请求API地址
*/
private static final String API_URL = "https://api.deepseek.com/v1/chat/completions";
/**
* 你在DeepSeek官网申请的API KEY,注意不要泄露给他人!
*/
private static String API_KEY = "you api key";
private final OkHttpClient client = new OkHttpClient();
public String getResponse(String apiKey, String prompt) throws IOException {
// 构建请求体
DeepSeekRequestModel.Message message = DeepSeekRequestModel.Message.builder()
.role("user")
.content(prompt).build();
DeepSeekRequestModel requestBody = DeepSeekRequestModel.builder()
.model("deepseek-chat")
.messages(Collections.singletonList(message))
.build();
//构建请求体json:{"messages":[{"content":"你好,DeepSeek!","role":"user"}],"model":"deepseek-chat"}
String jsonBody = JSON.toJSONString(requestBody);
// 创建HTTP请求
Request request = new Request.Builder()
.url(API_URL)
.post(RequestBody.create(jsonBody, MediaType.get("application/json")))
.addHeader("Authorization", "Bearer " + apiKey)
.build();
// 发送请求并处理响应
try (Response response = client.newCall(request).execute()) {
//如果响应成功,并且返回体有内容,就输出内容,否则表示响应失败
if (response.isSuccessful() && response.body() != null) {
return response.body().string();
}
throw new IOException("Unexpected code " + response);
}
}
public static void main(String[] args) {
String question = "你好,DeepSeek!";
try {
String response = new DeepSeekClient02().getResponse(API_KEY, question);
System.out.println(response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
代码中用到的DeepSeekRequestModel:
import lombok.Builder;
import lombok.Data;
import java.util.List;
/**
* @author hxy
*/
@Data
@Builder
public class DeepSeekRequestModel {
/**
* 所用DeepSeek模型
*/
private String model;
private List<Message> messages;
/**
* 消息体
*/
@Data
@Builder
public static class Message {
private String role;
private String content;
}
}
步骤4:运行测试
直接运行 main
方法,如果看到DeepSeek的回复,恭喜你成功了!如果报错,继续往下看👇
三、常见问题 & 自救指南
1. 报错404:找不到地址
- 检查点:
- API地址是否写错?比如少了个字母或多加了
/v2
- 确认请求方法是
POST
不是GET
- API地址是否写错?比如少了个字母或多加了
- 自救:
- 打开Postman,用相同参数测试,看是否成功。
2. 报错401:权限错误
- 检查点:
- API Key是否正确?复制的时候别漏字符!
- 请求头的
Authorization
格式是否正确?必须是Bearer your_key
(Bearer后有个空格!)
- 自救:
- 去DeepSeek后台重新生成Key试试。
2. 报错401:余额不足
- 检查点:
- 检查deepseek余额是否充足,
- 调用deepseek的API是收费的,不过费用较低还可以,
- 自救:
- 去DeepSeek后台充值账户余额后再试。不过我写文章这几天正好由于服务器资源紧张禁止充值了,后面应该会开放。
- 去DeepSeek后台充值账户余额后再试。不过我写文章这几天正好由于服务器资源紧张禁止充值了,后面应该会开放。
3. 报错400:请求体格式错误
- 检查点:
- JSON格式是否正确?比如引号是否闭合。
- 字段名是否和文档一致?比如
messages
还是message
- 自救:
- 用在线JSON校验工具(如JSONLint)检查你的请求体。
4. 返回乱码或解析失败
- 检查点:
- 是否忘记设置
Content-Type: application/json
? - 是否直接解析了错误信息(比如404页面)为JSON?
- 是否忘记设置
- 自救:
- 打印出原始响应内容,先别急着解析,看看返回的是什么。
5. 网络超时
- 检查点:
- 本地网络是否正常?试试访问其他网站。
- 是否被防火墙拦截?
- 自救:
- 在代码中设置超时时间:
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) // 10秒超时 .build();
- 在代码中设置超时时间:
除此之外,DeepSeek还给出了其他错误码的解决方案,具体都在API文档内,可以具体去文档中查看:
四、进阶优化:让你的代码更专业
上面只是最基本的使用流程,如果API集成到实际应用中,应该要考虑如下问题:
- 隐藏API Key:别把Key硬编码在代码里!用环境变量或配置文件。
- 异常重试:网络波动时自动重试3次。
- 异步请求:用OkHttp的异步方法,避免卡住界面。
- 解析JSON回复:用Jackson或Gson提取回复内容,比如:
// 假设返回格式是 {"choices": [{"message": {"content": "回答内容"}}]} JsonNode root = new ObjectMapper().readTree(jsonResponse); String answer = root.get("choices").get(0).get("message").get("content").asText();
五、总结
总结一下,搞定DeepSeek API其实就三步:拿Key → 写请求 → 处理回复。遇到报错别慌,按错误码逐个排查,大部分问题都能解决。本文代码已测试通过,点赞收藏后赶紧动手试试吧!遇到问题欢迎评论区留言,咱们一起debug~
最后提醒:API调用可能有次数限制,玩坏了记得去官网看看配额哦!