Java接入DeepSeek API,做个自己的问答机器人
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@Builderpublic 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调用可能有次数限制,玩坏了记得去官网看看配额哦!