前言
你的DeepSeek最近是不是总是提示”服务器繁忙,请稍后再试。”,尝试过了多次重新生成后,还是如此。之前DeepSeek官网连续发布2条公告称,DeepSeek线上服务受到大规模恶意攻击。该平台的对话框疑似遭遇了“分布式拒绝服务攻击”(DDos),大量分布在不同地点的机器对目标进行攻击,消耗被攻击对象的网络带宽或系统资源,导致其网络或系统不胜负荷而无法提供正常的网络服务。特别对我们这种有点依赖AI审查、修改和优化代码的码农,确实很影响体验感了,所以有没有一种方法能更顺畅的使用到DeepSeek,本文提供几种思路来实现。
DS Api
这个是DeepSeek官方的开发平台,创建API key 后可以使用以下样例脚本的来访问 DeepSeek API。样例为非流式输出,您可以将 stream 设置为 true 来使用流式输出。
# Please install OpenAI SDK first: `pip3 install openai`
from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)
print(response.choices[0].message.content)
模型 & 价格细节如下:
1.deepseek-chat 模型已经升级为 DeepSeek-V3;deepseek-reasoner 模型为新模型 DeepSeek-R1。
2.思维链为deepseek-reasoner模型在给出正式回答之前的思考过程,其原理详见推理模型。
3.如未指定 max_tokens,默认最大输出长度为 4K。请调整 max_tokens 以支持更长的输出。
4.关于上下文缓存的细节,请参考DeepSeek 硬盘缓存。
5.deepseek-reasoner的输出 token 数包含了思维链和最终答案的所有 token,其计价相同。
不过这个问题是,现在(2025.02.19)它是收费的,没有免费额度,而且它暂停充值(当前服务器资源紧张,为避免对您造成业务影响,我们已暂停 API 服务充值。存量充值金额可继续调用,敬请谅解!),如果您是之前充值的还可以继续使用。
那么这种方式我也没进行验证,排队情况、返回速度和可用性等都不得而知。
第三方接口
这种方式是接入第三方部署的接口,直接交互,这里是B站【秋芝2046】整理的DeepSeek 第三方API调用平台:
这里尝试几个免费或者赠送调用次数的平台。
OpenRouter
OpenRouter的方式是注册并创建API Key的形式调用,官方推荐的openai-python代码如下:
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<OPENROUTER_API_KEY>",
)
completion = client.chat.completions.create(
extra_headers={
"HTTP-Referer": "<YOUR_SITE_URL>", # Optional. Site URL for rankings on openrouter.ai.
"X-Title": "<YOUR_SITE_NAME>", # Optional. Site title for rankings on openrouter.ai.
},
extra_body={},
model="deepseek/deepseek-r1:free",
messages=[
{
"role": "user",
"content": "What is the meaning of life?"
}
]
)
print(completion.choices[0].message.content)
这里我给他修改为了代GUI的形式:
from openai import OpenAI
import tkinter as tk
from tkinter import scrolledtext, ttk
import threading
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="你的key"
)
class ChatApp:
def __init__(self, root):
self.root = root
self.root.title("DS AI助手")
self.messages = []
self.generating = False
self.stop_requested = False
# 创建界面组件
self.create_widgets()
def create_widgets(self):
# 主界面布局
main_frame = ttk.Frame(self.root)
main_frame.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# 对话显示区域
self.chat_display = scrolledtext.ScrolledText(
main_frame, wrap=tk.WORD, state='disabled',
font=('Microsoft YaHei', 10), height=20
)
self.chat_display.pack(fill=tk.BOTH, expand=True)
# 控制面板
control_frame = ttk.Frame(main_frame)
control_frame.pack(fill=tk.X, pady=5)
# 输入框
self.input_box = tk.Text(
control_frame, height=4,
font=('Microsoft YaHei', 10), wrap=tk.WORD
)
self.input_box.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0, 5))
# 按钮框架
btn_frame = ttk.Frame(control_frame)
btn_frame.pack(side=tk.RIGHT)
# 发送按钮
self.send_btn = ttk.Button(
btn_frame, text="发送",
command=self.start_generation, width=8
)
self.send_btn.pack(pady=2)
# 停止按钮
self.stop_btn = ttk.Button(
btn_frame, text="停止",
command=self.stop_generation, width=8, state=tk.DISABLED
)
self.stop_btn.pack(pady=2)
# 绑定快捷键
self.root.bind('<Return>', lambda e: self.start_generation())
self.root.bind('<Shift-Return>', lambda e: self.insert_newline())
def insert_newline(self):
self.input_box.insert(tk.INSERT, '\n')
return "break"
def update_display(self, role, content):
self.chat_display.configure(state='normal')
tag = 'user' if role == "You" else 'assistant'
self.chat_display.insert(tk.END, f"{role}: ", ('bold', tag))
self.chat_display.insert(tk.END, f"{content}\n\n", tag)
self.chat_display.configure(state='disabled')
self.chat_display.see(tk.END)
def start_generation(self):
if self.generating:
return
user_input = self.input_box.get("1.0", tk.END).strip()
if not user_input:
return
self.input_box.delete("1.0", tk.END)
self.messages.append({"role": "user", "content": user_input})
self.update_display("You", user_input)
self.generating = True
self.stop_requested = False
self.send_btn.config(state=tk.DISABLED)
self.stop_btn.config(state=tk.NORMAL)
threading.Thread(target=self.generate_response, daemon=True).start()
def stop_generation(self):
self.stop_requested = True
def generate_response(self):
full_response = ""
try:
completion = client.chat.completions.create(
model="deepseek/deepseek-r1:free",
messages=self.messages,
extra_headers={
"HTTP-Referer": "http://localhost",
"X-Title": "My Chat App"
},
extra_body={},
stream=True
)
self.root.after(0, self.update_display, "Assistant", "")
for chunk in completion:
if self.stop_requested:
break
if chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
full_response += content
self.root.after(0, self.append_response, content)
except Exception as e:
full_response = f"发生错误: {str(e)}"
self.root.after(0, self.update_display, "System", full_response)
finally:
if not self.stop_requested and full_response:
self.messages.append({"role": "assistant", "content": full_response})
self.root.after(0, self.reset_ui)
def append_response(self, content):
self.chat_display.configure(state='normal')
self.chat_display.insert(tk.END, content, 'assistant')
self.chat_display.configure(state='disabled')
self.chat_display.see(tk.END)
def reset_ui(self):
self.generating = False
self.send_btn.config(state=tk.NORMAL)
self.stop_btn.config(state=tk.DISABLED)
if __name__ == "__main__":
root = tk.Tk()
root.geometry("800x600")
# 配置文本样式
root.style = ttk.Style()
root.style.configure('bold.TLabel', font=('Microsoft YaHei', 10, 'bold'))
app = ChatApp(root)
# 配置标签样式
app.chat_display.tag_configure('bold', font=('Microsoft YaHei', 10, 'bold'))
app.chat_display.tag_configure('user', foreground='#2c7fb8')
app.chat_display.tag_configure('assistant', foreground='#2ca25f')
app.chat_display.tag_configure('system', foreground='#636363')
root.mainloop()
OpenRouter 的体验效果还不错,免费且响应还算及时:
日常回答:
代码检查:
提示词生成:
Nvidia
这里也进行了 英伟达API的测试,不完全免费不过送1k积分,所以可以进行尝试,它的操作也是先申请API key,然后官方给出了如下代码:
from openai import OpenAI
client = OpenAI(
base_url = "https://integrate.api.nvidia.com/v1",
api_key = ""
)
completion = client.chat.completions.create(
model="deepseek-ai/deepseek-r1",
messages=[{"role":"user","content":"Which number is larger, 9.11 or 9.8?"}],
temperature=0.6,
top_p=0.7,
max_tokens=4096,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
使用了OpenAI的客户端,调用了NVIDIA的API,模型是deepseek-r1。原来的代码里,messages是一个固定的列表,里面只有一个用户的问题:“Which number is larger, 9.11 or 9.8?”。想要让这个代码能够接受用户的输入,动态地构建对话内容。将其改为交互式输入对话的版本,一个带UI的版本,UI包括输入框、发送按钮和停止按钮。最后修改后的代码如下:
from openai import OpenAI
import tkinter as tk
from tkinter import scrolledtext, ttk
import threading
client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key="" # 替换为你的实际API密钥
)
class ChatApp:
def __init__(self, root):
self.root = root
self.root.title("DS AI助手")
self.messages = []
self.generating = False
self.stop_requested = False
# 创建界面组件
self.create_widgets()
def create_widgets(self):
# 对话显示区域
self.chat_display = scrolledtext.ScrolledText(
self.root, wrap=tk.WORD, state='disabled', height=20, width=60
)
self.chat_display.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
# 输入区域框架
input_frame = ttk.Frame(self.root)
input_frame.pack(padx=10, pady=5, fill=tk.X)
# 用户输入框
self.user_input = tk.Text(input_frame, height=4, width=50)
self.user_input.pack(side=tk.LEFT, fill=tk.X, expand=True)
# 按钮框架
button_frame = ttk.Frame(input_frame)
button_frame.pack(side=tk.RIGHT, padx=5)
# 发送按钮
self.send_btn = ttk.Button(
button_frame, text="发送", command=self.start_generation
)
self.send_btn.pack(pady=2, fill=tk.X)
# 停止按钮
self.stop_btn = ttk.Button(
button_frame, text="停止", command=self.stop_generation, state='disabled'
)
self.stop_btn.pack(pady=2, fill=tk.X)
def update_display(self, role, content):
self.chat_display.configure(state='normal')
self.chat_display.insert(tk.END, f"{role}: {content}\n\n")
self.chat_display.configure(state='disabled')
self.chat_display.see(tk.END)
def start_generation(self):
if self.generating:
return
user_text = self.user_input.get("1.0", tk.END).strip()
if not user_text:
return
self.user_input.delete("1.0", tk.END)
self.messages.append({"role": "user", "content": user_text})
self.update_display("您", user_text)
self.generating = True
self.stop_requested = False
self.send_btn.config(state='disabled')
self.stop_btn.config(state='normal')
threading.Thread(target=self.generate_response, daemon=True).start()
def stop_generation(self):
self.stop_requested = True
def generate_response(self):
full_response = ""
try:
completion = client.chat.completions.create(
model="deepseek-ai/deepseek-r1",
messages=self.messages,
temperature=0.6,
top_p=0.7,
max_tokens=4096,
stream=True
)
self.root.after(0, self.update_display, "AI回答", "")
for chunk in completion:
if self.stop_requested:
break
if chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
full_response += content
self.root.after(0, self.append_response, content)
except Exception as e:
full_response = f"发生错误: {str(e)}"
self.root.after(0, self.update_display, "System", full_response)
finally:
if not self.stop_requested and full_response:
self.messages.append({"role": "assistant", "content": full_response})
self.root.after(0, self.reset_ui)
def append_response(self, content):
self.chat_display.configure(state='normal')
self.chat_display.insert(tk.END, content)
self.chat_display.configure(state='disabled')
self.chat_display.see(tk.END)
def reset_ui(self):
self.generating = False
self.send_btn.config(state='normal')
self.stop_btn.config(state='disabled')
if __name__ == "__main__":
root = tk.Tk()
app = ChatApp(root)
root.mainloop()
英伟达api的测试就一言难难尽,刚开始问答很正常,不过后续就一直等待、要么报错:
后来我去网站上直接提问了两次发现,排队极其恐怖:
也有带队1500+的:
其他在线使用
目前这种方式最省事,这里是B站【秋芝2046】整理的DeepSeek 第三方在线使用平台,包含 腾讯元宝
、跃问、AskManyAI、问小白、腾讯云-大模型知识引擎、商汤大装置、支付宝百宝箱、钉钉、ima、中国移动云盘等多方平台,同时【秋芝2046】还整理了地址、收费情况、响应速度、多轮对话等详细信息。
这些第三方平台如果免费的话,只需要注册登录就能快速使用。
直达链接:https://ccnk05wgo092.feishu.cn/wiki/WeGmwNVgLi9SFtkfwnacu6H5nfd?table=tblfZlmGJHoAYrQe&view=vewv6xDDG2