简介:这份资源是面向AI初学者与个人开发者的DeepSeek本地化实践教程文档,针对官方服务频繁卡顿、宕机等痛点,提供从零搭建本地大模型环境的完整方案。包内共1个docx文件,约2.76MB,以图文步骤形式组织,涵盖Ollama安装、DeepSeek R1模型部署、Page Assist插件实现WebUI可视化对话,以及借助nomic-embed-text与AnythingLLM完成数据投喂和专属知识库训练三大模块。教程按操作顺序展开,对显存选择、模型版本匹配、工作区参数配置等易错环节均有说明,读者可据此在个人电脑上复现一套可离线运行、支持联网检索与文档问答的本地AI系统。目前已有1183人学习,适合希望低成本掌握大模型私有化部署与微调流程的新手收藏实践。
1. DeepSeek 本地部署到底在解决什么问题:从 API 依赖到数据自主
很多人第一次动本地部署的念头,不是因为技术好奇,而是被现实逼的:线上 API 按 token 计费,长文档一跑就是几十万 token,月底账单看得人心慌;更麻烦的是,公司内部合同、代码、客户资料根本不敢往外部接口送。DeepSeek 本地部署 + WebUI 可视化 + 数据投喂训练这条路线,本质上就是解决三件事:模型跑在自己机器上、界面像聊天软件一样能用、私有数据能喂进去让它更懂你的业务。Ollama 负责把模型拉下来并跑起来,WebUI 负责把命令行变成可视化界面,AnythingLLM 这类工具负责把文档切片、向量化、挂到模型上做检索增强。适合谁?手里有一台 16GB 显存以上的机器、想先跑通再谈优化的开发者,以及需要把内部知识库接进对话系统的团队。新手保姆级的意思不是点两下就完事,而是每一步都有命令、有参数、有排错方向。
2. 用 Ollama 把 DeepSeek 拉起来:安装、镜像与模型选择
2.1 Ollama 安装与国内镜像源配置
Ollama 是目前本地跑大模型最省心的入口,一条命令就能把模型拉下来并启动服务。但国内直接拉取官方源经常慢到让人怀疑人生,所以第一步不是急着ollama run,而是先把镜像源配好。
Linux 下安装:
# 官方安装脚本,国内可能较慢,可先配置镜像再执行 curl -fsSL https://ollama.com/install.sh | sh # 验证安装 ollama --version如果安装脚本拉取慢,常见做法是手动下载对应平台的二进制包,或者配置系统级代理环境变量后再执行。安装完成后,Ollama 默认监听127.0.0.1:11434,这个地址后面 WebUI 和 AnythingLLM 都要用到。
配置模型拉取镜像源(以 Linux 为例,写入 systemd 服务环境变量):
# 编辑 ollama 服务配置 sudo systemctl edit ollama # 在编辑器中加入以下内容,替换为可用的镜像地址 [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_MODELS=/data/ollama/models"OLLAMA_HOST改成0.0.0.0是为了让局域网内其他机器或容器能访问;OLLAMA_MODELS指定模型存储路径,默认在用户目录下,模型动辄几十 GB,建议提前挂到大盘。改完执行sudo systemctl daemon-reload && sudo systemctl restart ollama。
注意:镜像源地址会变动,不要死记某一个域名,优先用你所在网络环境下实测能跑通的源。如果拉取时报 TLS 超时,先确认系统时间是否准确,再检查 DNS。
2.2 DeepSeek 模型选型:参数规模与显存对照
DeepSeek 系列在 Ollama 上的常见可选规格包括 1.5B、7B、8B、14B、32B 等蒸馏版本,以及更大的 MoE 版本。新手最容易翻车的地方是:看别人说 7B 好用,自己 8GB 显存硬拉 14B,结果加载到一半就 OOM。
| 模型规格 | 量化等级 | 最低显存(推理) | 适用场景 |
|---|---|---|---|
| deepseek-r1:1.5b | Q4_K_M | 2GB | 轻量问答、测试流程 |
| deepseek-r1:7b | Q4_K_M | 6GB | 日常对话、代码补全 |
| deepseek-r1:8b | Q4_K_M | 7GB | 略强于 7B 的通用任务 |
| deepseek-r1:14b | Q4_K_M | 12GB | 复杂推理、长文档 |
| deepseek-r1:32b | Q4_K_M | 24GB | 接近可用的专业级 |
拉取并运行:
# 拉取 7B 量化版,首次会下载数 GB 文件 ollama pull deepseek-r1:7b # 交互式运行 ollama run deepseek-r1:7b # 非交互式单次调用,便于脚本集成 curl http://127.0.0.1:11434/api/generate -d '{ "model": "deepseek-r1:7b", "prompt": "用一句话解释什么是向量数据库", "stream": false }'ollama pull只负责下载,ollama run会同时下载并进入对话。API 调用时stream: false表示一次性返回完整结果,适合程序处理;改成true则是流式输出,适合前端逐字显示。如果ollama run报500 internal server error: llama-server process,大概率是显存不足或模型文件损坏,先ollama rm删掉重新拉,再检查nvidia-smi显存占用。
2.3 验证 Ollama 服务与常见启动失败排查
模型拉下来不代表服务就绪。先用ollama list确认模型在列表里,再用curl http://127.0.0.1:11434/api/tags看 API 是否返回 JSON。如果返回连接拒绝,说明服务没起来,systemctl status ollama看日志。
常见失败原因:端口被占用(改OLLAMA_HOST端口)、模型路径权限不足(chown给 ollama 用户)、GPU 驱动版本过低(nvidia-smi看 CUDA 版本,Ollama 对驱动有最低要求)。这些排查动作花不了几分钟,但能省掉后面 WebUI 连不上时的反复折腾。
3. WebUI 可视化:Open WebUI 部署与对接 Ollama
3.1 Open WebUI 的 Docker 部署与端口映射
Ollama 的命令行能用,但团队协作和日常使用还是图形界面顺手。Open WebUI 是目前对接 Ollama 最成熟的 WebUI 之一,支持多用户、对话历史、模型切换、文档上传。
用 Docker 部署:
# 拉取镜像并启动,映射 3000 端口 docker run -d \ -p 3000:8080 \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \ ghcr.io/open-webui/open-webui:main-p 3000:8080把容器内 8080 映射到宿主机 3000;-v open-webui:/app/backend/data持久化对话和配置,容器删了数据还在;OLLAMA_BASE_URL是关键参数,Linux 下host.docker.internal不一定可用,需要改成宿主机实际 IP,或者用--network=host让容器直接共享宿主网络。
启动后浏览器打开http://你的IP:3000,首次注册的账号就是管理员。进入设置 → 连接,确认 Ollama 地址填的是http://127.0.0.1:11434或宿主机 IP,点刷新能看到模型列表就说明通了。
3.2 模型切换、对话参数与中文界面设置
Open WebUI 默认界面是英文,在设置 → 通用里可以切换中文。模型选择在对话页顶部下拉框,拉下来的模型都会出现在这里。
几个必调参数:
- Temperature:默认 0.7,写代码或做事实问答调到 0.2~0.3,创意写作调到 0.8~1.0。
- Context Length:决定模型能记住多少轮对话,7B 模型建议 4096,14B 以上可以开到 8192,开太大显存吃紧。
- Top P:默认 0.9,一般不用动,和 Temperature 配合微调。
如果对话时提示Model not found,先确认 Ollama 里ollama list有该模型,再检查 WebUI 的 Ollama 地址是否写错。如果回复特别慢,看nvidia-smi显存是否跑满,必要时换更小量化版本。
3.3 用 Docker Compose 把 Ollama 和 WebUI 串起来
单容器跑没问题,但每次改配置都要敲一长串docker run很烦。用 Compose 把两个服务写在一起,改配置只动 YAML。
version: '3.8' services: ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ollama_data:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] open-webui: image: ghcr.io/open-webui/open-webui:main ports: - "3000:8080" volumes: - open-webui_data:/app/backend/data environment: - OLLAMA_BASE_URL=http://ollama:11434 depends_on: - ollama volumes: ollama_data: open-webui_data:OLLAMA_BASE_URL这里写http://ollama:11434,因为 Compose 会自动创建内部网络,服务名就是主机名。deploy.resources那段是给 Ollama 挂 GPU,没有 N 卡就删掉。depends_on保证启动顺序,但 Ollama 模型加载需要时间,WebUI 刚起来可能连不上,等半分钟刷新即可。
4. 数据投喂训练:用 AnythingLLM 把私有文档接进 DeepSeek
4.1 AnythingLLM 安装与工作区创建
Ollama + WebUI 解决了“能聊”,但模型不知道你的内部文档。AnythingLLM 的作用是把 PDF、Word、Markdown 切片、向量化,存进本地向量库,对话时先检索相关片段再交给模型回答。这就是常说的 RAG(检索增强生成),也是“数据投喂训练”在个人场景下最实际的落地方式——不是真的去微调模型权重,而是用检索把私有知识挂上去。
安装方式选 Docker:
docker run -d \ -p 3001:3001 \ -v anythingllm:/app/server/storage \ --name anythingllm \ --restart always \ -e STORAGE_DIR=/app/server/storage \ mintplexlabs/anythingllm:latest打开http://你的IP:3001,首次进入设置管理员密码,然后创建工作区。工作区是文档隔离的单位,不同项目建不同工作区,避免知识串味。
4.2 对接 Ollama 与向量模型配置
AnythingLLM 需要两个模型:一个对话模型(DeepSeek),一个嵌入模型(把文本转成向量)。进入设置 → LLM 偏好,选 Ollama,地址填http://宿主机IP:11434,模型选deepseek-r1:7b。
嵌入模型同样选 Ollama,推荐nomic-embed-text,先拉下来:
ollama pull nomic-embed-text向量数据库默认用内置的 LanceDB,个人使用足够。如果文档量大,可以换 Chroma 或 Qdrant,但新手先用默认的跑通再说。
注意:嵌入模型和对话模型是两回事,不要用 DeepSeek 去做嵌入,效果差且慢。
nomic-embed-text体积小、速度快,是本地 RAG 的常见选择。
4.3 文档上传、切片与检索参数调整
在工作区里点上传,支持 PDF、TXT、DOCX、Markdown。上传后点“Move to Workspace”才会真正进入向量库。切片参数在设置 → 文本分割里:
- Chunk Size:默认 1000 字符,中文文档建议 500~800,太大检索不精准,太小丢上下文。
- Chunk Overlap:默认 200,保持 100~200 即可,避免切片边界切断句子。
检索时 AnythingLLM 会先向量搜索 Top K 个片段,默认 K=4,文档多可以调到 6~8,但太多会挤占对话模型的上下文窗口。如果回答总是“文档里没有提到”,先检查文档是否真的移入了工作区,再看嵌入模型是否正常返回向量。
5. 避坑与排查:本地部署 DeepSeek 最常见的五个翻车点
5.1 模型拉取慢或中断
现象:ollama pull卡在某个百分比不动,或者报 TLS handshake timeout。原因:默认源在国内访问不稳定,或者磁盘空间不足导致写入失败。解决:配置镜像源后重试;检查df -h确认模型存储盘有足够空间;中断后重新 pull 会断点续传,不用删了重来。
5.2 WebUI 连不上 Ollama
现象:Open WebUI 设置里刷新模型列表报错,或者对话时提示连接失败。原因:Docker 容器内127.0.0.1指向容器自己,不是宿主机;或者 Ollama 只监听了127.0.0.1没监听0.0.0.0。解决:Ollama 的OLLAMA_HOST改成0.0.0.0:11434;WebUI 里地址填宿主机实际 IP,Compose 部署则填服务名http://ollama:11434。
5.3 显存不足导致模型加载失败
现象:ollama run报CUDA out of memory或llama-server process错误。原因:模型量化等级对应的显存需求超过实际可用显存,或者有其他进程占用 GPU。解决:换更小规格或更低量化版本;nvidia-smi查看占用进程,关掉不必要的 GPU 任务;Ollama 支持OLLAMA_GPU_LAYERS控制卸载到 GPU 的层数,适当调低可以缓解。
5.4 AnythingLLM 检索不到文档内容
现象:文档已上传,但提问时模型说不知道。原因:文档没有“Move to Workspace”;嵌入模型没配置或拉取失败;切片太大导致向量匹配不准。解决:确认文档状态是已嵌入;检查嵌入模型是否在 Ollama 列表里;调小 Chunk Size 重新嵌入。
5.5 中文回答夹杂英文或格式混乱
现象:DeepSeek 回答时中英文混杂,或者输出 Markdown 符号乱飞。原因:提示词没有约束语言;模型本身对中文支持因规格而异,小模型更容易出现。解决:在系统提示词里明确“请用中文回答”;换更大规格模型;WebUI 里调整 Temperature 到 0.3 左右减少随机性。
6. 进阶技巧:用 API 把本地 DeepSeek 接进自己的工具链
跑通 WebUI 和 AnythingLLM 之后,真正的效率提升来自把本地模型接进日常工具。Ollama 暴露的 API 兼容 OpenAI 格式,这意味着很多现成工具改个 base_url 就能用。
import requests # Ollama 的 OpenAI 兼容接口 url = "http://127.0.0.1:11434/v1/chat/completions" headers = {"Content-Type": "application/json"} data = { "model": "deepseek-r1:7b", "messages": [ {"role": "system", "content": "你是一个简洁的中文技术助手。"}, {"role": "user", "content": "解释一下 RAG 和微调的区别"} ], "temperature": 0.3, "stream": False } resp = requests.post(url, headers=headers, json=data) print(resp.json()["choices"][0]["message"]["content"])这段代码的关键在url路径:Ollama 原生 API 是/api/generate,但加上/v1/chat/completions就变成 OpenAI 兼容格式,messages数组、temperature、stream这些参数和 OpenAI 一致。很多支持自定义 API 地址的工具——比如代码编辑器插件、笔记软件、自动化流程工具——只要填这个地址和模型名就能接入本地 DeepSeek。
验证方法很简单:先用curl确认接口返回正常,再在目标工具里填地址测试。如果工具要求 API Key,随便填一个非空字符串即可,Ollama 默认不校验。
我自己的习惯是:新机器先跑通 Ollama + Open WebUI 这条最短路径,确认模型能对话,再往上叠 AnythingLLM 做知识库,最后才考虑接工具链。顺序反了容易在某个环节卡住时分不清是模型问题还是网络问题。本地部署这件事,慢就是快,每一步验证过再往下走,比一口气全装完再排查要省时间。希望帮到你。
本文还有配套的精品资源,点击获取