deepseek api Java调用简单的实现

deepseek api Java调用简单的实现


最近一段时间deepseek很火,有点抢了GPT的风头,但是使用发现问题

deepseek网页版还是APP版,只要输入问题就直接卡顿,服务器繁忙了

到底是什么原因呢,其实啊,就是使用的人太多了,另外,有些人还在DDOS导致的(竞争)


deepseek也提供了API调用的功能

我们来看看

捕获.PNG



捕获we.PNG



但是API充值业务不能使用了


捕获df.PNG


这是官方的API调用文档

我们本地搭建了一个离线版的deepseek

使用效果其实也一般

捕获dc.PNG


我们换成

https://account.siliconflow.cn/login

捕获dg.PNG


通过调用模型,使用Chatbox还行

那么我们看看他的文档API调用


捕获cb.PNG


似乎对API调用非常友好

捕获bcv.PNG


这里分别是各种语言,调用API做了案例的展示

我们看看是怎么调用的,我们是否可以做一个类似的tools呢

捕获vn.PNG


来到java项

看到调用的规则

HttpResponse<String> response = Unirest.post("https://api.siliconflow.cn/v1/chat/completions")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"model\": \"deepseek-ai/DeepSeek-V3\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"中国大模型行业2025年将会迎来哪些机遇和挑战?\"\n    }\n  ],\n  \"stream\": false,\n  \"max_tokens\": 512,\n  \"stop\": [\n    \"null\"\n  ],\n  \"temperature\": 0.7,\n  \"top_p\": 0.7,\n  \"top_k\": 50,\n  \"frequency_penalty\": 0.5,\n  \"n\": 1,\n  \"response_format\": {\n    \"type\": \"text\"\n  },\n  \"tools\": [\n    {\n      \"type\": \"function\",\n      \"function\": {\n        \"description\": \"<string>\",\n        \"name\": \"<string>\",\n        \"parameters\": {},\n        \"strict\": false\n      }\n    }\n  ]\n}")
  .asString();

给出的调用规则是这样的


首先调用的API接口是:

https://api.siliconflow.cn/v1/chat/completions
Authorization

也就是认证了,这里需要提供一个人用户的TOKEN,也就是KEY

发送类别是JSON

body

是发送的参数包,

content\

是你要提问的参数

我们如果实现在JAVA中调用API中,分析一下思路

1、首先POST包,调用

https://api.siliconflow.cn/v1/chat/completions

提供TOKEN

2、根据发包,获取到回显包

3、对数据进行处理,如果有数组,还需要对数组进行解析,去查找关键点,因为我们输出的数据,是那种JSON,有的数据是我们不需要的



我们先用常见的进行输出

捕获dsf.PNG


这是一个POST方法


我们先来试试这个默认回显结果


捕获fdg.PNG



看看回显结果


捕获dsfcxv.PNG

我们可以看到

content":"Hello! How can I assist you today?"

这就是回显内容了

调用的是"model":"deepseek-ai/DeepSeek-V3",模型

那么其他的,我们不需要,就可以不让他输出了


我们来尝试编写

由于是https协议,先支持该协议

   HostnameVerifier hv = HostnameVerifier() {
                (String urlHostName, SSLSession session) {
                    ;
                }
            };
            TrustManager[] trustAllCerts = {TrustAllTrustManager()};
            SSLContext sc = SSLContext.();
            SSLSessionContext sslsc = sc.getServerSessionContext();
            sslsc.setSessionTimeout();
            sc.init(, trustAllCerts, );
            HttpsURLConnection.(sc.getSocketFactory());
HttpsURLConnection.(hv);


使用

HttpURLConnection

标准库进行编写


connection.setRequestProperty("Authorization", "Bearer 这里写上你的token");

由于网络延时,这里加上一个线程启动

Platform.runLater(() -> {


重点是处理json数据

回显包里有数组,需要进行

JSONArray解析
具体写法:


String jsonResponse = response.toString().replaceAll("null$", "");  /去除 null
JSONObject jsonObject = JSONObject.(jsonResponse); 字符串转化为JSONObject
JSONArray choicesArray = jsonObject.getJSONArray();  获取定义的choices数组
(choicesArray.size() > ) {   判断是否为空
   JSONObject firstChoice = choicesArray.getJSONObject(0); 取第一个元素
JSONObject message = firstChoice.getJSONObject("message"); 元素中获取对象
String content = message.getString("content"); 提取需要的content数据


这里加了一个判断

if(!content.isEmpty()){

    testsd.setText(content);
}else{

    testsd.appendText("数据返回错误!");


如果输出的

content

数据不等于空,输出数据,否则弹出信息,数据返回数据


判断catch异常后

加入线程启动

  Platform.(() -> {
  });
}
}).start();

那么API调用就实现了

我们来看看效果


捕获dfb.PNG


工具成功实现调用api

关键词:新闻动态