从安装到上线:DeepSeek 本地部署实战与完整源码示例
DeepSeek 部署完整教程|附源码
DeepSeek 作为近两年非常受关注的开源大模型之一,凭借较强的推理能力、较低的使用成本以及相对友好的开源生态,已经被广泛应用在智能客服、知识库问答、代码助手、企业内部 AI 助理、自动化办公等场景中。
本文将从零开始,完整讲解如何在本地或服务器上部署 DeepSeek 模型,并提供可直接运行的示例源码。文章会覆盖以下内容:
- DeepSeek 部署方式介绍
- 环境准备
- 使用 Ollama 快速部署 DeepSeek
- 使用 Python 调用 DeepSeek 本地接口
- 搭建一个简单的 Web 聊天页面
- 使用 FastAPI 封装后端接口
- 常见问题与优化建议
无论你是想在本地电脑上体验 DeepSeek,还是想在服务器上搭建企业内部 AI 服务,都可以参考本文完成部署。
一、DeepSeek 是什么?
DeepSeek 是由深度求索团队推出的大语言模型系列,包含通用对话模型、代码模型、推理模型等多个方向。常见的模型包括:
DeepSeek-R1DeepSeek-V3DeepSeek-CoderDeepSeek-LLM
其中,DeepSeek-R1 由于具备较强的推理能力,适合数学推理、逻辑分析、复杂问题拆解等任务;DeepSeek-Coder 则更适合代码生成、代码补全、代码解释和程序问题排查。
DeepSeek 模型可以通过多种方式部署:
- 直接调用官方或第三方 API
- 使用 Ollama 本地部署
- 使用 vLLM 高性能部署
- 使用 Transformers 手动加载模型
- 使用 Docker 容器化部署
对于大多数初学者和中小型项目来说,推荐先使用 Ollama 部署,因为它安装简单、启动方便、接口统一,能够快速完成本地大模型服务搭建。
二、部署前准备
在部署之前,需要根据你的硬件情况选择合适的模型版本。
1. 硬件要求参考
不同参数规模的模型对硬件要求不同,通常可以参考如下配置:
| 模型规模 | 推荐内存 | 推荐显存 | 适用场景 |
|---|---|---|---|
| 1.5B | 8GB | 可无独显 | 本地体验、轻量问答 |
| 7B / 8B | 16GB | 6GB+ | 日常问答、代码助手 |
| 14B | 32GB | 12GB+ | 较复杂推理 |
| 32B | 64GB | 24GB+ | 企业应用、复杂任务 |
| 70B+ | 128GB+ | 多卡 GPU | 高性能生产环境 |
如果只是学习和测试,可以从较小模型开始,例如:
deepseek-r1:1.5b
deepseek-r1:7b
deepseek-coder:6.7b
2. 系统环境
本文示例环境如下:
操作系统:Ubuntu 22.04 / macOS / Windows WSL2
Python:3.10+
部署工具:Ollama
后端框架:FastAPI
前端:HTML + JavaScript
如果你使用 Windows,建议使用 WSL2 或直接安装 Windows 版 Ollama。
三、使用 Ollama 快速部署 DeepSeek
Ollama 是一个非常方便的本地大模型运行工具,支持 macOS、Linux 和 Windows。它可以自动下载模型、管理模型,并提供本地 HTTP API。
1. 安装 Ollama
macOS / Linux 安装
打开终端,执行:
curl -fsSL https://ollama.com/install.sh | sh
安装完成后,查看版本:
ollama -v
如果能够正常输出版本号,说明安装成功。
Windows 安装
Windows 用户可以访问 Ollama 官网下载安装包:
https://ollama.com
安装完成后,打开 PowerShell 或 CMD,执行:
ollama -v
确认是否安装成功。
2. 拉取 DeepSeek 模型
以 DeepSeek-R1 7B 为例:
ollama pull deepseek-r1:7b
如果你的电脑配置较低,可以选择 1.5B:
ollama pull deepseek-r1:1.5b
如果你更关注代码能力,可以拉取 DeepSeek Coder:
ollama pull deepseek-coder:6.7b
查看本地已有模型:
ollama list
3. 命令行运行 DeepSeek
执行以下命令进入对话模式:
ollama run deepseek-r1:7b
然后输入问题,例如:
请用通俗语言解释什么是递归?
如果模型正常回复,说明本地 DeepSeek 已经部署成功。
四、通过 HTTP API 调用 DeepSeek
Ollama 默认会启动本地接口服务,地址一般为:
http://localhost:11434
我们可以通过 HTTP 请求调用模型。
1. 使用 curl 测试接口
curl http://localhost:11434/api/generate \
-d '{
"model": "deepseek-r1:7b",
"prompt": "请写一段 Python 快速排序代码",
"stream": false
}'
如果返回 JSON 数据,并且其中包含 response 字段,就说明接口调用成功。
返回结果大致如下:
{
"model": "deepseek-r1:7b",
"created_at": "2025-01-01T00:00:00Z",
"response": "下面是一段 Python 快速排序代码...",
"done": true
}
五、Python 调用 DeepSeek 示例源码
下面我们使用 Python 编写一个简单脚本,通过 Ollama API 调用 DeepSeek。
1. 安装 requests
pip install requests
2. 新建文件 deepseek_client.py
import requests
import json
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "deepseek-r1:7b"
def ask_deepseek(prompt: str) -> str:
"""
调用本地 Ollama DeepSeek 模型
"""
payload = {
"model": MODEL_NAME,
"prompt": prompt,
"stream": False
}
response = requests.post(OLLAMA_URL, json=payload, timeout=120)
response.raise_for_status()
data = response.json()
return data.get("response", "")
if __name__ == "__main__":
while True:
question = input("你:")
if question.lower() in ["exit", "quit", "q"]:
print("程序已退出")
break
answer = ask_deepseek(question)
print("\nDeepSeek:")
print(answer)
print("-" * 50)
运行:
python deepseek_client.py
输入问题:
请帮我写一个 JavaScript 防抖函数
模型会返回对应代码。
六、使用 FastAPI 封装 DeepSeek 接口
如果你想将 DeepSeek 提供给前端页面、企业内部系统或其他应用调用,可以使用 FastAPI 封装一个后端服务。
1. 安装依赖
pip install fastapi uvicorn requests
2. 创建后端文件 main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import requests
app = FastAPI(title="DeepSeek 本地问答服务")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "deepseek-r1:7b"
class ChatRequest(BaseModel):
message: str
class ChatResponse(BaseModel):
answer: str
@app.get("/")
def index():
return {
"message": "DeepSeek API 服务已启动",
"model": MODEL_NAME
}
@app.post("/chat", response_model=ChatResponse)
def chat(req: ChatRequest):
payload = {
"model": MODEL_NAME,
"prompt": req.message,
"stream": False
}
response = requests.post(OLLAMA_URL, json=payload, timeout=180)
response.raise_for_status()
data = response.json()
answer = data.get("response", "")
return ChatResponse(answer=answer)
3. 启动服务
uvicorn main:app --host 0.0.0.0 --port 8000
启动成功后访问:
http://localhost:8000
如果页面返回:
{
"message": "DeepSeek API 服务已启动",
"model": "deepseek-r1:7b"
}
说明后端服务已经启动成功。
FastAPI 自动生成接口文档,可以访问:
http://localhost:8000/docs
在文档页面中,可以直接测试 /chat 接口。
七、前端聊天页面源码
接下来我们写一个简单的 HTML 页面,实现和 DeepSeek 对话。
创建文件 index.html:
DeepSeek 本地聊天助手
DeepSeek 本地聊天助手
使用浏览器打开 index.html,即可和本地 DeepSeek 模型对话。
八、实现流式输出
上面的示例是等待模型完整生成后一次性返回。如果模型回答较长,用户体验可能不够好。实际项目中,更推荐使用流式输出,让文字逐字或分段显示。
Ollama 支持流式返回,只需要将参数设置为:
{
"stream": true
}
下面是一个简单的 Python 流式调用示例。
创建文件 stream_client.py:
import requests
import json
url = "http://localhost:11434/api/generate"
payload = {
"model": "deepseek-r1:7b",
"prompt": "请详细解释什么是 Transformer 架构",
"stream": True
}
with requests.post(url, json=payload, stream=True) as response:
response.raise_for_status()
for line in response.iter_lines():
if line:
data = json.loads(line.decode("utf-8"))
print(data.get("response", ""), end="", flush=True)
运行:
python stream_client.py
你会看到模型内容逐步输出,体验类似 ChatGPT 的打字效果。
九、Docker 部署方式
如果你希望在服务器上统一管理 DeepSeek 服务,可以使用 Docker 部署 Ollama。
1. 拉取 Ollama 镜像
docker pull ollama/ollama
2. 启动容器
docker run -d \
--name ollama \
-p 11434:11434 \
-v ollama:/root/.ollama \
ollama/ollama
如果服务器有 NVIDIA GPU,并且已经安装 NVIDIA Container Toolkit,可以使用:
docker run -d \
--gpus all \
--name ollama \
-p 11434:11434 \
-v ollama:/root/.ollama \
ollama/ollama
3. 在容器中拉取模型
docker exec -it ollama ollama pull deepseek-r1:7b
4. 测试模型
docker exec -it ollama ollama run deepseek-r1:7b
或者通过接口测试:
curl http://localhost:11434/api/generate \
-d '{
"model": "deepseek-r1:7b",
"prompt": "请介绍一下 Docker 的作用",
"stream": false
}'
十、生产环境部署建议
如果你准备将 DeepSeek 用于正式项目,建议注意以下几点。
1. 模型选择
不要盲目追求大模型。模型越大,推理速度越慢,对硬件要求越高。对于普通问答、客服、知识库检索,7B 或 14B 往往已经足够。如果业务涉及复杂推理、长文本分析,再考虑更大模型。
2. 增加鉴权
本文示例接口没有做权限控制,如果部署到公网,任何人都可以调用你的模型服务,会带来安全和成本风险。建议增加 Token 鉴权。
示例:
from fastapi import Header, HTTPException
API_TOKEN = "your-secret-token"
def verify_token(token: str = Header(None)):
if token != API_TOKEN:
raise HTTPException(status_code=401, detail="Unauthorized")
然后在接口中加入依赖校验。
3. 使用反向代理
可以使用 Nginx 将服务代理到统一域名下,例如:
server {
listen 80;
server_name ai.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4. 结合知识库
DeepSeek 本身不一定知道你的企业内部资料。如果要做企业知识库问答,通常需要结合 RAG 技术,也就是:
- 将文档切分成文本块;
- 使用 Embedding 模型向量化;
- 存入向量数据库;
- 用户提问时检索相关文档;
- 将检索结果和问题一起交给 DeepSeek 回答。
常见向量数据库包括:
- Milvus
- Chroma
- FAISS
- Weaviate
- Elasticsearch
5. 日志与监控
生产环境建议记录:
- 用户请求时间
- 输入内容长度
- 模型响应耗时
- 接口错误日志
- 服务器 CPU、内存、显存使用率
这些数据可以帮助你判断是否需要扩容、优化模型或限制并发。
十一、常见问题
1. Ollama 拉取模型很慢怎么办?
可以尝试更换网络环境,或在服务器上提前下载模型。模型文件通常较大,首次拉取需要较长时间。
2. 本地运行很卡怎么办?
可以选择更小的模型,例如:
ollama pull deepseek-r1:1.5b
也可以关闭其他占用内存的软件。如果有 GPU,确保 Ollama 正确识别显卡。
3. 接口请求超时怎么办?
大模型生成长文本可能需要较久,可以适当增加后端请求超时时间:
requests.post(url, json=payload, timeout=300)
同时也建议限制用户输入长度和最大生成长度。
4. 如何切换模型?
只需要修改请求参数中的 model 字段即可:
MODEL_NAME = "deepseek-r1:1.5b"
或者:
MODEL_NAME = "deepseek-coder:6.7b"
5. DeepSeek 可以商用吗?
不同模型版本的开源协议可能不同,商用前务必查看对应模型的 License。不要只根据网上文章判断授权范围,建议以模型官方页面和许可证文本为准。
十二、项目目录结构推荐
如果你希望将本文代码整理成一个完整项目,可以采用如下结构:
deepseek-demo/
├── backend/
│ ├── main.py
│ └── requirements.txt
├── frontend/
│ └── index.html
├── scripts/
│ ├── deepseek_client.py
│ └── stream_client.py
└── README.md
requirements.txt 内容如下:
fastapi
uvicorn
requests
pydantic
启动步骤:
cd backend
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000
然后打开:
frontend/index.html
即可完成一个最小可用的 DeepSeek 本地聊天系统。
十三、总结
本文完整介绍了 DeepSeek 的本地部署流程,并提供了 Python 调用、FastAPI 后端封装、HTML 前端页面、流式输出以及 Docker 部署示例。
如果你只是想快速体验 DeepSeek,推荐使用:
ollama run deepseek-r1:7b
如果你想将 DeepSeek 集成到自己的系统中,可以使用本文提供的 FastAPI 接口示例。如果你准备上生产环境,还需要进一步完善鉴权、日志、限流、监控、异常处理和反向代理等能力。
总体来说,DeepSeek 的开源生态已经非常成熟,配合 Ollama、FastAPI、Docker 等工具,可以快速搭建一个属于自己的 AI 助手系统。对于个人开发者来说,它适合做学习、编程助手和自动化工具;对于企业来说,它也可以作为内部知识库、客服机器人和业务智能化系统的重要基础。