本文是我从 0 到 1 踩了一下午坑的完整记录,所有报错都亲测解决,照着做就能成功。 最终效果:在自己电脑上用 Codex CLI,完全本地运行大模型,不花 API 钱,隐私安全,随时切换云端/本地模型。
一、为什么要这么做?
省钱:不用买 OpenAI API 额度,不用中转站,完全免费
隐私:代码和数据都在自己电脑上,不上传
灵活:用 CC Switch 一键切换云端模型(写复杂代码)和本地模型(日常简单任务)
二、准备工作
你需要提前装好:
Docker Desktop(Windows/Mac 都行)
Codex CLI(OpenAI 官方的命令行 AI 编程工具)
CC Switch(Codex 模型切换工具,用来一键切换不同供应商)
三、第一步:用 Docker 跑 Ollama
1. 启动 Ollama 容器
打开终端(Windows 用 PowerShell 或 WSL 都行),执行:
docker run -d \ --name ollama \ -p 11434:11434 \ -v ollama_data:/root/.ollama \ --restart always \ ollama/ollama
💡 说明:
-v ollama_data:/root/.ollama一定要加!不然删容器模型就没了
--restart always开机自动启动,不用每次手动开
2. 拉模型
我们选deepseek-r1:7b,带思考能力,适合 Codex:
docker exec -it ollama ollama pull deepseek-r1:7b
模型大小约 4.7GB,根据网速等几分钟。
四、第二步:给模型改大上下文(关键!90% 的人卡在这里)
❌ 为什么会报错?
Codex 一启动就会发 8000+ token 的系统提示词,但 Ollama 默认上下文只有 4096,直接报错:
request (8643 tokens) exceeds the available context size (4096 tokens)
✅ 正确解决方法:创建自定义模型
不要改环境变量!不要改请求参数!直接把上下文写进模型文件里,一劳永逸:
# 1. 在容器里创建 Modelfile docker exec ollama sh -c 'echo "FROM deepseek-r1:7b PARAMETER num_ctx 32768" > /tmp/Modelfile' # 2. 用这个 Modelfile 创建新模型 docker exec ollama ollama create deepseek-r1-codex -f /tmp/Modelfile
💡 为什么这么做?
Ollama 的 OpenAI 兼容接口不读请求里传的 num_ctx 参数
OLLAMA_NUM_CTX 环境变量对 OpenAI 接口不生效
只有把参数写进模型本身,不管用什么接口调用都生效
五、第三步:在 CC Switch 里配置本地供应商
打开 CC Switch,点右上角+添加供应商
选择「自定义」,填写:
供应商名称:Ollama 本地
API 地址:
http://localhost:11434/v1API Key:随便填,比如
ollama模型名称:
deepseek-r1-codex(就是我们刚才创建的那个)
高级设置里:
开启「需要本地路由映射」
模型映射里的上下文窗口填
1000000(告诉 Codex 模型支持大上下文)Body 覆盖里可以加:
{ "temperature": 0.2 }
保存,点「启用」
六、第四步:重启 Codex 测试
关掉 Codex 重新打开
发一句"你好"测试
等待模型思考(7B 纯 CPU 跑会比较慢,第一次可能要几分钟)
七、我们踩过的所有坑(避坑指南)
坑 1:WSL 里找不到 docker/ollama 命令
原因:你是在 WSL 里跑的,但 Ollama 和 Docker 都装在 Windows 上解决:要么在 Windows PowerShell 里跑命令,要么在 Docker Desktop → Settings → WSL Integration 里把 Ubuntu 的开关打开
坑 2:报错"xxx" does not support thinking
原因:你用的模型不带思考能力,Codex 默认开了思考模式解决:换 deepseek-r1 这种带 thinking 能力的模型
坑 3:报错request exceeds the available context size (4096 tokens)
原因:Ollama 默认上下文太小,装不下 Codex 的系统提示词解决:就是我们第四步的方法,创建自定义模型写死 32768 上下文
坑 4:改了 OLLAMA_NUM_CTX 环境变量还是没用
原因:新版 Ollama 的 OpenAI 兼容接口不读这个环境变量解决:别折腾环境变量了,直接创建自定义模型改 num_ctx
坑 5:在请求里传 options.num_ctx 还是没用
原因:Ollama 的 OpenAI 接口不读请求里的 num_ctx 参数解决:同上,写进模型文件里最靠谱
坑 6:删了容器模型就没了
原因:没挂载数据卷解决:一定要加-v ollama_data:/root/.ollama
八、日常使用技巧
1. 切换模型
想切回云端模型?直接在 CC Switch 里点原来的供应商启用就行,一秒切换,配置都存着。
2. 释放内存
本地模型不用的时候,Ollama 会 5 分钟自动卸载模型释放内存。 想立刻释放就跑:
curl http://localhost:11434/api/generate -d '{"model":"deepseek-r1-codex","keep_alive":0}'3. 速度优化
纯 CPU 跑 7B 模型就是慢,嫌慢可以拉更小的模型:
docker exec -it ollama ollama pull qwen2.5-coder:3b
然后重复第四步,创建一个 3b 的自定义模型,速度会快好几倍。
九、最终效果
✅ 完全本地运行,不花 API 钱 ✅ 隐私安全,代码不上传 ✅ 一键切换云端/本地模型 ✅ 支持思考模式,支持工具调用
最后提醒:7B 小模型能力有限,复杂的多文件代码任务还是建议切回云端大模型,本地模型适合简单的问答、写小脚本、日常学习用。