示例:JAVA调用deepseek

news2025/2/9 5:49:35

 近日,国产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;
		}
	};

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2295090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件&#xff0c;安装软件成功无报错&#xff0c;完成后不久突然发现系统出问题了&#xff0c;所有的命令无法使用了&#xff0c;如ls、mv、cat等基本命令报错。 relocation error&#xff1a; /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …

电脑黑屏按什么键恢复?电脑黑屏的解决办法

电脑黑屏的原因有很多&#xff0c;可能是硬件、软件、系统或者病毒等方面造成的。那么&#xff0c;当我们遇到电脑黑屏时&#xff0c;应该怎么做呢&#xff1f;有没有什么快捷的方法可以恢复正常呢&#xff1f;本文将为您介绍一些常见的电脑黑屏情况及其解决办法。 一、电脑开机…

思翼遥控器疑问?

1.地面端与遥控端对频&#xff0c;地面端选择数传2为串口&#xff0c;天空端的UART2通过USB转TTL模块连接电脑&#xff0c;通过串口助手观察得有1Hz输出帧&#xff08;开启遥控器APP时间段为10Hz&#xff09;&#xff0c;共21字节&#xff0c;请问&#xff0c;这个是什么含义&a…

anaconda中可以import cv2,但是notebook中cv2 module not found

一、问题 anaconda中成功import cv2 但是jupyter notebook中却无法导入cv2 二、排查 anaconda中使用python路径如下&#xff1a; jupyter notebook中使用python路径如下&#xff1a; 可以发现路径不一致。 三、解决 ①查看可用的kernel ②选中想要修改的kernel&#xff0c;打…

如何解决 Linux 文件系统挂载失败的问题

当遇到Linux文件系统挂载失败的问题时&#xff0c;您可以通过以下步骤来解决问题&#xff1a; 解决方法&#xff1a; 检查挂载点&#xff1a; 确保要挂载的目标文件系统存在&#xff0c;并且挂载点是正确的。检查挂载点是否已经被其他文件系统占用。 检查文件系统状态&#x…

PHP填表统计预约打卡表单系统小程序

&#x1f4cb; 填表统计预约打卡表单系统——专属定制&#xff0c;信息互动新纪元 &#x1f4ca; 填表统计预约打卡表单系统&#xff0c;一款专为现代快节奏生活量身打造的多元化自定义表单统计小程序&#xff0c;集信息填表、预约报名、签到打卡、活动通知、报名投票、班级统…

PAT乙级( 1009 说反话 1010 一元多项式求导)C语言版本超详细解析

1009 说反话 给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a; 测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过 80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&#x…

LVSNAT服务搭建

LVSNAT实验环境搭建 在虚拟机上&#xff0c;我的NAT模式ip划分为&#xff1a;172.25.254.0 仅主机模式IP为&#xff1a;192.168.0.0 拓补图如下 配置服务&#xff1a;LVS服务端添加两个网卡&#xff0c;分别为NAT模式和仅主机模式 LVS服务端配置&#xff1a; systemctl st…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了&#xff0c;一般不推荐使用该方法&#xff0c;专业的事专业工具做。建议有条件&#xff0c;还是上防火墙或者waf来做。 官方文档&#xff1a;ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

html 列动态布局

样式说明&#xff1a; /* 列动态布局&#xff0c;列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

C++小等于的所有奇数和=最大奇数除2加1的平方。

缘由 三种思路解题&#xff1a;依据算术推导得到一个规律&#xff1a;小等于的所有奇数和等于最大奇数除以2加1的平方。将在后续发布&#xff0c;总计有十种推导出来的实现代码。 int a 0,aa 1,aaa 0;cin >> a; while (aa<a) aaa aa, aa 2;cout << aaa;i…

政采云业务网关实践:使用 Higress 统一替代 APISIX/Kong/Istio Ingress

作者&#xff1a;政采云基础架构团队技术专家 朱海峰&#xff08;片风&#xff09; 业务网关项目背景 由于一些历史的背景&#xff0c;政采云平台在网关建设上遇到一些问题&#xff1a; 容器网关配置较多&#xff0c;配置方式多样&#xff0c;运维压力较大&#xff1a; 配置…

【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统

前言 本文主要介绍我最近开发的一个个人实战项目&#xff0c;“基于深度学习的人脸门禁 IPC 智能安防监控系统”&#xff0c;全程满帧流畅运行。这个项目我目前全网搜了一圈&#xff0c;还没发现有相关类型的开源项目。这个项目只要稍微改进下&#xff0c;就可以变成市面上目前…

C语言:深入了解指针4(超级详细)

看之前必须得掌握有一定指针的知识&#xff0c;不然会看不懂&#xff0c;如果有不懂的可以看我博客 指针1&#xff0c;指针2&#xff0c;指针3 这三个讲了指针全部的基础知识超级详细&#xff0c;这篇只要是讲一些指针练习题也是非常详细 1. sizeof和strlen的对⽐ 1. 基本定义…

CEF132 编译指南 Windows 篇 - 拉取 CEF 源码 (五)

1. 引言 获取 CEF 132 源码是开始编译工作的前提和关键步骤。在完成 depot_tools 的安装和配置后&#xff0c;我们需要通过正确的方式下载和同步 CEF 的源代码。由于 CEF 项目依赖于 Chromium 的大量组件&#xff0c;因此源码的获取过程需要特别注意同步策略和版本管理&#x…

DeepSeek与llama本地部署(含WebUI)

DeepSeek从2025年1月起开始火爆&#xff0c;成为全球最炙手可热的大模型&#xff0c;各大媒体争相报道。我们可以和文心一言一样去官网进行DeepSeek的使用&#xff0c;那如果有读者希望将大模型部署在本地应该怎么做呢&#xff1f;本篇文章将会教你如何在本地傻瓜式的部署我们的…

让万物「听说」:AI 对话式智能硬件方案和发展洞察

本文整理自声网 SDK 新业务探索组技术负责人&#xff0c;IoT 行业专家 吴方方 1 月 18 日在 RTE 开发者社区「Voice Agent 硬件分享会」上的分享。本次主要介绍了 AI 对话式智能硬件的发展历程&#xff0c;新一波 AI 浪潮所带来的创新机遇、技术挑战以及未来的展望。 在语音交…

Day38-【13003】短文,二叉树,完全二叉树,二叉树的顺序存储,和链式存储

文章目录 第二节 二叉树二叉树的定义及重要性质n个结点&#xff0c;能组合成多少个不同的二叉树满二叉树、完全二叉树完全二叉树的性质二叉树的性质二叉树的结点数完全二叉树的高度 二叉树的存储顺序存储方式链式存储方式二叉链表的程序实现二叉链表空指针域计算 第二节 二叉树…

【AI】在Ubuntu中使用docker对DeepSeek的部署与使用

这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中&#xff0c;有效地利用机器学习工具来解决问题变得越来越重要。今天&#xff0c;我将引入一个名为DeepSeek 的工具&#xff0c;它作为一种强大的搜索引擎&a…

unity视频在场景中的使用

&#xff08;一&#xff09;软件操作在平面上显示视频播放 1.创建渲染器纹理 2.创建平面 3.在平面上添加Video player 4.视频拖拽到Video player 5.渲染模式选择渲染器纹理 6.把纹理拖到目标纹理上 7.把纹理拖到平面上就可以了 然后运行项目 8.结果 &#xff08;二&#…