1. 内网工作站为什么需要离线 Deepseek从公网依赖到本地推理的完整链路很多做企业内网开发的朋友都遇到过同一个尴尬手上有一台配置还行的开发机想跑个代码补全或者文档问答结果公司网络把 HuggingFace、Ollama 官方源、GitHub Release 全给限了ollama pull卡在几百 KB 不动装到一半直接超时。更麻烦的是有些项目源码本身就不能出内网你不可能把整个 C# 工程丢给云端 API 去解析。这时候「本地部署 Deepseek Ollama 离线推理」就成了刚需——模型文件、推理进程、调用链路全部落在本机不依赖公网也能稳定跑。Ollama 本质上是一个把模型权重、推理引擎llama.cpp 系、HTTP 服务打包在一起的运行时。你装完它本机会多出一个127.0.0.1:11434的本地服务任何支持 OpenAI 兼容协议的工具Continue、Cline、OpenAI SDK都能直接连。Deepseek 系列里适合离线跑的主要是deepseek-coder和deepseek-r1的蒸馏小参数版本1.3b、6.7b 这种在 4G~8G 显存的工作站上能跑得动代码补全和简单推理够用。适合谁一是内网开发机、涉密项目工作站源码不能外传二是个人笔记本想白嫖本地推理不想每月付云端 token 费三是网络受限环境官方源拉不动模型。这篇我会把「离线导入模型 Ollama 服务搭建 TaoToken 统一 Key 通道对接」整条链路讲透包括ollama pull加速、Modelfile 自定义、离线 tar 包导入以及用统一 Base URL 做连通性验证的完整动作。你照着做最后能拿到一个不联网也能稳定调用的本地 Deepseek 服务。需要先说明一个概念Ollama 的「离线」分两层。第一层是安装和拉模型阶段可以借助镜像加速第二层是模型落地之后推理过程完全不需要公网。很多人卡在第一层就放弃了其实只要把模型文件搞到本地后面ollama run和 API 调用都是纯本地行为。下面按「先解决拉取再解决服务最后解决统一调用」的顺序展开。2. TaoToken 统一 Key 与 API 通道前置准备让本地服务也能被标准协议调用在正式配 Ollama 之前先把调用侧的通道理清楚。本地 Ollama 默认暴露的是http://127.0.0.1:11434它自带一个 OpenAI 兼容端点/v1/chat/completions。但实际用起来你会发现两个问题一是不同工具Continue、Cline、Codex 类客户端填 Base URL 的格式不统一有的要带/v1有的不要二是当你想把本地模型和云端模型混用、做统一路由时每个工具都要单独配一遍 Key 和地址维护成本高。TaoToken 在这里的角色是「统一 Key 统一 API 通道」。你可以把它理解成一个协议适配层对外暴露一套标准的 OpenAI 兼容接口对内可以指向本地 Ollama 服务也可以指向其他模型通道。这样你的 Continue、Cline、脚本里填的 Base URL 和 Key 始终是同一套换模型只改 Model ID不用动配置结构。前置准备分三步。第一步拿到统一 Key。访问 API Keys 管理页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite登录后创建一个 Key复制保存。这个 Key 后面会填到所有客户端的apiKey字段里。第二步确认 API 通道地址。统一 Base URL 是https://taotoken.net/api注意这个地址不带 UTM 参数直接作为baseURL使用。如果你用的是 OpenAI SDKbase_url填这个如果是 Continue 这类插件apiBase填这个。第三步确认 Model ID 的写法。本地 Ollama 拉下来的模型在 TaoToken 通道里通常用ollama/前缀或者直接模型名映射。具体以你控制台里模型列表显示的 ID 为准不要自己猜。这一步很关键Model ID 写错会直接报model not found。提示统一 Key 的好处是你本地 Ollama 服务即使换了端口、换了机器只要 TaoToken 通道里的映射改一下所有客户端都不用动。对于内网多台工作站共用一个出口的场景特别省事。如果你只是想验证模型能不能通可以直接用模型对话页https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite发一条消息看返回是否正常。这一步能快速排除 Key 和通道本身的问题再去折腾 Ollama 就不会混淆故障点。对于长期做编码、跑 Agent 任务的场景可以考虑 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite它更适合高频调用和长上下文任务。而接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite里面有各客户端的完整配置示例遇到字段对不上时优先查这里。3. 可复制配置Ollama 安装、离线模型导入与 Modelfile 完整片段这一节是全文最核心的可操作部分。我按「安装 Ollama → 配置模型存储路径 → 拉取或离线导入 Deepseek → 写 Modelfile → 启动服务」的顺序给完整命令你直接复制改路径即可。3.1 安装 Ollama 并重定向模型目录Windows 下安装包默认装 C 盘、模型也存 C 盘用户目录内网工作站 C 盘通常很小必须改。用命令行指定安装目录D:\下载\OllamaSetup.exe /DIRD:\AI\Ollama装完后设置模型存储路径避免模型把 C 盘撑爆。系统环境变量新建变量名OLLAMA_MODELS 变量值D:\AI\Ollama_Models再设置镜像加速变量解决ollama pull龟速变量名OLLAMA_REGISTRY 变量值https://mirrors.aliyun.com/ollama改完环境变量后一定要完全退出右下角 Ollama 托盘程序再重启否则变量不生效。验证是否生效ollama list如果模型目录为空但命令正常返回说明服务起来了。3.2 拉取 Deepseek 模型与离线导入在线加速拉取网络还能通的情况set OLLAMA_REGISTRYhttps://mirrors.aliyun.com/ollama ollama pull deepseek-coder:1.3b完全离线环境的做法是「先在有网机器上导出再拷贝到内网导入」。导出命令ollama pull deepseek-coder:1.3b ollama show deepseek-coder:1.3b --modelfile deepseek-coder-1.3b.Modelfile然后把OLLAMA_MODELS目录下对应的模型 blob 文件夹整体拷贝到内网机器的模型目录再用 Modelfile 重建ollama create deepseek-coder:1.3b -f deepseek-coder-1.3b.Modelfile3.3 自定义 Modelfile 调整推理参数Modelfile 是 Ollama 的模型定义文件可以覆盖系统提示词、温度、上下文长度。新建D:\AI\Modelfile.deepseekFROM deepseek-coder:1.3b PARAMETER temperature 0.1 PARAMETER num_ctx 8192 PARAMETER num_gpu 20 PARAMETER top_p 0.9 SYSTEM 你是一个内网代码助手只基于当前项目文件回答不编造不存在的接口。 构建自定义模型ollama create deepseek-local -f D:\AI\Modelfile.deepseek3.4 客户端配置片段Continue / Cline 通用Continue 的config.yaml或config.json里对接本地 Ollamamodels: - name: DeepSeek-Coder 本地 provider: ollama apiBase: http://127.0.0.1:11434/v1 model: deepseek-coder:1.3b maxTokens: 8192 temperature: 0.1如果走 TaoToken 统一通道把apiBase换成https://taotoken.net/apiapiKey填你的统一 Keymodel填控制台里对应的 Model ID。这样本地和云端模型可以共用一套配置结构切换只改 model 字段。注意apiBase到底带不带/v1取决于客户端实现。Continue 的 ollama provider 通常不带OpenAI 兼容 provider 要带。填错会报 404先确认再排查。4. 验证请求与成功结果curl、SDK 与客户端三层连通性检查配置写完必须验证否则你不知道是 Ollama 没起来、模型没加载还是通道配错了。我按「本地直连 → 统一通道 → 客户端」三层来验每层都有明确的成功标志。第一层验证 Ollama 本地服务是否存活curl http://127.0.0.1:11434/api/tags正常返回是一个 JSONmodels数组里能看到你拉下来的deepseek-coder:1.3b。如果连接被拒绝说明 Ollama 服务没启动去托盘图标右键启动或者命令行ollama serve。第二层验证本地推理是否正常curl http://127.0.0.1:11434/v1/chat/completions -H Content-Type: application/json -d {\model\:\deepseek-coder:1.3b\,\messages\:[{\role\:\user\,\content\:\用一句话说明什么是递归\}]}成功标志是返回体里有choices[0].message.content内容是模型生成的回答。如果返回model not found说明模型名写错或没加载如果卡住很久说明显存不够在跑 CPU检查num_gpu参数。第三层验证 TaoToken 统一通道curl https://taotoken.net/api/v1/chat/completions -H Authorization: Bearer 你的Key -H Content-Type: application/json -d {\model\:\你的ModelID\,\messages\:[{\role\:\user\,\content\:\ping\}]}成功返回标准 OpenAI 格式。如果报 401是 Key 无效或没带Bearer如果报local proxy failed说明通道到本地服务的映射没通检查 Ollama 是否在运行、端口是否被防火墙拦。第四层客户端实测。在 Continue 输入框发一句「你当前调用的是什么模型」正常返回模型名即对接成功。再发项目解析指令看它能不能跨文件读取。这一步能验证的不只是连通性还有上下文长度和文件读取权限。实测下来最容易出问题的是第三层和第四层之间的 Model ID 映射。本地模型名是deepseek-coder:1.3b但通道里可能映射成别的 ID两边对不上就报错。建议先在控制台模型列表里确认 ID再填客户端。5. 本篇常见报错排查401、local proxy failed、reading choices、OAuth 逐条对照这一节把高频报错和对应解法列清楚遇到问题直接对号入座。401 Unauthorized最常见。原因有三种——Key 没填、Key 填错、请求头没带Authorization: Bearer。检查客户端配置里的apiKey字段确认没有多余空格。如果是 TaoToken 通道去 API Keys 页确认 Key 状态是否正常。local proxy failed / connection refused通道到本地 Ollama 的连接失败。先确认ollama serve在跑curl http://127.0.0.1:11434/api/tags能返回。如果本地正常但通道报这个错说明通道配置里指向的地址不对或者 Ollama 只监听了127.0.0.1而通道需要访问宿主机 IP。检查 Ollama 启动参数OLLAMA_HOST。reading choices 相关报错如 cannot read property choices of undefined返回体结构不符合预期通常是接口返回了错误 JSON 但客户端按成功解析。先看原始返回多半是 404 或 500。404 一般是 Base URL 多了或少了/v1500 多半是模型加载失败看 Ollama 日志。OAuth / 登录相关报错Continue 首次打开会提示登录云端选择「仅本地使用」或跳过。如果误点了登录又失败去设置里清掉账号状态重新选本地模式。Cline 类插件同理不要走云端授权。模型加载超时 / 显存溢出报out of memory或长时间无响应。降低num_gpu层数或换更小参数模型。4G 显存跑 1.3b 比较稳6.7b 要 8G 以上。用ollama ps看当前加载状态。ollama pull 卡住不动镜像变量没生效。确认OLLAMA_REGISTRY是系统变量不是用户变量且重启了托盘程序。临时方案是在同一个 CMD 窗口先set再pull。Modelfile 构建报错FROM指向的模型不存在或PARAMETER拼写错误。先ollama list确认基础模型在再逐行检查 Modelfile 语法SYSTEM块的三引号要成对。提示排查顺序永远是「本地服务 → 模型加载 → 通道映射 → 客户端配置」从下往上查不要一上来就改客户端。6. 语义一致 CTA把本地 Deepseek 接进你的日常编码流本地服务跑通之后真正的价值在于把它接进日常工具链。我的做法是内网工作站上用 Ollama 跑deepseek-coder:1.3b做代码补全和单文件问答涉及跨项目、长上下文的复杂任务通过 TaoToken 统一通道切到更强的模型。两套配置共用同一个 Base URL 结构切换只改 Model ID不用重配客户端。如果你还在选长期方案编码和 Agent 场景可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite接入细节和字段说明查文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteKey 管理在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite想先试模型效果直接去对话页https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。最后给一个实用技巧把ollama stop和ollama rm写成一个清理脚本下班前一键释放显存和硬盘。内网机器资源紧张时这个习惯能省不少事。模型文件全部落在OLLAMA_MODELS指定的目录不想用了直接删文件夹不留系统残留。