Python程序调用Deepseek的API(使用requests而非openai)
Deepseek by Python
贴主在使用Python编写某功能时,尝试了使用Deepseek的API进行服务。官网没有给相关的demo,或者demo使用的openai的框架,不够灵活。
同时,网络上暂未出现合适的博客,讲授这个基础功能。于是写这个博客用来简单写几个demo,供各位使用。
github
仓库食用DeepSeekApi_UsePythongitcode
仓库食用Demo_Deepseek- 期待Star~
A0_请求DS服务器状态.py
根据status.deepseek.com
得到Deepseek官网服务器情况
# 该程序用于向status页请求服务器状态
# 可作为调用API,却返回超时后,自动筛查的脚本
## AIGC声明:DeepSeek v3- 网页
import requests
def check_deepseek_status():
url = "https://status.deepseek.com/api/v2/status.json"
# 2025/03 可用
try:
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功
data = response.json()
# 解析并打印状态信息
status = data.get('status', {
})
description = status.get('description', 'No description available')
indicator = status.get('indicator', 'No indicator available')
# 良好的时候,该json返回的全文是;该报文是2025/03/12 15:15 东八区时区申请的。
'''
{
"page": {
"id": "0db0rq26tg1l",
"name": "DeepSeek Service",
"url": "https://status.deepseek.com",
"time_zone": "Asia/Shanghai",
"updated_at": "2025-03-12T10:59:30.245+08:00"
},
"status": {
"indicator": "none",
"description": "All Systems Operational"
}
}
'''
print(f"Current DeepSeek Status: {
indicator}")
print(f"Description: {
description}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {
e}")
if __name__ == "__main__":
check_deepseek_status()
A1_deepseek问答.py
无日志、无上下文的简单问答
# 该程序用于进行deepseek进行简单的访问
# 需要重新更改API
# 1. 无日志
# 2. 无上下文(即每一次问答互不相关)
## AIGC声明:DeepSeek v3- 网页
import requests
# 替换为你的 DeepSeek API 密钥
DEFAULT_API_KEY = 'Change with Your apikey'
API_URL = 'https://api.deepseek.com/v1/chat/completions' # 确认正确的 API 端点
def get_deepseek_response(user_input,API_KEY):
headers = {
'Authorization': f'Bearer {
API_KEY}',
'Content-Type': 'application/json'
}
data = {
'model': 'deepseek-chat', # 模型名称
'messages': [
{
'role': 'user', 'content': user_input}
],
'max_tokens': 150, # 返回token最大值
'temperature': 0.7 # 温度,代码类使用0,数据分析1,创意、诗歌1.5
}
response = requests.post(API_URL, headers=headers, json=data)
if response.status_code == 200:
return response.json()['choices'][0]['message']['content'].strip()
else:
return f"Error: {
response.status_code}, {
response.text}"
def main():
# 提示用户输入 API 密钥
api_key = input("请输入你的 DeepSeek API 密钥(直接按回车使用默认密钥):").strip()
if not api_key:
api_key = DEFAULT_API_KEY
print("使用默认 API 密钥。")
print("DeepSeek Chatbot (输入 'exit' 或 'quit' 退出)")
while True:
user_input = input("You: ")
if user_input.lower() in ['exit', 'quit']:
print("Goodbye!")
break
response = get_deepseek_response(user_input,api_key)
print(f"DeepSeek: {
response}")
if __name__ == "__main__":
main()
A2_DS-无上下文-含提示信息.py
有实时日志、无上下文的简单测试问答
# 该程序用于进行deepseek进行简单的访问
# 需要重新更改API
# 输出时带有请求信息
# 1. 有日志,实时显示,不会存储
# 2. 无上下文(即每一次问答互不相关)
## AIGC声明:DeepSeek v3- 网页
import requests
import logging
from typing import Dict, Optional, Any
# 配置日志记录
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
class DeepSeekClient:
def __init__(self, api_key: str, api_url: str = "https://api.deepseek.com/v1/chat/completions"):
"""
初始化 DeepSeek 客户端。
:param api_key: DeepSeek API 密钥。
:param api_url: DeepSeek API 端点 URL,默认为聊天补全 API。
"""
self.api_key = api_key
self.api_url = api_url
self.session = requests.Session() # 使用会话以复用连接
self.session.headers.update({
'Authorization': f'Bearer {
self.api_key}',
'Content-Type': 'application/json'
})
def get_response(self, prompt: str, model: str = "deepseek-chat", max_tokens: int = 150, temperature: float = 0.7) -> Optional[str]:
"""
调用 DeepSeek API 获取响应。
:param prompt: 用户输入的提示文本。
:param model: 使用的模型名称,默认为 "deepseek-chat"。
:param max_tokens: 生成文本的最大 token 数,默认为 150。
:param temperature: 控制生成文本的随机性,默认为 0.7。
:return: 返回生成的文本,如果出错则返回 None。
"""
data = {
'model': model,
'messages': [{
'role': 'user', 'content': prompt}],
'max_tokens': max_tokens,
'temperature': temperature
}
try:
logger.info(f"Sending request to {
self.api_url} with data: {
data}")
response = self.session.post(self.api_url, json=data)
response.raise_for_status() # 如果响应状态码不是 200,抛出异常
result = response.json()
logger.info(f"Received response: {
result}")
# 提取生成的文本
if 'choices' in result and len(result['choices']) > 0:
return result['choices'][0]['message']['content'].strip()
else:
logger.error("No choices found in the response.")
return None
except requests.exceptions.RequestException as e:
logger.error(f"Request failed: {
e}")
return None
except KeyError as e:
logger.error(f"Invalid response format: {
e}")
return None
def close(self):
"""关闭会话,释放资源。"""
self.session.close()
def main():
# 替换为你的 DeepSeek API 密钥
DEFAULT_API_KEY = 'Change with Your apikey'
# 提示用户输入 API 密钥
api_key = input("请输入你的 DeepSeek API 密钥(直接按回车使用默认密钥):").strip()
if not api_key:
api_key = DEFAULT_API_KEY
print("使用默认 API 密钥。")
client = DeepSeekClient(api_key=api_key)
print("DeepSeek Chatbot (Type 'exit' or 'quit' to end)")
while True:
user_input = input("You: ")
if user_input.lower() in ['exit', 'quit']:
print("Goodbye!")
break
response = client.get_response(user_input)
if response:
print(f"DeepSeek: {
response}")
else:
print("Sorry, an error occurred while processing your request.")
client.close()
if __name__ == "__main__":
main()
A3_DS含有上下文.py
有实时日志、有上下文的简单测试问答
# 该程序用于进行deepseek进行简单的访问
# 需要重新更改API
# 输出时带有请求信息
# 带有上下文(使用clear清除上下文)
# 1. 有日志,实时显示,不会存储
# 2. 有上下文
## AIGC声明:DeepSeek v3- 网页
import requests
import logging
from typing import Dict, List, Optional, Any
# 配置日志记录
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
class DeepSeekClient:
def __init__(self, api_key: str, api_url: str = "https://api.deepseek.com/v1/chat/completions"):
"""
初始化 DeepSeek 客户端。
:param api_key: DeepSeek API 密钥。
:param api_url: DeepSeek API 端点 URL,默认为聊天补全 API。
"""
self.api_key = api_key
self.api_url = api_url
self.session = requests.Session() # 使用会话以复用连接
self.session.headers.update({
'Authorization': f'Bearer {
self.api_key}',
'Content-Type': 'application/json'
})
self.messages = [] # 存储对话上下文
def get_response(self, prompt: str, model: str = "deepseek-chat", max_tokens: int = 150, temperature: float = 0.7) -> Optional[str]:
"""
调用 DeepSeek API 获取响应,并维护对话上下文。
:param prompt: 用户输入的提示文本。
:param model: 使用的模型名称,默认为 "deepseek-chat"。
:param max_tokens: 生成文本的最大 token 数,默认为 150。
:param temperature: 控制生成文本的随机性,默认为 0.7。
:return: 返回生成的文本,如果出错则返回 None。
"""
# 将用户输入添加到上下文
self.messages.append({
'role': 'user', 'content': prompt})
data = {
'model': model,
'messages': self.messages, # 包含上下文的对话记录
'max_tokens': max_tokens,
'temperature': temperature
}
try:
logger.info(f"Sending request to {
self.api_url} with data: {
data}")
response = self.session.post(self.api_url, json=data)
response.raise_for_status() # 如果响应状态码不是 200,抛出异常
result = response.json()
logger.info(f"Received response: {
result}")
# 提取生成的文本
if 'choices' in result and len(result['choices']) > 0:
assistant_reply = result['choices'][0]['message']['content'].strip()
# 将助手的回复添加到上下文
self.messages.append({
'role': 'assistant', 'content': assistant_reply})
return assistant_reply
else:
logger.error("No choices found in the response.")
return None
except requests.exceptions.RequestException as e:
logger.error(f"Request failed: {
e}")
return None
except KeyError as e:
logger.error(f"Invalid response format: {
e}")
return None
def clear_context(self):
"""清空对话上下文。"""
self.messages = []
def close(self):
"""关闭会话,释放资源。"""
self.session.close()
def main():
# 替换为你的 DeepSeek API 密钥
DEFAULT_API_KEY = 'Change with Your apikey'
# 提示用户输入 API 密钥
api_key = input("请输入你的 DeepSeek API 密钥(直接按回车使用默认密钥):").strip()
if not api_key:
api_key = DEFAULT_API_KEY
print("使用默认 API 密钥。")
client = DeepSeekClient(api_key=api_key)
print("DeepSeek Chatbot (Type 'exit' or 'quit' to end, 'clear' to reset context)")
while True:
user_input = input("You: ")
if user_input.lower() in ['exit', 'quit']:
print("Goodbye!")
break
elif user_input.lower() == 'clear':
client.clear_context()
print("Context cleared.")
continue
response = client.get_response(user_input)
if response:
print(f"DeepSeek: {
response}")
else:
print("Sorry, an error occurred while processing your request.")
client.close()
if __name__ == "__main__":
main()
A4_DS含有上下文-存log.py
有实时日志、有上下文的简单测试问答;使用clear
清除上下文;使用exit
退出时写入日志
# 该程序用于进行deepseek进行简单的访问
# 需要重新更改API
# 输出不带有请求信息
# 带有上下文(使用clear清除上下文)
# 1. 有日志,不实时显示,存储
# 2. 有上下文
## AIGC声明:DeepSeek v3- 网页
import requests
import logging
import time
from typing import Optional
# 默认的 API 密钥和端点
DEFAULT_API_KEY = 'Change with Your apikey'
API_URL = 'https://api.deepseek.com/v1/chat/completions' # 确认正确的 API 端点
class DeepSeekClient:
def __init__(self, api_key: str, api_url: str = API_URL):
"""
初始化 DeepSeek 客户端。
:param api_key: DeepSeek API 密钥。
:param api_url: DeepSeek API 端点 URL,默认为聊天补全 API。
"""
self.api_key = api_key
self.api_url = api_url
self.session = requests.Session() # 使用会话以复用连接
self.session.headers.update({
'Authorization': f'Bearer {
self.api_key}',
'Content-Type': 'application/json'
})
self.messages = [] # 存储对话上下文
def get_response(self, prompt: str, model: str = "deepseek-chat", max_tokens: int = 150, temperature: float = 0.7) -> Optional[str]:
"""
调用 DeepSeek API 获取响应,并维护对话上下文。
:param prompt: 用户输入的提示文本。
:param model: 使用的模型名称,默认为 "deepseek-chat"。
:param max_tokens: 生成文本的最大 token 数,默认为 150。
:param temperature: 控制生成文本的随机性,默认为 0.7。
:return: 返回生成的文本,如果出错则返回 None。
"""
# 将用户输入添加到上下文
self.messages.append({
'role': 'user', 'content': prompt})
data = {
'model': model,
'messages': self.messages, # 包含上下文的对话记录
'max_tokens': max_tokens,
'temperature': temperature
}
try:
logging.info(f"Sending request to {
self.api_url} with data: {
data}")
response = self.session.post(self.api_url, json=data)
response.raise_for_status() # 如果响应状态码不是 200,抛出异常
result = response.json()
logging.info(f"Received response: {
result}")
# 提取生成的文本
if 'choices' in result and len(result['choices']) > 0:
assistant_reply = result['choices'][0]['message']['content'].strip()
# 将助手的回复添加到上下文
self.messages.append({
'role': 'assistant', 'content': assistant_reply})
return assistant_reply
else:
logging.error("No choices found in the response.")
return None
except requests.exceptions.RequestException as e:
logging.error(f"Request failed: {
e}")
return None
except KeyError as e:
logging.error(f"Invalid response format: {
e}")
return None
def clear_context(self):
"""清空对话上下文。"""
self.messages = []
logging.info("Context cleared.")
def close(self):
"""关闭会话,释放资源。"""
self.session.close()
logging.info("Session closed.")
def setup_logging():
"""
配置日志记录,将日志保存到以时间戳命名的文件中。
"""
timestamp = time.strftime("%Y%m%d_%H%M%S")
log_filename = f"deepseek_chatbot_{
timestamp}.log"
# 创建日志记录器
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 创建文件处理器
file_handler = logging.FileHandler(log_filename)
file_handler.setLevel(logging.INFO)
# 创建日志格式
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
# 添加文件处理器到日志记录器
logger.addHandler(file_handler)
def main():
# 配置日志记录
setup_logging()
# 提示用户输入 API 密钥
api_key = input("请输入你的 DeepSeek API 密钥(直接按回车使用默认密钥):").strip()
if not api_key:
api_key = DEFAULT_API_KEY
print("使用默认 API 密钥。")
logging.info("Using default API key.")
client = DeepSeekClient(api_key=api_key)
print("DeepSeek Chatbot (输入 'exit' 或 'quit' 退出, 输入 'clear' 清空上下文)")
while True:
user_input = input("You: ")
if user_input.lower() in ['exit', 'quit']:
print("Goodbye!")
logging.info("Exiting program.")
break
elif user_input.lower() == 'clear':
client.clear_context()
print("上下文已清空。")
continue
response = client.get_response(user_input)
if response:
print(f"DeepSeek: {
response}")
else:
print("抱歉,处理你的请求时出错了。")
client.close()
if __name__ == "__main__":
main()
备注
- AIGC声明:使用Deepseek V3 模型,在官方网页版使用。
- 需使用自己的API_KEY