当前位置: 首页 > 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 key


	public static void main(String[] args) {
		DeepseekTestMain test = new DeepseekTestMain();
		try {
			test.sendDeepseekChat(DEEPSEEK_API_URL_COMPLETIONS, "虚拟电厂与deepseek结合的方向说一下");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.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); // 设置appId

		HttpsURLConnection 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;
		}
	};

}

相关文章:

  • 机试刷题_674. 最长连续递增序列【python】
  • DevSecOps普及:安全与开发运维的深度融合
  • vllm的使用方式,入门教程
  • 技术速递|.NET 9 网络优化
  • [已解决]dify设置本地模型deepseek报错[Error 111]
  • vue深拷贝:1、使用JSON.parse()和JSON.stringify();2、使用Lodash库;3、使用深拷贝函数(采用递归的方式)
  • MemoryCache内存缓存数据
  • 算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器
  • 【苍穹外卖】问题笔记
  • Pytorch框架06-现有网络模型(修改/使用/保存/加载)
  • Ubuntu 安装 Nginx并配置反向代理
  • 工作中遇到的设计模式整理
  • Uniapp 小程序接口封装与使用
  • 使用 Postman 访问 Keycloak 端点
  • 强化学习演进:GRPO 从何而来
  • 数组总结【代码随想录】
  • Docker数据卷操作实战
  • centos22.04 dpkg -l 输出状态标识含义
  • HTTP非流式请求 vs HTTP流式请求
  • 金融行业专题|某基金公司基于超融合信创平台支持人大金仓数据库的性能评测
  • 古籍新书·2025年春季|中国土司制度史料集成
  • 美军空袭也门拘留中心,已致68人死亡
  • 事关稳就业稳经济,10张海报看懂这场发布会的政策信号
  • 视觉周刊|2025上海车展的科技范
  • 王一博赛车故障退赛冲上热搜,工作室回应:下次再战
  • 新剧|《淮水竹亭》明开播:前作扑街,本作能否改命