3863 字
19 分钟
本地部署 DeepSeek + Ollama 完全指南:AI 大模型本地化部署与 RAG 知识库搭建
2026 年,大模型本地化部署已经不是开发者的专利。借助 Ollama 这样的工具,即使是普通用户也能在个人电脑上运行 DeepSeek 这样的中文大模型。本地部署不仅能保护隐私,还能与知识库结合构建专属的 AI 助手。

本文完整讲解 DeepSeek + Ollama 的本地化部署全流程,包括:
- 硬件要求评估与环境准备
- Ollama 安装与配置(Windows/macOS/Linux)
- DeepSeek 模型下载与推理
- Web UI 部署(Ollama Web UI / Open WebUI)
- 兼容 OpenAI 的 REST API 调用
- RAG 知识库搭建(PDF/Word/Markdown)
- 多模型管理与切换
- 性能调优与常见问题
一、硬件要求与环境准备
1.1 硬件推荐配置
DeepSeek 模型分多个参数版本,硬件要求差异较大:
| 模型 | 参数 | 内存要求 | 显存(GPU) | 推理速度 | 推荐场景 |
|---|---|---|---|---|---|
| DeepSeek-LLM 7B Chat | 7B | 16GB | 8GB+ | 快 | 日常对话、入门 |
| DeepSeek-LLM 16B Chat | 16B | 32GB | 16GB+ | 中 | 专业任务 |
| DeepSeek-LLM 67B Chat | 67B | 64GB | 40GB+ | 慢 | 研究/服务器 |
| DeepSeek-Coder 7B | 7B | 16GB | 8GB+ | 快 | 代码辅助 |
| DeepSeek-Coder 33B | 33B | 32GB | 24GB+ | 中 | 专业开发 |
| Qwen 14B Chat | 14B | 32GB | 12GB+ | 中 | 中文任务 |
💡 量化版本:Ollama 默认使用量化版本(Q4_K_M),可将显存要求降低约 60%,精度损失较小,适合普通用户。
1.2 环境要求
操作系统:
- macOS 13+(支持 M1/M2/M3 芯片的 Apple Silicon)
- Windows 10/11(WSL2 推荐)
- Linux(Ubuntu 20.04+、Debian 11+)
显卡要求(可选):
- NVIDIA GeForce RTX 2060 及以上(6GB 显存起步)
- NVIDIA RTX 3060/4060(12GB,性价比推荐)
- NVIDIA RTX 3090/4090(24GB,流畅运行 16B 模型)
- AMD Radeon RX 6000/7000 系列(需 ROCm,较复杂)
- Apple Silicon M1 Pro/M2/M3(统一内存,性能优秀)
1.3 磁盘空间
模型文件: 4-8 GB (7B 模型,Q4 量化) 8-16 GB(16B 模型)Ollama 程序: < 200 MBWeb UI 程序: < 500 MB模型缓存: 2-10 GB(取决于模型数量)RAG 知识库向量: 1-5 GB(取决于文档量)建议至少预留 20 GB 可用空间。
二、Ollama 安装与配置
2.1 macOS 安装
# 方法 1:使用 Homebrew(推荐)brew install ollama
# 方法 2:下载官方安装包# 访问 https://ollama.ai/download# 下载并安装 Ollama.dmg
# 启动 Ollama 服务ollama serve
# 验证安装ollama --version# ollama version 0.5.x 或更高2.2 Linux 安装
# 方法 1:官方一键脚本(推荐)curl -fsSL https://ollama.com/install.sh | sh
# 方法 2:手动下载二进制wget https://github.com/ollama/ollama/releases/latest/download/ollama-linux-amd64chmod +x ollama-linux-amd64sudo mv ollama-linux-amd64 /usr/local/bin/ollama
# 配置为系统服务(可选)sudo tee /etc/systemd/system/ollama.service << 'EOF'[Unit]Description=Ollama ServiceAfter=network-online.target
[Service]ExecStart=/usr/local/bin/ollama serveUser=$USERRestart=alwaysEnvironment="OLLAMA_HOST=0.0.0.0"Environment="OLLAMA_ORIGINS=*"
[Install]WantedBy=default.targetEOF
sudo systemctl daemon-reloadsudo systemctl enable ollamasudo systemctl start ollama
# 验证ollama --version2.3 Windows 安装
# 方法 1:使用官方安装包# 访问 https://ollama.ai/download# 下载 OllamaSetup.exe 并双击安装
# 方法 2:WSL2(推荐,性能更好)# 在 WSL2 Ubuntu 中执行curl -fsSL https://ollama.com/install.sh | sh
# 安装后启动服务ollama serve
# 验证ollama --version2.4 环境变量配置
# 常用环境变量(可写入 ~/.bashrc 或 ~/.zshrc)
# 模型存储位置(默认 ~/.ollama/models)export OLLAMA_MODELS=/path/to/models
# 监听地址(默认 127.0.0.1:11434)export OLLAMA_HOST=0.0.0.0
# 允许的来源(跨域访问时需要)export OLLAMA_ORIGINS=*
# 显存限制(避免显存溢出)export OLLAMA_GPU_LAYERS=50
# 线程数(CPU 推理时调优)export OLLAMA_NUM_THREADS=8
# 启用 NVIDIA GPU 支持(Linux)export OLLAMA_CUDA=1三、运行 DeepSeek 模型
3.1 模型列表与选择
# 查看所有可用的 DeepSeek 模型ollama list | grep deepseek
# 搜索模型ollama search deepseek推荐模型:
| 模型名称 | 说明 | 运行命令 |
|---|---|---|
deepseek-coder:6.7b | 代码助手(中文支持) | ollama run deepseek-coder:6.7b |
deepseek-llm:7b-chat | 通用对话模型 | ollama run deepseek-llm:7b-chat |
qwen2:7b | 通义千问(中文更佳) | ollama run qwen2:7b |
llama3:8b | Llama 3(英文最佳) | ollama run llama3:8b |
mistral:7b | Mistral(速度快) | ollama run mistral:7b |
3.2 快速开始
# 1. 拉取并运行 DeepSeek-Coder(首次运行自动下载模型)ollama run deepseek-coder:6.7b
# 2. 等待模型下载完成后,直接在命令行对话# >>> 请写一个 Python 快速排序函数
# 3. 退出交互:/bye 或 Ctrl+D>>> /bye3.3 常用命令
# 查看已下载模型ollama list
# 查看模型详情ollama show deepseek-coder:6.7b
# 删除模型ollama rm deepseek-coder:6.7b
# 后台运行模型(不进入交互)ollama serve &
# 停止服务pkill -f ollama3.4 自定义模型(Modelfile)
# 创建自定义模型配置cat > Modelfile << 'EOF'# 基于 DeepSeek-Coder 7BFROM deepseek-coder:6.7b
# 设置系统提示(决定模型行为)SYSTEM """你是一个专业的编程助手,精通 Python/JavaScript/Go 等语言。回答时:1. 提供清晰的代码示例2. 解释关键概念3. 给出最佳实践建议"""
# 推理参数(可选)PARAMETER temperature 0.7PARAMETER top_p 0.9PARAMETER top_k 50PARAMETER num_ctx 4096PARAMETER num_predict -1 # 无限生成长度PARAMETER repeat_penalty 1.1
# 模板(控制输入输出格式)TEMPLATE """{{ .System }}
用户: {{ .Prompt }}助手:"""EOF
# 基于 Modelfile 创建自定义模型ollama create my-coder -f Modelfile
# 运行自定义模型ollama run my-coder3.5 参数调优指南
| 参数 | 作用 | 推荐值 |
|---|---|---|
temperature | 创造性/随机性 | 0.5-0.7(代码)/ 0.8-1.0(创意写作) |
top_p | 概率累积阈值 | 0.9(平衡多样性与质量) |
top_k | 候选词数量限制 | 40-100 |
num_ctx | 上下文窗口大小 | 4096-16384(越大越耗显存) |
num_predict | 最大生成 tokens | -1(无限制)/ 2000(限制长度) |
repeat_penalty | 重复惩罚 | 1.1-1.2 |
num_gpu | GPU 层数 | 50(自动分配,越多越快) |
四、Web UI 部署
命令行对话不够直观,推荐部署 Web UI 获得更好的体验。
4.1 Open WebUI(推荐)
Open WebUI(原 Ollama Web UI)是功能最完整的开源前端:
# Docker 部署(推荐,最简单)docker run -d \ -p 3000:3000 \ --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main
# 访问: http://localhost:3000
# 首次打开创建管理员账号
# 如果 Ollama 在远程服务器docker run -d \ -p 3000:3000 \ -e OLLAMA_API_BASE_URL=http://192.168.1.100:11434/api \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:mainOpen WebUI 主要功能:
- ✅ 多模型切换(支持所有 Ollama 模型)
- ✅ 对话历史管理与搜索
- ✅ 多用户系统与权限控制
- ✅ 多模态支持(图片/语音)
- ✅ 插件系统(Python/TypeScript)
- ✅ RAG 知识库(PDF/DOC/Markdown/TXT/网页)
- ✅ 对话导出(Markdown/JSON/JSONL)
- ✅ 代码高亮与 LaTeX 渲染
- ✅ OpenAI API 兼容模式
4.2 Open WebUI RAG 知识库配置
Open WebUI 内置了 RAG 功能,零配置即可使用:
# 1. 打开 Web UI 左侧边栏「文档」功能# 2. 点击「上传文档」上传 PDF/Word/Markdown/TXT# 3. 上传后自动进行向量化# 4. 对话时勾选「检索文档」即可引用知识库内容
# 支持的文档格式:# - PDF: 自动解析文本(带 OCR 选项)# - DOC/DOCX: Microsoft Word 文档# - TXT/TXT: 纯文本# - MD/Markdown: Markdown 文件# - HTML/URL: 网页内容# - CSV/Excel: 表格数据# - EPUB: 电子书
# 高级设置(在「设置 → 文档」中配置):# - 切分大小(默认 500 tokens)# - 切分重叠(默认 50 tokens)# - 相似度阈值(默认 0.75)# - 返回结果数量(默认 5)# - 嵌入模型选择(默认 bge-m3)4.3 其他 Web UI 选择
# 方案 2:Ollama WebUI(轻量)docker run -d -p 3000:3000 --name ollama-webui ollama-webui:latest
# 方案 3:AnythingLLM(企业级知识库方案)docker run -d --name anything-llm \ -p 3001:3001 \ -v anything-llm-storage:/app/server/storage \ mintplexlabs/anythingllm
# 方案 4:Chatbot UI(类 ChatGPT 界面)docker run -d -p 3000:3000 \ -e OPENAI_API_KEY=ollama \ -e OPENAI_API_BASE_URL=http://localhost:11434/v1 \ ghcr.io/mckaywrigley/chatbot-ui:main五、Ollama REST API 调用
Ollama 提供兼容 OpenAI 的 REST API,便于集成到你的应用中。
5.1 生成文本(Completion)
# 基本调用curl http://localhost:11434/api/generate -d '{ "model": "deepseek-coder:6.7b", "prompt": "写一个 Python 快速排序函数", "stream": false}' | jq5.2 对话接口(Chat Completion)
# 单轮对话curl http://localhost:11434/api/chat -d '{ "model": "deepseek-coder:6.7b", "messages": [ { "role": "user", "content": "Python 和 JavaScript 有什么区别?" } ], "stream": false}' | jq
# 多轮对话(保留上下文)curl http://localhost:11434/api/chat -d '{ "model": "deepseek-coder:6.7b", "messages": [ { "role": "user", "content": "什么是面向对象编程?" }, { "role": "assistant", "content": "面向对象编程(OOP)是一种编程范式..." }, { "role": "user", "content": "Python 如何实现多态?" } ], "stream": false}' | jq5.3 流式响应
// Node.js 示例:流式输出const response = await fetch('http://localhost:11434/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'deepseek-coder:6.7b', messages: [{ role: 'user', content: '你好' }], stream: true })});
const reader = response.body.getReader();const decoder = new TextDecoder();
while (true) { const { done, value } = await reader.read(); if (done) break;
const chunk = decoder.decode(value, { stream: true }); const data = JSON.parse(chunk); if (data.message) { process.stdout.write(data.message.content); }}5.4 Python SDK 调用
# 安装 SDK# pip install ollama
import ollama
# 基本对话response = ollama.chat(model='deepseek-coder:6.7b', messages=[ { 'role': 'user', 'content': 'Python 装饰器的用法', },])print(response['message']['content'])
# 流式对话for response in ollama.chat( model='deepseek-coder:6.7b', messages=[{'role': 'user', 'content': '解释一下闭包'}], stream=True): print(response['message']['content'], end='')
# 生成嵌入向量embeddings = ollama.embeddings( model='mxbai-embed-large', prompt='这是需要向量化的文本')print(embeddings['embedding']) # 1024 维向量
# 查看模型列表models = ollama.list()for m in models['models']: print(f"{m['name']} - {m['details']['parameter_size']}")5.5 兼容 OpenAI API
如果你已有基于 OpenAI 的代码,可以无缝切换到 Ollama:
from openai import OpenAI
# 使用 Ollama(完全兼容 OpenAI SDK)client = OpenAI( base_url='http://localhost:11434/v1', api_key='ollama' # 任意字符串即可)
response = client.chat.completions.create( model='deepseek-coder:6.7b', messages=[ {'role': 'user', 'content': '你好'} ])
print(response.choices[0].message.content)
# 流式输出stream = client.chat.completions.create( model='deepseek-coder:6.7b', messages=[{'role': 'user', 'content': '写一首诗'}], stream=True)
for chunk in stream: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end='')六、RAG 知识库搭建
6.1 RAG 原理图解
用户提问 "产品价格策略是什么?" ↓[文本嵌入] → 将问题转换为向量 ↓[向量检索] → 在文档向量库中搜索最相似的片段 ↓[上下文组装] → 组装系统提示 + 检索到的文档片段 + 用户问题 ↓[大模型推理] → DeepSeek 基于增强上下文生成答案 ↓回答: "根据文档第3.2节,产品采用差异化定价策略..."6.2 手工搭建 RAG 系统(进阶)
# 安装依赖# pip install llama-index chromadb pypdf
import osfrom llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settingsfrom llama_index.llms.ollama import Ollamafrom llama_index.embeddings.ollama import OllamaEmbedding
# 配置 OllamaSettings.llm = Ollama(model='deepseek-coder:6.7b', request_timeout=300)Settings.embed_model = OllamaEmbedding(model_name='mxbai-embed-large')
# 1. 加载文档documents = SimpleDirectoryReader('./docs').load_data()print(f"加载了 {len(documents)} 个文档片段")
# 2. 构建向量索引index = VectorStoreIndex.from_documents(documents, show_progress=True)
# 3. 保存索引(持久化)index.storage_context.persist(persist_dir="./vector_store")
# 4. 创建问答引擎query_engine = index.as_query_engine(response_mode="compact")
# 5. 提问response = query_engine.query("产品的核心定价策略是什么?")print(response)print("\n引用来源:")for node in response.source_nodes: print(f"- 文档: {node.metadata.get('file_name', '未知')}") print(f" 相似度: {node.score:.4f}")
# 6. 加载已有索引from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir="./vector_store")index = load_index_from_storage(storage_context)6.3 支持的文档格式与处理
# PDF 文档处理from llama_index.readers.file import PDFReader
reader = PDFReader()documents = reader.load_data('./data/product_manual.pdf')
# Word 文档from llama_index.readers.file import DocxReader
reader = DocxReader()documents = reader.load_data('./data/report.docx')
# Markdown 文档from llama_index.readers.file import MarkdownReader
reader = MarkdownReader()documents = reader.load_data('./data/guide.md')
# 网页内容from llama_index.readers.web import SimpleWebPageReader
reader = SimpleWebPageReader(html_to_text=True)documents = reader.load_data(urls=[ 'https://example.com/product', 'https://example.com/pricing'])
# 批量目录加载(混合格式)documents = SimpleDirectoryReader( input_dir='./data', recursive=True, required_exts=['.pdf', '.docx', '.md', '.txt']).load_data()6.4 RAG 性能调优
# 关键参数调优from llama_index.core import Settings
# 切分参数Settings.chunk_size = 512 # 片段大小(默认 1024,中文推荐 200-500)Settings.chunk_overlap = 50 # 重叠大小(默认 200,中文推荐 50-100)
# 检索参数query_engine = index.as_query_engine( similarity_top_k=5, # 返回最相似的 5 个片段 response_mode="compact", # compact/refine/tree_summarize use_async=True)
# 提示词调优(中文更准确)from llama_index.core.prompts import PromptTemplate
new_tmpl = ( "你是一个专业的文档助手,参考以下上下文回答问题。\n" "不要编造信息,仅引用上下文内容。\n" "如果上下文中没有答案,请说:'文档中未找到相关信息'。\n" "---------------------\n" "{context_str}\n" "---------------------\n" "用户问题: {query_str}\n" "你的回答:")query_engine.update_prompts( {"response_synthesizer:text_qa_template": PromptTemplate(new_tmpl)})七、多模型管理
7.1 下载与切换模型
# 下载多个模型ollama pull qwen2:7b # 通义千问ollama pull llama3:8b # Llama 3ollama pull mistral:7b # Mistralollama pull nomic-embed-text # 嵌入模型
# 查看已安装模型ollama list# NAME ID SIZE MODIFIED# deepseek-coder:6.7b xxxxxxxx 3.8 GB 2 hours ago# qwen2:7b xxxxxxxx 4.4 GB 1 hour ago# llama3:8b xxxxxxxx 4.7 GB 30 min ago
# 在代码中切换模型import ollama
# 方法 1:创建不同的客户端实例def chat_with_model(model, prompt): resp = ollama.chat(model=model, messages=[ {'role': 'user', 'content': prompt} ]) return resp['message']['content']
# 使用不同模型print("=== DeepSeek-Coder 回答===")print(chat_with_model('deepseek-coder:6.7b', "写一个快速排序"))
print("\n=== Qwen 回答 ===")print(chat_with_model('qwen2:7b', "解释量子计算"))
print("\n=== Llama 3 回答 ===")print(chat_with_model('llama3:8b', "How to learn Rust?"))7.2 模型微调与自定义 Modelfile
# 基于现有模型创建专业助手cat > Modelfile.product << 'EOF'FROM qwen2:7b
SYSTEM """你是一个产品专家,熟悉以下产品:- 产品 A:规格、价格、特性- 产品 B:规格、价格、特性用户咨询时提供专业建议。"""
PARAMETER temperature 0.5PARAMETER top_p 0.8PARAMETER num_ctx 8192EOF
ollama create product-assistant -f Modelfile.productollama run product-assistant7.3 模型性能对比
import timeimport ollama
models = ['deepseek-coder:6.7b', 'qwen2:7b', 'llama3:8b', 'mistral:7b']test_prompt = "请用 200 字以内解释什么是人工智能?"
results = []for model in models: start = time.time() response = ollama.chat(model=model, messages=[ {'role': 'user', 'content': test_prompt} ]) elapsed = time.time() - start tokens = len(response['message']['content'])
results.append({ 'model': model, 'time': f"{elapsed:.2f}s", 'tokens': tokens, 'speed': f"{tokens/elapsed:.0f} tokens/s" })
print(f"{model}: {elapsed:.2f}s, {tokens} tokens, {tokens/elapsed:.0f} t/s")
# 输出:# deepseek-coder:6.7b: 8.32s, 280 tokens, 34 t/s# qwen2:7b: 7.18s, 320 tokens, 45 t/s# llama3:8b: 9.05s, 265 tokens, 29 t/s# mistral:7b: 6.82s, 290 tokens, 43 t/s八、性能优化
8.1 GPU 加速
# 查看 GPU 使用情况nvidia-smi
# 配置 GPU 层数(环境变量或 Modelfile)export OLLAMA_GPU_LAYERS=50 # 越高越快(需足够显存)
# 或在 Modelfile 中设置# PARAMETER num_gpu 508.2 内存优化
# 使用量化版本(推荐普通用户)ollama run deepseek-coder:6.7b # Q4 量化版本
# 选择更小的模型ollama run qwen2:1.5b # 轻量模型,速度极快
# 调整上下文窗口# PARAMETER num_ctx 2048 # 降低上下文减少内存8.3 多线程与并发
from concurrent.futures import ThreadPoolExecutorimport ollama
# 并发处理多个任务def process_query(query): resp = ollama.chat(model='deepseek-coder:6.7b', messages=[ {'role': 'user', 'content': query} ]) return resp['message']['content']
queries = [ "什么是快速排序?", "什么是二分查找?", "什么是哈希表?"]
with ThreadPoolExecutor(max_workers=3) as executor: results = list(executor.map(process_query, queries))
for q, r in zip(queries, results): print(f"Q: {q}\nA: {r[:100]}...\n")8.4 模型预热与缓存
import ollama
# 预热模型(首次加载较慢,预热后速度提升)ollama.chat(model='deepseek-coder:6.7b', messages=[ {'role': 'user', 'content': '你好,请做自我介绍。'}])
# 后续请求速度显著提升九、常见问题排错
Q1: 模型下载失败或中断
# 重新下载ollama pull deepseek-coder:6.7b
# 或手动下载 GGUF 文件后导入# 从 https://huggingface.co 下载 .gguf 文件ollama create my-model -f Modelfile # 在 Modelfile 中引用本地文件Q2: 显存不足(CUDA out of memory)
# 解决方案:# 1. 选择量化版本ollama run qwen2:1.5b
# 2. 降低上下文窗口# Modelfile 中设置# PARAMETER num_ctx 2048
# 3. 使用 CPU 推理(较慢但稳定)export OLLAMA_CUDA=0ollama run deepseek-coder:6.7b
# 4. 减小 batch size# PARAMETER num_batch 512Q3: Web UI 无法连接 Ollama
# 检查服务是否启动ps aux | grep ollama
# 重启服务ollama serve &
# 检查端口监听netstat -tlnp | grep 11434
# 如果远程访问,设置允许来源export OLLAMA_ORIGINS=*export OLLAMA_HOST=0.0.0.0ollama serveQ4: 中文回答质量差
# 选择中文优化的模型ollama run qwen2:7b # 通义千问(中文最佳)ollama run deepseek-coder:6.7b # 代码模型
# 使用中文提示词prompt = "请用中文回答:什么是大模型?"Q5: 模型生成速度太慢
# 1. 检查是否启用 GPUnvidia-smi
# 2. 优化模型参数# PARAMETER num_gpu 100 # 全量 GPU 加速
# 3. 选择更小的模型ollama run qwen2:1.5b
# 4. 使用 Apple Silicon(M 芯片)# 通常比同价位 x86 更快
# 5. 增加 CPU 线程数export OLLAMA_NUM_THREADS=8Q6: Docker 容器无法连接本地 Ollama
# Docker 内访问宿主机 Ollama# macOS/Windows: 使用 host.docker.internaldocker run -d -p 3000:3000 \ --add-host=host.docker.internal:host-gateway \ ghcr.io/open-webui/open-webui:main
# Linux:# 在 Docker 容器中使用宿主机 IP 或添加 --network=hostdocker run -d --network=host \ -v open-webui:/app/backend/data \ ghcr.io/open-webui/open-webui:main十、总结
本地部署大模型是 2026 年每个开发者都应掌握的技能。借助 Ollama,你可以:
- ✅ 零成本运行 DeepSeek/Qwen/Llama 等顶级模型
- ✅ 搭建私有 AI 助手,保护数据隐私
- ✅ 构建企业级 RAG 知识库系统
- ✅ 通过 OpenAI 兼容 API 集成到任意应用
- ✅ 使用 Web UI 获得类 ChatGPT 的体验
最佳实践清单:
- 从 7B 量化模型起步,根据需要升级
- 使用 Open WebUI 获得最佳对话体验
- 通过 Modelfile 定制模型行为
- RAG 知识库使用中文嵌入模型(如 bge-m3/mxbai-embed-large)
- 多模型管理,根据任务选择合适模型
- 定期更新 Ollama 与模型版本
- 关注硬件利用率,按需调整 GPU/CPU 参数
本地部署 DeepSeek + Ollama 完全指南:AI 大模型本地化部署与 RAG 知识库搭建
https://971918.xyz/posts/docs/local-deepseek-advanced/