java-调用DeepSeek官方API

java-调用DeepSeek官方API,目前官方平台暂停了充值入口,所以该功能暂时可以在学习中使用下

  • 2025-02-20 16:23:36 星期四
    image

一、官方平台入口

DeepSeek开放平台

1>.使用方式:

  • 1.在开放平台注册账号
  • 2.创建APIkey:
    image
  • 3.给你的账户进行充值(目前暂时无法充值)
  • 4.按照以下流程,编写代码进行测试即可~

二、所需maven依赖:

<!--okhttp-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.12.0</version>
        </dependency>

三、具体代码如下:

1.核心代码:

private static final String API_URL = "https://api.deepseek.com/chat/completions";
private static final String API_KEY = "sk-6be5ceb9e6184***********"; //这里改成你自己的 api keys

 /**
     * DeepSeek生成阅读理解
     *
     * @param dto
     * @return
     */
    @Override
    public String deepSeekGenerateArticle(NewAiRequestDTO dto) throws IOException {
        if (StringUtils.isEmpty(dto.getWordList())) {
            throw new RuntimeException("请选择单词!");
        }
        String todayWord = dto.getWordList().stream().collect(Collectors.joining(","));
        String problem = "{" +
                "  reading: ," +
                "  translation: ," +
                "  exercises: [" +
                "    {" +
                "      question: 问题1," +
                "      options: [A) , B) , C), D)  ]," +
                "      answer: B," +
                "      analysis: 正确答案是B。" +
                "    }," +
                "  ]" +
                "}" +
                " 根据这些单词:" + todayWord + ",生成一篇500个单词左右的英语阅读理解:,生成对应的阅读的翻译,以及该阅读的习题和答案解析,习题要求:5道习题,习题选项按照ABCD的形式显示,最后把阅读理解、翻译内容、习题和答案解析,以json格式返回,输出内容按照以上格式进行:";
        log.info(problem);
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost request = new HttpPost(API_URL);
        request.setHeader("Content-Type", "application/json");
        request.setHeader("Authorization", "Bearer " + API_KEY);
        // 请求体
        String requestBody = String.format(
                "{\"model\": \"deepseek-chat\", \"messages\": [{\"role\": \"user\", \"content\": \"%s\"}], \"stream\": false}", problem
        );
        // 解决中文乱码问题
        StringEntity entity = new StringEntity(requestBody, "utf-8");
        entity.setContentEncoding("UTF-8");
        entity.setContentType("application/json");
        request.setEntity(entity);
        //设置超时时间
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(120000)
                .setSocketTimeout(120000)
                .build();
        request.setConfig(requestConfig);
        // 发送请求并获取响应
        String resultJson = "";
        CloseableHttpResponse response = client.execute(request);
        // 获取状态线对象,可以获取状态码和HTTP版本
        StatusLine statusLine = response.getStatusLine();
        int statusCode = statusLine.getStatusCode();
        if (statusCode == 200) {
            // 返回响应内容
            String result = EntityUtils.toString(response.getEntity(), "utf-8");
            if (StringUtils.isNotEmpty(result)) {
                JSONArray jsonArray = JSONArray.parseArray(com.alibaba.fastjson.JSONObject.parseObject(result).getString("choices"));
                com.alibaba.fastjson.JSONObject jsonObject = jsonArray.getJSONObject(0);
                com.alibaba.fastjson.JSONObject message = (com.alibaba.fastjson.JSONObject) jsonObject.get("message");
                String content = message.get("content").toString();
                //截取json内容
                resultJson = extractString(content, "```json", "```");
                log.info("生成内容,{}", resultJson);
                if (StringUtils.isNotEmpty(resultJson)) {
                    NewAiArticle newAiArticle = new NewAiArticle();
                    newAiArticle.setClassRecordId(dto.getClassRecordId());
                    newAiArticle.setContent(resultJson);
                    newAiArticleMapper.insert(newAiArticle);
                }
            } else {
                throw new RuntimeException("请求超时");
            }
        } else {
            throw new RuntimeException("Failed response code: " + statusCode);
        }
        client.close();
        return resultJson;
    }

2.其他方法:

/**
     * 截取{}中数据
     *
     * @param
     * @return
     */
    public static String extractString(String input, String start, String end) {
        if (input.contains("json") || input.contains("```json")) {
            int startIndex = input.indexOf(start);
            if (startIndex == -1) return null;
            int endIndex = input.indexOf(end, startIndex + start.length());
            if (endIndex == -1) return null;
            return input.substring(startIndex + start.length(), endIndex);
        } else {
            return input;
        }
    }
posted @   青喺半掩眉砂  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示