Windows DeepSeek API调用基础教程-Python
DeepSeek API 调用🚀
在最近DeepSeek大火之后,在各个媒体上都能看到对这个大模型的报道,这个使用MoE的架构的大模型,在使用体验上,确实让我眼前一亮,我自己平时也是已经在用着GPT-o1,对比下来发现在我的日常使用中,无论是代码还是一些论文方面的翻译或者编写目录方面回答的内容对比o1的回复都是更符合我心里想要的,除了服务器一直被攻击导致经常卡住之外,回答的质量上我认为是非常OK的,趁着个人寒假的尾声也是打算研究一下
本来这篇文章是打算把文档里的内容都玩一遍,奈何DeepSeek服务器实在是访问成功率太低了,干运行没反应,我之前研究通义千问和GPT的时候都还比较顺利,应该是被攻击的原因吧,所以这篇就先算是一个简单的基础内容吧,等服务器缓过来了再补充。
- 多轮对话、流式输出(已写完)
- 推理模型、对话前缀续写、FIM补全、Function Calling 等(还没写)
之前写过的其他模型API调用文章:
GPTAPI 调用:ChatGPT4 API-Key初探-本地调用API进行多轮对话方和流式输出
通义千问API 调用 :调用阿里通义千问大语言模型API-小白新手教程-python
文章目录
- DeepSeek API 调用🚀
- 1.API Key 申请
- 2.API Key 充值
- 3.API Key 调用
- 3.1 环境conda配置并安装openai库(有基础可跳过)
- 3.2 单轮对话非流式输出例程
- 3.4 单轮对话流式输出例程
- 3.5 多轮对话非流式输出例程
- 3.6 多轮对话流式输出例程
- 5. 总结
1.API Key 申请
想要申请API Key 就要进入DeepSeek 的 API 开放平台 ,打开DeepSeek API 官网 https://www.deepseek.com/ 点击的右上角链接进入API开放平台。

之后点击左侧的菜单栏中的 API Keys 选项。

跳转进入如下界面,点击创建API Key。

在输入框中先输入自定义的一个 API Key 的名称然后点击创建。

然后就会得到一个 API Key ,点击复制粘贴到别的地方备用(我直接粘到了微信文件传输助手对话框里)然后点击关闭,需要注意的是,API Key 生成之后是不能再从开发平台完整查看的所以要保存好,这也是行业惯例了。

2.API Key 充值
这里就接上一步点击关闭之后的页面继续操作了,点击左侧菜单栏中的充值。

然后如果第一次使用的话,需要去进行实名认证,而且这个证件类型只开放中国大陆二代居民身份证,也就是外国人用不了哈哈哈。

点击去认证之后给出如下弹窗,输入姓名和身份证号,点击弹窗底部文字开头的确认框进行知晓操作确认,然后点击右下角的提交认证。

点击提交确认了之后,出现二级弹窗提示个人认证可以转为企业认证,但是企业认证不能转为个人认证,然后点击提交。

之后回到充值界面,页面上方会有一个认证成功的小弹窗出现,然后很快就消失了。

然后这里的话我选择用微信充值,金额选一个默认的十块钱,然后点击去支付。


扫码充值成功之后会提示充值成功查看交易记录,可以点击确定去看一下,不想看就直接叉掉。

点击确定之后会跳转进入到账单页面,在这个页面中可以查看订单编号和交易记录,还能开发票。

3.API Key 调用
调用方式我们直接跟着接口文档的流程来,接口文档网址为:https://api-docs.deepseek.com/zh-cn/

然后在当前页面下滑可以找到调用对话API的 Hello world 代码,这里我们先去配置一下环境。

3.1 环境conda配置并安装openai库(有基础可跳过)
这里我使用 Anaconda 新建一个python 环境,python版本选择官网目前的最新的稳定版本3.11,打开Anaconda Prompt 输入下面的命令,新建一个名为deepseek的pyhon版本为3.11的虚拟环境。
conda create --name deepseek python=3.11

在安装完成后输入下面的命令激活环境。
conda activate deepseek

安装 openai 库,在命令行中输入下下方安装命令,如果嫌慢的话就自己配置一下清华源,我网速还行就不弄了。
pip install openai

打开pycharm自己配置一下解释器,这里如果不会的话,可以找会的同学帮助一下,这里就不展开了。

3.2 单轮对话非流式输出例程
官网给出的代码如下,在运行时候记得把代码中"<DeepSeek API Key>"部分双引号中的内容 替换为自己的API-Key替换完之后形如"sk-xxxxxxxxxxx"。之后运行代码即可。
# 导入OpenAI库中的OpenAI类
from openai import OpenAI# 创建OpenAI客户端实例
# - api_key参数:用于身份验证的API密钥(需替换为实际密钥)
# - base_url参数:指定DeepSeek API的接入地址
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")# 创建聊天补全请求
response = client.chat.completions.create(# 指定使用的模型为deepseek-chatmodel="deepseek-chat",# 定义对话消息列表messages=[# 系统角色消息:设置AI助手的基本行为准则{"role": "system", "content": "You are a helpful assistant"},# 用户角色消息:用户的实际提问内容{"role": "user", "content": "Hello"},],# 设置非流式响应(等待完整响应返回)stream=False
)# 输出响应结果
# - response.choices[0]:获取第一个响应选项
# - message.content:提取AI生成的文本内容
print(response.choices[0].message.content)

3.4 单轮对话流式输出例程
这个代码官网没写,按照学习逻辑这里应该补充下这个代码,所以我就自己动手写了一下,主要改动就是把 response 中的stream 参数从 Flase改为Ture然后返回的 response 就变为了一个迭代器,之后用for训练遍历读取就好了, 动图中的API-Key 已被我禁用。也是非常简单代码如下:
# Please install OpenAI SDK first: `pip3 install openai`# 导入OpenAI库中的OpenAI类
from openai import OpenAI# 创建OpenAI客户端实例,指定API密钥和API接入的基础URL
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")# 向API发送聊天补全请求,开启流式响应模式
response = client.chat.completions.create(model="deepseek-chat", # 指定使用的聊天模型,这里使用deepseek-chat模型messages=[ # 定义对话的历史消息,作为聊天上下文{"role": "system", "content": "You are a helpful assistant"}, # 系统消息,定义助手的角色和行为{"role": "user", "content": "Hello"}, # 用户消息,用户的实际提问],stream=True # 开启流式响应,意味着返回的内容会分块逐步到达,而非一次性返回
)# 遍历流式响应的每个“块”并逐块处理响应内容
for chunk in response:# 从当前块中获取助手生成的内容并打印出来print(chunk.choices[0].delta.content, end='') # `chunk.choices[0].delta.content` 提取当前块中的文本内容,`end=''`表示不换行

3.5 多轮对话非流式输出例程
- 官方版
在单轮对话之后,接下运行多轮对话的例程,官网文档多轮对话,网址链接如下。
https://api-docs.deepseek.com/zh-cn/guides/multi_round_chat

# 导入OpenAI库中的OpenAI类
from openai import OpenAI# 创建OpenAI客户端实例,指定API密钥和API接入的基础URL
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")# 第1轮对话
# 初始化消息列表,只包含用户提问“世界上最高的山是什么?”
messages = [{"role": "user", "content": "What's the highest mountain in the world?"}]# 向API发送聊天补全请求,请求助手回答第一个问题
response = client.chat.completions.create(model="deepseek-chat", # 指定使用的聊天模型messages=messages # 提供当前的对话消息历史
)# 将助手返回的第一个选项的消息(助手的回答)添加到消息列表中
messages.append(response.choices[0].message)# 打印第1轮对话的消息内容(包含用户提问和助手回答)
print(f"Messages Round 1: {messages}")# 第2轮对话
# 在消息列表中添加用户的新提问:“第二高的山是什么?”
messages.append({"role": "user", "content": "What is the second?"})# 向API发送新的聊天补全请求,请求助手回答第二个问题
response = client.chat.completions.create(model="deepseek-chat", # 指定使用的聊天模型messages=messages # 提供当前的对话消息历史(包含了用户和助手的对话内容)
)# 将助手返回的第一个选项的消息(助手的回答)添加到消息列表中
messages.append(response.choices[0].message)# 打印第2轮对话的消息内容(包含用户提问、助手回答以及两轮对话的完整记录)
print(f"Messages Round 2: {messages}")

Messages Round 1: [{'role': 'user', 'content': "What's the highest mountain in the world?"}, ChatCompletionMessage(content='The highest mountain in the world is **Mount Everest**, which stands at **8,848.86 meters (29,031.7 feet)** above sea level. It is located in the Mahalangur Himal sub-range of the Himalayas, on the border between Nepal and the Tibet Autonomous Region of China. Mount Everest is a prominent peak and a significant challenge for mountaineers, attracting climbers from around the world.', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None)]
Messages Round 2: [{'role': 'user', 'content': "What's the highest mountain in the world?"}, ChatCompletionMessage(content='The highest mountain in the world is **Mount Everest**, which stands at **8,848.86 meters (29,031.7 feet)** above sea level. It is located in the Mahalangur Himal sub-range of the Himalayas, on the border between Nepal and the Tibet Autonomous Region of China. Mount Everest is a prominent peak and a significant challenge for mountaineers, attracting climbers from around the world.', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None), {'role': 'user', 'content': 'What is the second?'}, ChatCompletionMessage(content='The second-highest mountain in the world is **K2**, also known as **Mount Godwin-Austen** or **Chhogori**. It stands at **8,611 meters (28,251 feet)** above sea level. K2 is located in the **Karakoram Range**, on the border between **Pakistan** and **China** (specifically, the Xinjiang region). \n\nK2 is often considered more challenging and dangerous to climb than Mount Everest due to its steep slopes, unpredictable weather, and technical climbing requirements. It is sometimes referred to as the **"Savage Mountain"** because of its high fatality rate among climbers.', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None)]
- 精简版
运行了官方版但官方版本的输出带着各种数据格式比较晦涩难懂,所以我就自己又写了只输出文本内容的精简版的。
# 请先安装OpenAI SDK:`pip3 install openai`
# 导入OpenAI库中的OpenAI类
from openai import OpenAI# 创建OpenAI客户端实例,指定API密钥和API接入的基础URL
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")# 初始化一个消息列表,包含系统消息和用户的初始提问
messages = [{"role": "system", "content": "You are a helpful assistant"}, # 系统消息,定义助手的角色{"role": "user", "content": "What's the highest mountain in the world?"}, # 用户提问]# 向API发送聊天补全请求,请求助手回答问题
response = client.chat.completions.create(model="deepseek-chat", # 指定使用的聊天模型messages=messages, # 提供当前的对话消息历史stream=False # 设置为非流式响应,等待完整响应返回
)# 打印助手返回的第一个选项的消息内容(即助手的回答)
print(response.choices[0].message.content)# 将助手的回答添加到消息列表中,作为助手的回复
messages.append({"role": "assistant", "content": response.choices[0].message.content})# 用户接下来提问“第二高的山是什么?”
messages.append({"role": "user", "content": "What is the second?"})# 向API发送新的聊天补全请求,请求助手回答第二个问题
response = client.chat.completions.create(model="deepseek-chat", # 指定使用的聊天模型messages=messages, # 提供当前的对话消息历史(包含了用户的第一次提问和助手的回答)stream=False # 设置为非流式响应,等待完整响应返回
)# 打印助手返回的第一个选项的消息内容(即第二个问题的回答)
print(response.choices[0].message.content)

-
第一轮回复
The highest mountain in the world is Mount Everest, which stands at 8,848.86 meters (29,031.7 feet) above sea level. It is located in the Mahalangur Himal sub-range of the Himalayas, on the border between Nepal and the Tibet Autonomous Region of China. Mount Everest is a popular destination for climbers, though it presents significant challenges due to its extreme altitude and harsh weather conditions. -
第二轮回复
The second-highest mountain in the world is K2, also known as Mount Godwin-Austen or Chhogori. It stands at 8,611 meters (28,251 feet) above sea level. K2 is located in the Karakoram Range, on the border between Pakistan (in Gilgit-Baltistan) and China (in Xinjiang).
K2 is often considered more challenging to climb than Mount Everest due to its steep slopes, unpredictable weather, and technical difficulties. It has earned the nickname “Savage Mountain” because of its high fatality rate among climbers.
3.6 多轮对话流式输出例程
这个官方应该是也没提供,这里我对我上一步写的精简版进行一下改造,但不得不吐槽的是,这个API实在是太卡了,估计也是被美国攻击的比较惨。
# Please install OpenAI SDK first: `pip3 install openai`# 导入OpenAI库中的OpenAI类
from openai import OpenAI# 创建OpenAI客户端实例,指定API密钥和API接入的基础URL
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")# 初始化一个消息列表,包含系统消息,指定助手角色为“有帮助的助手”
messages = [{"role": "system", "content": "You are a helpful assistant"}]# 启动一个无限循环,模拟持续对话
while True:# 初始化变量,用于存储助手生成的全部回复内容assistant_content = ""# 获取用户输入的问题user_question = input("User:")# 将用户输入的消息添加到消息列表中,作为用户消息messages.append({"role": "user", "content": user_question})# 向API发送聊天请求,启用流式响应response = client.chat.completions.create(model="deepseek-chat", # 指定使用的聊天模型messages=messages, # 提供当前的对话消息历史stream=True # 开启流式响应模式,逐块获取响应)# 遍历流式响应,逐块获取并输出助手的回复内容for chunk in response:# 获取当前块中的助手消息内容chunk_message = chunk.choices[0].delta.content# 将助手消息内容添加到助手的回复文本中assistant_content += chunk_message# 打印助手生成的内容,避免换行输出(end='')print(chunk_message, end='')# 将助手的完整回复(包括流式返回的多个块内容)加入到消息列表中messages.append({"role": "assistant", "content": assistant_content})# 输出一个换行符以分隔不同的对话轮次print()

5. 总结
本来打算趁一次把DeepSeek文档中的使用方法都研究一遍,奈何服务器实在是太卡了,花钱访问都很难成功,导致我直接就是放弃了,等之后再补上。最后把这篇博客花的多少钱贴出来,看下正好也看到通知,服务器爆了不让充值了哈哈哈。

相关文章:
Windows DeepSeek API调用基础教程-Python
DeepSeek API 调用🚀 在最近DeepSeek大火之后,在各个媒体上都能看到对这个大模型的报道,这个使用MoE的架构的大模型,在使用体验上,确实让我眼前一亮,我自己平时也是已经在用着GPT-o1,对比下来发…...
达梦数据库从单主模式转换为主备模式
目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建备库数据库配置备库配置文件dm.ini 文件复制主库的 …...
SpringUI Web高端动态交互元件库
Axure Web高端动态交互元件库是一个专为Web设计与开发领域设计的高质量资源集合,旨在加速原型设计和开发流程。以下是关于这个元件库的详细介绍: 一、概述 Axure Web高端动态交互元件库是一个集成了多种预制、高质量交互组件的工具集合。这些组件经过精…...
ES冷热数据分离配置
冷热数据是根据索引创建时间来进行迁移的。一旦迁移到冷数据节点,则无法再恢复成热数据,因为热数据节点中该索引已经没有分片存在了。 基于Docker搭建ES集群,并设置冷热数据节点 配置冷热数据迁移策略 PUT https://192.168.x.xx:19200/_ilm/policy/my…...
七大排序思想
目录 七大排序的时间复杂度和稳定性 排序 插入排序 简单插入排序 希尔排序 选择排序 简单选择排序 堆排序 交换排序 冒泡排序 快速排序 快排的递归实现 hoare版本的快排 挖坑法的快排 双指针法的快排 快排的非递归 归并排序 归并的递归实现 归并的非递归实现…...
制作PE启动盘(内含Win11 iso镜像)
前言 本文用于记录制作PE启动盘过程,学习记录用,如有不对请指出,谢谢! 参考视频: 1. 微PE下载:https://www.bilibili.com/video/BV1vT4y1n7JX/?spm_id_from333.788.top_right_bar_window_history.conte…...
css字体样式与文本样式详解
目录 一、CSS字体样式 1. 字体类型(font-family) 2. 字体大小(font-size) 3. 字体粗细(font-weight) 4. 字体风格(font-style) 5. 字体颜色(color) 6. …...
游戏引擎学习第89天
回顾 由于一直没有渲染器,终于决定开始动手做一个渲染器,虽然开始时并不确定该如何进行,但一旦开始做,发现这其实是正确的决定。因此,接下来可能会花一到两周的时间来编写渲染器,甚至可能更长时间…...
derpseek来讲lua
Lua 是一种轻量级、高效、可嵌入的脚本语言,广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念: 1. 特点 轻量级:Lua 的核心非常小,适合嵌入到其他应用程序中。高效:Lua 的执…...
HL7 学习(一)
一、概述: 1、医疗信息化是个很宽广的范围和话题,要实现医疗信息化,必须使用DICOM,HL7 等标准,加上IHE(医疗一体化); 2、目前对于DICOM和IHE只是大概了解,知道是是干什么的,诸多细…...
Linux学习笔记16---高精度延时实验
延时函数是很常用的 API 函数,在前面的实验中我们使用循环来实现延时函数,但是使用循环来实现的延时函数不准确,误差会很大。虽然使用到延时函数的地方精度要求都不会很严格( 要求严格的话就使用硬件定时器了 ) ,但是延时函数肯定…...
STM32HAL库RTC时钟
RTC的结构非常像一个简化版的定时器,核心当然是一个计数器,与定时器的16位计数器只能从0计数到65535不同,RTC的计数器是32位的,可以从0技术到4294967295,RTC的计数器前还有个RTC预分频器,可以将时钟源的时钟…...
Word List 2
词汇颜色标识解释 词汇表中的生词 词汇表中的词组成的搭配、派生词 例句中的生词 我自己写的生词(用于区分易混淆的词,无颜色标识) 不认识的单词或句式 单词的主要汉语意思 不太理解的句子语法和结构 Word List 2 英文音标中文regi…...
杨氏数组中查找某一数值是否存在
判断数据是否存在于杨氏矩阵中 (小米真题) 题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N) …...
51单片机 02 独立按键
一、独立按键控制LED亮灭 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…...
AI + 编程时代,飞算JavaAI如何引领行业趋势变革
在当今科技飞速发展的浪潮下,AI 与编程的深度融合已成为不可阻挡的时代趋势,正重塑着各个行业的格局。在这场变革中,飞算JavaAI脱颖而出,凭借其卓越的特性和创新的理念,在 AI 编程领域展现出强大的引领力量࿰…...
计算机网络之物理层通信基础(电路交换、报文交换与分组交换)
一、电路交换 工作原理: 电路交换是在数据传输期间,源结点与目的结点之间建立一条由中间结点构成的专用物理连接线路,并在数据传输结束之前保持这条线路。整个报文的比特流连续地从源点直达终点,好像在一个管道中传送。 特点&am…...
Deepseek本地部署指南:在linux服务器部署,在mac远程web-ui访问
1. 在Linux服务器上部署DeepSeek模型 要在 Linux 上通过 Ollama 安装和使用模型,您可以按照以下步骤进行操作: 步骤 1:安装 Ollama 安装 Ollama: 使用以下命令安装 Ollama: curl -sSfL https://ollama.com/download.…...
社长的智慧
社长智慧 1. 社长智慧2. 联系方式获取方式3. 其他文章快来试试吧☺️ 1. 社长智慧 社长智慧👈点击链接查看文章 2. 联系方式获取方式 更多文章获取做点击获取更多文章。 3. 其他文章 如果对您有帮助,请您点赞、收藏、关注、转发,让更多的…...
1-R语言概述
1.认识R语言 1.1 选择R语言的依据 免费的软件编程方便,语言灵活,图形功能强大优秀的内在帮助系统高质量、广泛的统计分析、数据挖掘平台国际上R语言已然是专业数据分析领域的标准 1.2 R的来源 R是S语言的一种实现。S语言是由 AT&T贝尔实验室…...
【BQ3568HM开发板】智能家居中控屏连接华为云IoTDA物联网平台
目录 引言 安装OpenHarmony的MQTT库 华为云平台的操作 建立设备 建立物模型 连接华为云平台 发布LED灯状态 代码重构 测试结果 接收平台发送的属性修改命令 设备侧API Topic 下行请求参数说明 上行响应参数说明 程序修改 应用侧API 测试设备属性设置功能 结语…...
mac 安装 dotnet 环境
目录 一、安装准备 二、安装方法(两种任选) 方法 1:使用官方安装包(推荐新手) 方法 2:使用 Homebrew(适合开发者) 1. 安装 Homebrew(如未安装) 2. 通过 …...
Python爬虫--requests库
一、安装 requests pip install requests二、基础用法 1. 发送 GET 请求 import requestsresponse requests.get("https://www.example.com") print(response.status_code) # 状态码(200表示成功) print(response.text) # 响应内…...
java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法
java 8 在 idea 无法创建 java spring boot 项目的 变通解决办法 spring boot 3 官方强制 要用 java 17 ,但是 不想安装java 17的 ,但是又想 使用 spring boot ,可以这样 : 在这个网站 https://start.aliyun.com/ 选择 你相对…...
web-文件上传-CTFHub
前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…...
langchain教程-5.DocumentLoader/多种文档加载器
前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…...
SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具
SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具 一、SQLAIchemy的介绍二、数据库引擎1、支持的数据库1.1、sqlite数据库1.2、MySQL数据库1.3、数据库引擎的参数 三、定义模型类1、定义模型2、engine负责数据库迁移 四、alembic数据库迁移⼯具1、安装alembic2、初始化alemb…...
C# OpenCV机器视觉:图像风格迁移
在一个充满奇思妙想的创意工作室里,小李正像只热锅上的蚂蚁,为客户的项目挠破了脑袋,急需寻找灵感的火花。他望着眼前那幅平淡无奇的风景图像,心想:“这玩意儿也太普通啦,就像一杯白开水,怎么能…...
6955BA/C/E信号收发仪
6955BA/C/E信号收发仪 6955BA/C/E信号收发仪为符合PXIe总线标准的3U模块化产品,该模块频率范围覆盖40MHz~8GHz/12GHz/26.5GHz、最大信号带宽1GHz、单边带相位噪声为-120dBc/Hz20kHz频偏(载波10GHz,典型值),具有矢量信…...
语言月赛 202311【基因】题解(AC)
》》》点我查看「视频」详解》》》 [语言月赛 202311] 基因 题目描述 有一个长度为 n n n 的字符串 S S S。其只包含有大写字母。 小 A 将 S S S 进行翻转后,得到另一个字符串 S ′ S S′。两个字符串 S S S 与 S ′ S S′ 对应配对。例如说,对…...
