当前位置: 首页 > news >正文

示例:JAVA调用deepseek

 近日,国产AI DeepSeek在中国、美国的科技圈受到广泛关注,甚至被认为是大模型行业的最大“黑马”。在外网,DeepSeek被不少人称为“神秘的东方力量”。1月27日,DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜,在美区下载榜上超越了ChatGPT。同日,苹果中国区应用商店免费榜显示,DeepSeek成为中国区第一。总之就是deepseek目前比较火,同时也提供了开放平台,尝试接入一下,也比较方便,官网每个接口都提供了各种语言的示例代码,java采用的okhttp,我用httpurlconnection尝试下

一、获取 API key

开放平台地址:DeepSeek

登录deepseek开放平台,创建API keys,注意创建的时候复制key,要不然找不到了

新账号有10元的体验额度,不足可以充值,10元体验额度的有效期为1个月

v3和R1的收费标准

1. deepseek-chat 模型优惠期至北京时间 2025 年 2 月 8 日 24:00,期间 API 调用享历史价格,优惠结束后将按每百万输入 tokens 2 元,每百万输出 tokens 8 元计费
2. deepseek-reasoner 模型上线即按每百万输入 tokens 4 元,每百万输出 tokens 16 元计费

二、获取开放API文档

接口地址:首次调用 API | DeepSeek API Docs

进入接口文档,提供了对话、补全、模型等接口,我们找一个【对话补全】接口,给了一个上下文,让他补充说话

三、JAVA调用API文档

使用java调用API,跟其他接口没什么区别,方便上手,注意下入参和返回参数就可以,采用json格式。

-----对话上下文

 { "content": "欢迎加入虚拟电厂", "role": "system" , "name": "muyunfei" },

 { "content": "你好,虚拟电厂与deepseek结合的方向说一下吧", "role": "user" , "name": "路人甲"}

组装请求参数:

{"messages": [{"content": "欢迎加入虚拟电厂","role": "system","name": "muyunfei"}, {"content": "你好,虚拟电厂与deepseek结合的方向说一下吧","role": "user","name": "路人甲"}],"model": "deepseek-chat","frequency_penalty": 0,"max_tokens": 2048,"presence_penalty": 0,"response_format": {"type": "text"},"stop": null,"stream": false,"stream_options": null,"temperature": 1,"top_p": 1,"tools": null,"tool_choice": "none","logprobs": false,"top_logprobs": null
}

返回数据参数格式:

{"id": "2fe86f3b-6e3b-4e65-b35a-1127c14c8739","object": "chat.completion","created": 1738810567,"model": "deepseek-chat","choices": [{"index": 0,"message": {"role": "assistant","content": "Hello! How can I assist you today? 😊"},"logprobs": null,"finish_reason": "stop"}],"usage": {"prompt_tokens": 9,"completion_tokens": 11,"total_tokens": 20,"prompt_tokens_details": {"cached_tokens": 0},"prompt_cache_hit_tokens": 0,"prompt_cache_miss_tokens": 9},"system_fingerprint": "fp_3a5770e1b4"}

------------------------------------------------------------------------

--------------------------      完整代码      ------------------------

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;/*** 实现了。。。。。。** @author 牟云飞**<p>Modification History:</p>*<p>Date					Author			Description</p>*<p>------------------------------------------------------------------</p>*<p>2025年2月4日			牟云飞			新建</p>*/
public class DeepseekTestMain {private static final String DEEPSEEK_API_URL_COMPLETIONS = "https://api.deepseek.com/chat/completions"; // API地址 ——// 对话补全private static final String DEEPSEEK_API_KEY = "换成自己的key"; // 官网申请的api keypublic static void main(String[] args) {DeepseekTestMain test = new DeepseekTestMain();try {test.sendDeepseekChat(DEEPSEEK_API_URL_COMPLETIONS, "虚拟电厂与deepseek结合的方向说一下");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 对话补全* * @param mess* @return* @throws IOException*/public String sendDeepseekChat(String deepseekUrl, String context) throws IOException {String result = null;URL url_req = new URL(deepseekUrl);HttpsURLConnection connection = (HttpsURLConnection) url_req.openConnection();// 设置参数connection.setDoOutput(true); // 需要输出connection.setDoInput(true); // 需要输入connection.setUseCaches(false); // 不允许缓存connection.setConnectTimeout(60000); // 设置连接超时connection.setReadTimeout(60000); // 设置读取超时connection.setRequestMethod("POST"); // 设置POST方式连接// 设置请求属性connection.setRequestProperty("Content-Type", "application/json");connection.setRequestProperty("Accept", "application/json");connection.setRequestProperty("Charset", "UTF-8");// 设置请求头参数connection.addRequestProperty("Authorization", "Bearer " + DEEPSEEK_API_KEY); // 设置appIdHttpsURLConnection https = (HttpsURLConnection) connection;SSLSocketFactory oldSocketFactory = trustAllHosts(https);HostnameVerifier oldHostnameVerifier = https.getHostnameVerifier();https.setHostnameVerifier(DO_NOT_VERIFY);// 输入数据String requestData = "{ \"messages\": "+ "[ "+ " { \"content\": \"欢迎加入虚拟电厂\", \"role\": \"system\" , \"name\": \"muyunfei\" }, "+ " { \"content\": \"你好,虚拟电厂与deepseek结合的方向说一下吧\", \"role\": \"user\" , \"name\": \"路人甲\"} "+ "],"+ " \"model\": \"deepseek-chat\","+ " \"frequency_penalty\": 0,"+ " \"max_tokens\": 2048,"+ " \"presence_penalty\": 0,"+ " \"response_format\": {\n \"type\": \"text\"\n },"+ " \"stop\": null,"+ " \"stream\": false,"+ " \"stream_options\": null,"+ " \"temperature\": 1,"+ " \"top_p\": 1,"+ " \"tools\": null,"+ " \"tool_choice\": \"none\","+ " \"logprobs\": false,"+ " \"top_logprobs\": null}";try (OutputStream os = connection.getOutputStream()) {byte[] input = requestData.getBytes("utf-8");os.write(input,0,input.length);}// 输出数据InputStream in = connection.getInputStream(); // 获取返回数据BufferedInputStream bis = new BufferedInputStream(in);ByteArrayOutputStream baos = new ByteArrayOutputStream();int c;while (-1 != (c = bis.read())) {baos.write(c);}bis.close();in.close();baos.flush();byte[] data = baos.toByteArray();String responseMsg = new String(data);System.out.println(responseMsg);
//		{
//			"id": "2fe86f3b-6e3b-4e65-b35a-1127c14c8739",
//			"object": "chat.completion",
//			"created": 1738810567,
//			"model": "deepseek-chat",
//			"choices": [{
//				"index": 0,
//				"message": {
//					"role": "assistant",
//					"content": "Hello! How can I assist you today? 😊"
//				},
//				"logprobs": null,
//				"finish_reason": "stop"
//			}],
//			"usage": {
//				"prompt_tokens": 9,
//				"completion_tokens": 11,
//				"total_tokens": 20,
//				"prompt_tokens_details": {
//					"cached_tokens": 0
//				},
//				"prompt_cache_hit_tokens": 0,
//				"prompt_cache_miss_tokens": 9
//			},
//			"system_fingerprint": "fp_3a5770e1b4"
//		}JSONObject jsonObject = JSONObject.fromObject(responseMsg);JSONArray choices = JSONArray.fromObject(jsonObject.get("choices"));// 获取补全内容,是个数组,多个补全回复多个System.out.println(choices.toString());JSONObject item = JSONObject.fromObject(JSONObject.fromObject(choices.get(0)).get("message"));System.out.println(item.get("content"));// 对JSON作解析return result;}private SSLSocketFactory trustAllHosts(HttpsURLConnection connection) {SSLSocketFactory oldFactory = connection.getSSLSocketFactory();try {SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, trustAllCerts, new java.security.SecureRandom());SSLSocketFactory newFactory = sc.getSocketFactory();connection.setSSLSocketFactory(newFactory);} catch (Exception e) {e.printStackTrace();}return oldFactory;}private TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {public java.security.cert.X509Certificate[] getAcceptedIssuers() {return new java.security.cert.X509Certificate[] {};}public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}} };private HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {public boolean verify(String hostname, SSLSession session) {return true;}};}

http://www.lryc.cn/news/532832.html

相关文章:

  • 【提示工程】:如何有效与大语言模型互动
  • 操作系统—经典同步问题
  • profinet工业通信协议网关:提升钢铁冶炼智能制造效率的利器
  • Vue基础:计算属性(描述依赖响应式状态的复杂逻辑)
  • leetcode:1534. 统计好三元组(python3解法)
  • BUU27 [SUCTF 2019]CheckIn1
  • unity学习30:Audio Source, Audio clip 音效和音乐
  • 【Qt 常用控件】输入类控件1(QLineEdit和QTextEdit 输入框)
  • openEuler22.03LTS系统升级docker至26.1.4以支持启用ip6tables功能
  • 深入解析:如何利用 Java 爬虫按关键字搜索淘宝商品
  • STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI
  • C++ Primer 成员访问运算符
  • 芯科科技的BG22L和BG24L带来应用优化的超低功耗蓝牙®连接
  • java后端开发面试常问
  • ‌双非硕士的抉择:自学嵌入式硬件开发还是深入Linux C/C++走软开?
  • Windows系统使用Git教程详解
  • Linux firewalld开启日志审计功能(2)
  • 【声音转文字CapsWriter】声音随时转化为文字,CapsWriter提高工作效率
  • 深入理解小波变换:信号处理的强大工具
  • 人机交互系统实验三 多通道用户界面
  • Filter -> MaskFilter遮罩滤镜详解
  • RK3568使用QT操作LED灯
  • python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理
  • 为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?
  • Android 约束布局ConstraintLayout整体链式打包居中显示
  • 在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别
  • 微服务知识——微服务架构的演进过程
  • Chrome 浏览器:互联网时代的浏览利器
  • 深入浅出 NRM:加速你的 npm 包管理之旅
  • Linux——基础命令1