DeepSeek API 实战:从接入到搭建你自己的 AI 助手

📅 2026/7/17 22:17:00 👁️ 阅读次数 📝 编程学习
DeepSeek API 实战:从接入到搭建你自己的 AI 助手

DeepSeek API 实战:从接入到搭建你自己的 AI 助手

最近做项目需要接入大模型 API,对比了一圈最终选了 DeepSeek。原因很简单:便宜、中文效果好、兼容 OpenAI 协议

这篇文章记录我从零接入到搭建一个可用 AI 助手的全过程,踩过的坑和最终方案都写出来了。


一、为什么要选 DeepSeek

选模型之前我列了几个硬性需求:

  • 中文理解能力要强(做的是面向国内用户的产品)
  • API 调用成本要低(前期不想烧钱)
  • 兼容 OpenAI 协议(方便后续切换)
  • 上下文窗口要够大(需要处理长文档)

对比了几个主流模型后,DeepSeek 是最符合的。

模型 输入价格 输出价格 上下文 DeepSeek ¥1/百万token ¥2/百万token 64K GPT-4o ¥15/百万token ¥60/百万token 128K Claude3.5¥18/百万token ¥90/百万token 200K

价格差距不是一点半点。对于大多数实际场景,DeepSeek 的能力完全够用。


二、接入过程

DeepSeek 的 API 兼容 OpenAI 格式,所以用起来和 OpenAI 几乎一样。

1. 获取 API Key

去 platform.deepseek.com 注册账号 → 创建 API Key。Key 的格式以sk-开头。

2. 基础调用

fromopenaiimportOpenAI client=OpenAI(api_key="sk-your-key-here",base_url="https://api.deepseek.com/v1")response=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"system","content":"你是一个帮助用户解决问题的助手。"},{"role":"user","content":"用 Python 写一个快速排序"}])print(response.choices[0].message.content)

就这么简单。如果你之前用过 OpenAI 的 API,只需要把base_urlapi_key换掉就行。

3. 流式输出

实际产品中不可能等完整响应再展示,流式输出是标配:

stream=client.chat.completions.create(model="deepseek-chat",messages=[{"role":"user","content":"讲一个技术笑话"}],stream=True)forchunkinstream:ifchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end="")

这样用户能看到文字一个字一个字出来,体验好很多。


三、搭建自己的 AI 助手

有了 API 后,我用 FastAPI 搭了一个简单的 AI 助手后端,支持对话历史和流式输出。

项目结构:

ai-assistant/ ├── main.py# FastAPI 服务├── chat.py# 对话逻辑├── config.py# 配置└── requirements.txt

config.py:

importosfromdotenvimportload_dotenv load_dotenv()DEEPSEEK_API_KEY=os.getenv("DEEPSEEK_API_KEY")DEEPSEEK_BASE_URL="https://api.deepseek.com/v1"MODEL_NAME="deepseek-chat"

chat.py——核心对话逻辑:

fromopenaiimportOpenAIfromconfigimportDEEPSEEK_API_KEY,DEEPSEEK_BASE_URL,MODEL_NAME client=OpenAI(api_key=DEEPSEEK_API_KEY,base_url=DEEPSEEK_BASE_URL)classChatSession:def__init__(self,system_prompt=None):self.messages=[]ifsystem_prompt:self.messages.append({"role":"system","content":system_prompt})defadd_message(self,role,content):self.messages.append({"role":role,"content":content})defget_response(self):response=client.chat.completions.create(model=MODEL_NAME,messages=self.messages,temperature=0.7,max_tokens=2000)reply=response.choices[0].message.content self.add_message("assistant",reply)returnreplydefget_stream_response(self):stream=client.chat.completions.create(model=MODEL_NAME,messages=self.messages,stream=True,temperature=0.7)full_response=""forchunkinstream:delta=chunk.choices[0].delta.contentor""full_response+=deltayielddelta self.add_message("assistant",full_response)

main.py——FastAPI 服务:

fromfastapiimportFastAPIfromfastapi.responsesimportStreamingResponsefrompydanticimportBaseModelfromchatimportChatSession app=FastAPI()classChatRequest(BaseModel):message:strsession_id:str="default"sessions={}@app.post("/chat")asyncdefchat(request:ChatRequest):ifrequest.session_idnotinsessions:sessions[request.session_id]=ChatSession(system_prompt="你是一个有用的AI助手。请用中文回答。")session=sessions[request.session_id]session.add_message("user",request.message)reply=session.get_response()return{"reply":reply,"session_id":request.session_id}@app.post("/chat/stream")asyncdefchat_stream(request:ChatRequest):ifrequest.session_idnotinsessions:sessions[request.session_id]=ChatSession(system_prompt="你是一个有用的AI助手。请用中文回答。")session=sessions[request.session_id]session.add_message("user",request.message)returnStreamingResponse(session.get_stream_response(),media_type="text/event-stream")

四、几个实战踩坑记录

1. 上下文管理

一开始我没限制对话历史长度,结果聊了几十轮后 token 数爆炸,每次请求都又慢又贵。

解决方案:限制 messages 列表长度,超出后丢弃最早的对话。

MAX_HISTORY=20deftrim_messages(self):iflen(self.messages)>MAX_HISTORY:# 保留 system prompt,丢弃最早的对话system=[mforminself.messagesifm["role"]=="system"]history=[mforminself.messagesifm["role"]!="system"]self.messages=system+history[-MAX_HISTORY:]

2. 超时处理

DeepSeek API 在高峰期偶尔会响应较慢,客户端需要设置超时:

client=OpenAI(api_key=DEEPSEEK_API_KEY,base_url=DEEPSEEK_BASE_URL,timeout=30,# 30秒超时max_retries=2# 自动重试2次)

3. 错误处理

API 调用可能因为各种原因失败,需要做好容错:

try:response=client.chat.completions.create(...)exceptExceptionase:print(f"API 调用失败:{e}")return"抱歉,我现在有点忙,请稍后再试。"

用户不关心技术细节,给他们一个友好的错误提示就够了。


五、成本估算

我用这个方案跑了两个月,来算算账:

日均请求:约500次 平均每次:约800tokens(输入+输出) 日均消耗:约 400K tokens 月均消耗:约 12M tokens 月均成本:约 ¥12(按 ¥1/百万token 计算)

12 块钱一个月,能跑一个完整的 AI 助手后端。对比 GPT-4o 同样用量要接近 200 块,差距是十几倍。


写在最后

DeepSeek 是目前性价比最高的中文大模型 API,没有之一。如果你在做 AI 相关的产品,特别是面向中文用户的场景,非常值得一试。

接入成本极低——改一行base_url就能从 OpenAI 切过来。先跑起来,等规模大了再考虑要不要换更贵的模型。

你对 DeepSeek 有什么想了解的?欢迎在评论区交流。

(文章中的代码已脱敏,完整项目代码可以在 GitHub 上找到)