
免费白嫖满血depseek方法,基石智算+python实现本地客户端
免费白嫖5000万token,还能本地部署满血deepseek的方法我这就教给大家
deepseek现在大火,很多人都想本地部署,但是电脑配置又不够,怎么样才能用上稳定、满血的deepseek呢,我发现了一个好办法,今天分享给大家。
一、首先登录一个云平台叫 基石智算,地址:https://account.coreshub.cn
它提供了 671b 满血版 DeepSeek-R1 的部署,而且注册就送 50元优惠券,相当于上千万的token,足够用上好一阵子了。
1、注册并认证账户
首先登录网站后,注册好账户,点击下方的链接进行认证,认证方式可以选择支付宝认证,基本上几分钟之内就可以完成,然后就能看到官方赠送的优惠券。
路径:账号设置>认证信息
网站:https://console.coreshub.cn/account/profile/advanced
这里需要认证一下
在左上方费用里面可以看到官方赠送的优惠券。
2、登录大模型服务创建API密钥
点击左上角 产品服务>大模型服务,找到大模型服务平台,点击进入。
进入 API 密钥管理,点击 创建 API 密钥,给密钥命名,点击“确定”即可创建 API 密钥。
创建完成后,会看到我们已经创建好的API密钥,这个时候,点击红框所示的复制按钮,就可以复制API密钥出来了。
3、获取对外服务的地址
网址:https://docs.coreshub.cn/console/big_model_server/
也可以从在线推理服务这个地方找到相关说明。
这里可以看到它提供了671B的满血deepseek模型可用
基石智算提供的地址格式如下:
地址:https://openapi.coreshub.cn/v1
模型名称:DeepSeek-R1
这个调用方式兼容 OpenAI 接口规范的使用方式,因此在主流的客户端软件,比如ChatBox、CherryStudio等都可以使用。具体使用方法我就不写了。
4、用python自己写个本地客户端
有些小伙伴可能需要有些定制化的内容,比如统计每次使用的tokens、多行输入等等,那也可以自己动手写个客户端,我这里用python写了一个,代码分享给你们:
import tkinter as tk
from tkinter import scrolledtext, ttk, messagebox
import threading
import requests
import json
import tiktoken # 新增tiktoken库用于token计数
from tkinter import TOP
class ChatAPI:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://openapi.coreshub.cn/v1/chat/completions"
self.headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {self.api_key}"
}
def send_request(self, model, messages, **kwargs):
data = {
"model": model,
"messages": messages,
"stream": True
}
# 省略可选参数处理部分,保持原样...
response = requests.post(self.base_url, headers=self.headers, json=data, stream=True)
return response
class ChatGUI:
def __init__(self, master, api_key):
self.master = master
self.api_key = api_key
self.chat_api = ChatAPI(api_key)
self.messages = [{"role": "system", "content": "You are a helpful assistant."}]
self.total_tokens = 0 # 新增token计数器
self.current_response = ""
self.is_waiting_response = False
# 配置界面样式
self.style = ttk.Style()
self.style.theme_use('clam')
self._setup_style()
master.title("智能聊天助手")
master.geometry("900x680")
self.setup_ui()
def _setup_style(self):
"""自定义界面样式"""
self.style.configure('TFrame', background='#f5f5f5')
self.style.configure('TLabel', background='#f5f5f5', foreground='#333')
self.style.configure('TButton', font=('Microsoft YaHei', 9), padding=5,
background='#4CAF50', foreground='white')
self.style.map('TButton',
background=[('active', '#45a049'), ('disabled', '#cccccc')])
self.style.configure('status.TLabel', background='#e0e0e0', padding=(5,2))
def setup_ui(self):
# 创建主框架
main_frame = ttk.Frame(self.master, padding=10)
main_frame.pack(fill=tk.BOTH, expand=True)
# 对话历史显示区域
self.history_area = scrolledtext.ScrolledText(
main_frame,
wrap=tk.WORD,
state=tk.DISABLED,
font=('Microsoft YaHei', 11),
bg='white',
padx=10,
pady=10
)
self.history_area.pack(fill=tk.BOTH, expand=True, pady=(0, 10))
self.history_area.tag_config('user', foreground='#1e88e5')
self.history_area.tag_config('assistant', foreground='#43a047')
# 输入区域
input_frame = ttk.Frame(main_frame)
input_frame.pack(fill=tk.BOTH, pady=5)
# 多行输入框
self.input_entry = scrolledtext.ScrolledText(
input_frame,
wrap=tk.WORD,
height=4,
font=('Microsoft YaHei', 10),
padx=5,
pady=5
)
self.input_entry.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
self.input_entry.bind("<Control-Return>", lambda e: self.send_message())
self.input_entry.bind("<Return>", self._insert_newline)
# 按钮容器
btn_frame = ttk.Frame(input_frame)
btn_frame.pack(side=tk.LEFT, padx=5)
self.send_button = ttk.Button(
btn_frame,
text="发送 (Ctrl+Enter)",
command=self.send_message
)
self.send_button.pack(side=tk.TOP, fill=tk.X, pady=2)
self.clear_button = ttk.Button(
btn_frame,
text="清空历史",
command=self.clear_history
)
self.clear_button.pack(side=TOP, fill=tk.X, pady=2)
# 状态栏
status_frame = ttk.Frame(main_frame)
status_frame.pack(fill=tk.X)
self.status_var = tk.StringVar(value="就绪")
ttk.Label(
status_frame,
textvariable=self.status_var,
style='status.TLabel'
).pack(side=tk.LEFT, fill=tk.X, expand=True)
self.tokens_var = tk.StringVar(value="累计Tokens: 0")
ttk.Label(
status_frame,
textvariable=self.tokens_var,
style='status.TLabel'
).pack(side=tk.RIGHT)
def _insert_newline(self, event):
"""处理回车键插入换行"""
self.input_entry.insert(tk.INSERT, "\n")
return "break"
def send_message(self):
if self.is_waiting_response:
messagebox.showwarning("提示", "请等待当前回复完成!")
return
user_input = self.input_entry.get("1.0", tk.END).strip()
if not user_input:
return
# 计算并更新token计数
user_tokens = self._count_tokens(user_input)
self.total_tokens += user_tokens
self.tokens_var.set(f"累计Tokens: {self.total_tokens}")
self.input_entry.delete("1.0", tk.END)
self._add_message("user", user_input)
self.messages.append({"role": "user", "content": user_input})
threading.Thread(
target=self._handle_api_request,
daemon=True
).start()
def _handle_api_request(self):
self.is_waiting_response = True
self.current_response = ""
self.status_var.set("正在生成回复...")
try:
response = self.chat_api.send_request(
model="DeepSeek-R1",
messages=self.messages,
temperature=0.7,
max_tokens=10240
)
if response.status_code == 200:
self._add_message("assistant", "")
for line in response.iter_lines():
if line:
decoded_line = line.decode("utf-8")
if decoded_line.startswith("data: "):
content = decoded_line[len("data: "):]
try:
data = json.loads(content)
if "choices" in data and data["choices"]:
delta = data["choices"][0].get("delta", {})
if "content" in delta:
self._append_response(delta["content"])
except json.JSONDecodeError:
pass
# 更新助手消息和token计数
self.messages.append({"role": "assistant", "content": self.current_response})
assistant_tokens = self._count_tokens(self.current_response)
self.total_tokens += assistant_tokens
self.tokens_var.set(f"累计Tokens: {self.total_tokens}")
else:
self._show_error(f"API请求失败: {response.status_code}\n{response.text}")
except Exception as e:
self._show_error(f"发生错误: {str(e)}")
finally:
self.is_waiting_response = False
self.status_var.set("就绪")
def _count_tokens(self, text):
"""使用tiktoken计算token数量"""
try:
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
except KeyError:
encoding = tiktoken.get_encoding("cl100k_base")
return len(encoding.encode(text))
def _append_response(self, content):
self.current_response += content
self.history_area.configure(state=tk.NORMAL)
self.history_area.insert(tk.END, content, 'assistant')
self.history_area.configure(state=tk.DISABLED)
self.history_area.see(tk.END)
self.master.update_idletasks()
def _add_message(self, role, content):
self.history_area.configure(state=tk.NORMAL)
prefix = "\n你: " if role == "user" else "\n助手: "
tag = 'user' if role == "user" else 'assistant'
self.history_area.insert(tk.END, prefix, tag)
self.history_area.insert(tk.END, f"{content}\n")
self.history_area.configure(state=tk.DISABLED)
self.history_area.see(tk.END)
def clear_history(self):
self.history_area.configure(state=tk.NORMAL)
self.history_area.delete(1.0, tk.END)
self.history_area.configure(state=tk.DISABLED)
self.messages = [{"role": "system", "content": "You are a helpful assistant."}]
self.total_tokens = 0
self.tokens_var.set("累计Tokens: 0")
def _show_error(self, message):
self.master.after(0, lambda: messagebox.showerror("错误", message))
if __name__ == "__main__":
api_key = "sk-*************" # 替换为你的 API 密钥
root = tk.Tk()
try:
app = ChatGUI(root, api_key)
root.mainloop()
except Exception as e:
messagebox.showerror("启动错误", f"程序启动失败: {str(e)}")
运行后效果如下:
最近AI应用越来越火,我新开了个公众号 AI智脉,欢迎小伙伴们前来围观,大家一起学习!
更多推荐
所有评论(0)