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
    • 请求头:需要带 AuthorizationContent-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
  • 自救
    • 打开Postman,用相同参数测试,看是否成功。
2. 报错401:权限错误
  • 检查点
    • API Key是否正确?复制的时候别漏字符!
    • 请求头的 Authorization 格式是否正确?必须是 Bearer your_key(Bearer后有个空格!)
  • 自救
    • 去DeepSeek后台重新生成Key试试。
2. 报错401:余额不足
  • 检查点
    • 检查deepseek余额是否充足,
    • 调用deepseek的API是收费的,不过费用较低还可以,
  • 自救
    • 去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调用可能有次数限制,玩坏了记得去官网看看配额哦!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值