多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DeepSeek 接入开发全指南:本地部署、API 调用与 Codex CLI 配置

DeepSeek 接入开发全指南:本地部署、API 调用与 Codex CLI 配置 最近技术圈里有人拿一句说唱歌词玩梗“DeepSeek 直接干掉 ChatGPT”。这话当段子听没问题但对写代码的同学来说真正值得研究的是它背后的事实DeepSeek 已经从“一个能聊天的网页”变成了“开源权重 商业 API 本地可部署”的组合体。它能接入你现有的代码工具链能在本地跑也能通过官方 API 做应用集成还能在 Codex CLI 里当后端模型用。这篇文章不讨论“谁干掉谁”只讨论怎么把 DeepSeek 用起来。我会按四条主线展开第一DeepSeek 的能力边界和适用场景第二如何用 Ollama 在本地把模型跑起来第三如何用官方 API 做接口调用和批量任务第四把 DeepSeek 接进 Codex CLI 时常见的配置问题比如“config.toml 无法加载”“unable to locate the codex cli binary”“reasoning_content must be passed back to the api”这些报错我会给排查思路和示例配置。适合读者想低成本接入 LLM API 的开发者、想在本地跑开源大模型的玩家、被 Codex CLI 第三方模型配置卡住的人。看完这篇你至少能判断一件事DeepSeek 能不能在你自己的工具链里当主力模型以及它和 ChatGPT 生态的实际差距在哪。1. DeepSeek 核心能力速览能力项说明产品形态开源大语言模型 商业 API 双形态常见模型名deepseek-chat、deepseek-reasoner具体以官方开放平台为准API 兼容性接口风格兼容 OpenAI Chat Completions可低成本迁移现有代码本地部署可通过 Ollama、vLLM 等工具加载开源权重工具链接入Codex CLI、ChatBox、NextChat、自动化脚本等批量任务支持通过 API 脚本循环处理文本分类、摘要、代码生成等代码能力能完成代码补全、函数生成、代码解释、单元测试编写推理能力deepseek-reasoner 走思考模式适合数学、逻辑、复杂问题拆解主要优势开源权重可自托管API 按量付费没有账号生态绑定使用边界需要遵守模型开源许可证和平台服务条款这里要提醒一句DeepSeek 官方 API 的模型名和 Ollama 本地模型名不是一回事。deepseek-chat是官方 API 里的非思考模型deepseek-reasoner是思考模型本地 Ollama 里的deepseek-r1:7b这类标签又是另一套命名。后面实操时别搞混否则会一直报 model not found。2. 适用场景与使用边界2.1 适合谁用个人开发者需要一个便宜、够快、能写代码的 LLM API不在乎必须用 ChatGPT 账号体系。本地部署玩家有 NVIDIA 显卡或 Mac希望模型完全跑在自己机器上数据不出内网。自动化脚本作者需要把 LLM 封装成 HTTP 接口批量生成摘要、分类、抽取结构化信息。技术团队评估者想对比开源模型和商业模型在代码任务上的实际表现先做一轮可行性测试。2.2 不适合什么场景如果你重度依赖 OpenAI 生态的插件、GPTs、Assistant API、全托管知识库那么 DeepSeek 目前不能完整替代。它更像“模型供应层”而不是“完整应用平台”。你需要自己承担应用层组装和运维工作。另外本地部署不是零门槛。模型文件动辄几个 GB 到几十 GB推理速度取决于显存、内存和量化等级。没有 GPU 的机器也能跑但速度和体验会明显下降。2.3 合规与安全边界不管用官方 API 还是本地部署都要注意数据合规。不要把未脱敏的身份证号、手机号、企业合同直接丢给模型。调用 API 前先确认服务商的数据使用条款本地部署虽然数据不出机器但模型输出仍需要通过人工校验。用途上也要克制不要用模型批量生成钓鱼文案、虚假新闻、欺诈内容。做代码生成时建议先跑测试再合入模型输出的代码不保证一定正确。3. 环境准备与前置条件3.1 本地部署 DeepSeek 的通用检查清单检查项说明操作系统Windows 10/11、Ubuntu 20.04、macOS 均可GPUNVIDIA 显卡优先驱动版本要新AMD、Apple Silicon 可以跑但效率不同显存取决于模型尺寸和量化等级建议先在模型仓库页查看推荐配置内存16GB 以上更稳磁盘模型文件 5GB 到 30GB 不等需要预留空间推理工具Ollama、llama.cpp、vLLM 任选其一CUDA 环境NVIDIA 用户需要新版驱动容器场景下要装 nvidia-container-toolkit端口占用Ollama 默认使用 11434注意本机端口是否被占3.2 API 调用准备注册 DeepSeek 开放平台账号创建 API Key。确认本地机器能访问官方 API 地址。准备好curl或 Python 环境推荐 Python 3.9 并安装requests。不要把 API Key 直接写进代码仓库优先用环境变量或本地密钥文件。4. 本地部署启动与验证本地部署建议先用 Ollama它的安装和模型管理最省事。4.1 安装 Ollama从 Ollama 官网下载对应系统的安装包Windows 和 macOS 有安装器Linux 可以用官方脚本。安装完成后打开终端确认ollama --version4.2 拉取模型以 DeepSeek 系列模型为例先用小尺寸模型做验证ollama pull deepseek-r1:7b如果你显存充足可以换更大的参数版本具体标签以 Ollama 模型库当前页面为准。第一次拉取需要下载几个 GB 的模型文件耐心等。4.3 启动服务Ollama 安装后通常会自动注册后台服务。如果没启动手动执行ollama serve默认监听127.0.0.1:11434。看到类似“listening on 127.0.0.1:11434”的输出就是起来了。4.4 验证模型推理新开一个终端用生成接口测一下curl http://127.0.0.1:11434/api/generate -d { model: deepseek-r1:7b, prompt: 用一句话解释什么是回调函数 }能返回带response字段的 JSON说明模型可以正常推理。Ollama 也提供 OpenAI 兼容接口路径是/v1/chat/completionscurl http://127.0.0.1:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: deepseek-r1:7b, messages: [{role: user, content: 你好}] }这里要注意这个端点属于 Ollama不是 DeepSeek 官方 API。很多工具配置 OpenAI 兼容地址时可以把 base_url 指向http://127.0.0.1:11434/v1模型名用 Ollama 里的标签。4.5 本地部署的判断标准一次请求能正常返回模型回答和问题相关显存没有被瞬间打爆就算跑通。如果输出明显变慢、每生成一个字要等好几秒说明模型尺寸或量化等级不适合当前机器。5. DeepSeek 官方 API 调用示例本地模型适合低成本试水和数据隔离场景但要获得更稳定的推理服务官方 API 是更省事的选择。5.1 设置环境变量export DEEPSEEK_API_KEYsk-你的keyWindows PowerShell 下$env:DEEPSEEK_API_KEYsk-你的key5.2 curl 调用curl https://api.deepseek.com/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $DEEPSEEK_API_KEY \ -d { model: deepseek-chat, messages: [ {role: system, content: 你是资深技术博主}, {role: user, content: 用 Python 写一个读取 CSV 并统计每列非空数量的函数} ] }返回结果里choices[0].message.content就是模型输出。这个调用方式和 OpenAI Chat Completions 几乎一致老代码改一下 base_url、模型名和鉴权头就能跑。5.3 Python 调用示例import os import requests api_key os.environ.get(DEEPSEEK_API_KEY) url https://api.deepseek.com/chat/completions payload { model: deepseek-chat, messages: [ {role: user, content: 解释一下 Python 装饰器} ], stream: False, } resp requests.post( url, headers{ Content-Type: application/json, Authorization: fBearer {api_key}, }, jsonpayload, timeout60, ) resp.raise_for_status() data resp.json() print(data[choices][0][message][content])5.4 批量任务示例批量处理建议用 JSONL 文件组织输入每条记录只包含这次任务需要的字段。下面是一个通用批量调用脚本import json import os import time import requests api_key os.environ.get(DEEPSEEK_API_KEY) input_file prompts.jsonl output_file outputs.jsonl with open(input_file, r, encodingutf-8) as f: tasks [json.loads(line) for line in f if line.strip()] results [] for idx, task in enumerate(tasks): try: resp requests.post( https://api.deepseek.com/chat/completions, headers{ Content-Type: application/json, Authorization: fBearer {api_key}, }, json{ model: deepseek-chat, messages: task[messages], stream: False, }, timeout120, ) resp.raise_for_status() data resp.json() output data[choices][0][message][content] results.append({index: idx, output: output}) print(ftask {idx} ok) except Exception as e: print(ftask {idx} failed: {e}) time.sleep(0.5) with open(output_file, w, encodingutf-8) as f: for r in results: f.write(json.dumps(r, ensure_asciiFalse) \n)批量任务最容易出现的问题不是模型答不好而是超时和限流。脚本里一定要加timeout、失败重试、日志记录每次请求之间留一点间隔避免把 QPS 打满。6. 把 DeepSeek 接入 Codex CLICodex CLI 是 OpenAI 开源的命令行编程助手默认对接 OpenAI 账号或 OpenAI API但它支持通过配置文件把模型提供商换成第三方。社区里最常见的玩法之一就是把后端模型切到 DeepSeek。6.1 安装 Codex CLI具体安装方式以官方 README 为准常见思路是把 Codex CLI 安装到系统 PATH 中确保终端里能直接执行codex命令。6.2 配置文件基础写法Codex CLI 的配置文件位置一般是用户目录下的.codex目录新版多用config.toml旧版可能是config.json。下面是一个通过模型提供商接入 DeepSeek 的 TOML 示例model deepseek-chat [model_providers.deepseek] name DeepSeek base_url https://api.deepseek.com env_key DEEPSEEK_API_KEY wire_api chat关键点model指定默认模型名这里填deepseek-chat。base_url指向 DeepSeek API 地址不需要包含/v1有些版本会自动拼有些不会需要按实际文档调整。env_key表示 API Key 从环境变量读取比直接写死在配置文件里安全。wire_api是 Codex CLI 和 provider 之间的协议类型chat代表 Chat Completions 风格。如果你拿到的是旧版 JSON 配置思路一样{ model: deepseek-chat, model_providers: { deepseek: { name: DeepSeek, base_url: https://api.deepseek.com, env_key: DEEPSEEK_API_KEY, wire_api: chat } } }6.3 常见报错和排查思路这块是很多人真正卡住的地方。网络热搜里出现的几个报错基本都和 Codex CLI、Electron 客户端、第三方模型接入有关。报错 1unable to locate the codex cli binary完整报错类似chatgpt failed to start. unable to locate the codex cli binary. set codex_cli_path or ensure the electron resources include bin/codex.这个报错通常出现在 Codex 桌面客户端而不是纯 CLI 模式。桌面客户端是 Electron 套壳启动时需要找到底层的codex可执行文件。如果安装时装了 App 但 CLI 二进制不在预期位置就会出现这个错误。排查方式确认终端里codex --version能执行。检查安装目录下是否存在resources/bin/codex。如果二进制在别的地方通过环境变量指定路径export CODEX_CLI_PATH$(which codex)设置完环境变量后要完全退出桌面客户端再启动只关窗口不退出进程环境变量可能不生效。报错 2cant load config.toml完整报错类似chatgpt cant load config.toml, so this thread cant resume. fix config.toml: model这个信息已经定位到配置文件的model字段。常见原因是model写了不存在的模型名。TOML 语法错误比如字符串没有加引号。配置里同时存在model和model_providers但 provider 没有配全。排查方式先备份现有配置然后重置一个最小配置测试。用能确定存在的模型名例如deepseek-chat。检查 TOML 语法缩进和引号都要注意。用调试模式启动客户端看具体解析到哪一行失败。报错 3reasoning_content in the thinking mode must be passed back to the api完整报错类似cc switch local proxy failed while handling codex endpoint /responses. provider: deepseek; model: deepseek-v4-flash; upstream_status: http 400; cause: the reasoning_content in the thinking mode must be passed back to the api.这个报错和 DeepSeek 思考模型相关。DeepSeek 的 reasoner 模型在响应里除了普通content还会返回一个reasoning_content字段。如果请求通过一个本地代理或中继层转发给上游 API而这个中继层在拼接消息时没有把reasoning_content保留并回传上游就会返回 HTTP 400。此外报错里出现的deepseek-v4-flash并不是 DeepSeek 官方标准文档里的常规模型名更可能是第三方配置、代理层映射或命名差异。遇到这种模型名时先回到官方开放平台确认当前可用的模型列表不要盲目照抄网络里的配置。解决思路接入 Codex CLI 时优先使用非思考模型deepseek-chat绕开 thinking mode 的协议兼容问题。如果必须使用思考模型需要在代理层把reasoning_content完整回传给上游而不是只保留content。检查model和 provider 配置里是否存在第三方自定义模型名统一改成官方模型名。7. 资源占用与性能观察7.1 观察显存和 GPU 占用本地推理时NVIDIA 用户用nvidia-smi观察nvidia-smi -l 2这个命令每 2 秒刷新一次。重点看Memory-Usage一列的显存占用和%一列的 GPU 使用率。如果 GPU 使用率长期是 0但模型还能生成说明推理跑在 CPU 上需要检查 CUDA 环境和模型是否被正确加载到 GPU。7.2 CPU 推理和 GPU 推理的差异CPU 推理不是不能用而是慢。7B 量级的量化模型在 CPU 上生成一个几十字的回答可能就要等几十秒到几分钟具体取决于 CPU 和内存带宽。GPU 推理明显更快但显存不足时会触发层层换入换出速度反而可能更差。7.3 如何降低显存占用换更小参数量的模型版本比如从 14B 换成 7B。使用量化等级更高的版本比如 Q4_K_M。缩短模型上下文长度。Ollama 里可以设置num_ctx参数控制模型能看到的上下文长度。减少并发请求。本地部署的 Ollama 服务在同一时间处理多个请求时显存会叠加占用。7.4 注意端口和进程残留Ollama 默认监听 11434如果启动失败先检查端口netstat -ano | findstr 11434Linux/macOS 下用lsof -i :11434有进程占用就换端口或者在启动参数里指定其他端口。开发机重启后如果发现端口被占优先查一下是不是上次的进程没有退出。8. 常见问题与排查方法问题现象可能原因排查方式解决方案Ollama 拉取模型特别慢网络不稳定或镜像未配置查看下载速度配置镜像源或离线导入模型文件CUDA 不可用显卡驱动版本太旧或 Ollama 没有正确识别 GPUnvidia-smi查看驱动观察日志升级驱动重新安装 Ollama GPU 版本显存不足推理中途卡住模型尺寸超过显存容量nvidia-smi观察显存占用换小模型或量化版本缩短上下文11434 端口被占用已有 Ollama 进程或其它服务占用netstat/lsof查端口换端口或结束旧进程API 返回 401API Key 不存在、过期或环境变量没加载检查环境变量 echo 输出重新生成 Key确认环境变量已设置API 返回 400model not found模型名写错或把本地 Ollama 模型名填到了官方 API上官方平台确认模型列表改成 deepseek-chat 或 deepseek-reasonerCodex CLI 找不到二进制文件桌面客户端安装不完整或 PATH 未配置codex --version检测设置 CODEX_CLI_PATH 环境变量config.toml 无法加载TOML 语法错误或 model 字段无效备份后重置最小配置修正 model 名称检查引号缩进reasoning_content 报错思考模型的 thinking mode 字段未回传查看转发层日志改用 deepseek-chat或让代理层保留 reasoning_content批量任务卡住单条请求超时脚本没有失败重试增加日志输出当前任务索引设置 timeout加入重试机制9. 最佳实践与使用建议9.1 API Key 管理API Key 是敏感信息不要提交到 GitHub、不要写在代码里、不要贴在截图里发群。推荐的做法是写入.env文件或系统环境变量。9.2 本地服务不要裸奔公网如果本地部署的 Ollama 或 vLLM 服务需要给局域网其他机器用必须确认访问来源可信。更稳妥的做法是做一层反向代理加上密码认证或者直接只在本机监听。9.3 批量任务要可重跑批量任务必须考虑中断恢复。建议每完成一条任务就写一条结果到输出文件这样脚本中断后可以跳过已完成的任务重新执行剩余部分不需要从头跑一遍。9.4 生成结果要人工复核模型生成的代码、文档、结构化数据都存在幻觉风险。代码要跑测试文档要核事实数据抽取要抽检。尤其是生产环境不要直接信任模型输出。9.5 注意第三方封装工具网络里经常出现各种名称相似的第三方工具例如 DeepSeek 相关的桌面客户端、命令行包装器、插件等。下载前先看项目是否开源、star 数量、最近提交记录、是否要求你填 API Key。来历不明的工具不要直接给权限更不要把本地模型服务地址暴露给它。10. 总结与下一步DeepSeek 最值得尝试的一点是它同时覆盖了开源模型和商业 API让开发者可以按场景切换要数据隔离就用 Ollama 本地跑要稳定和速度就用官方 API要玩编程助手就把它接进 Codex CLI。三种玩法对应不同门槛但核心都是同一套模型能力。如果你现在刚接触第一步建议先把官方 API 跑通用一段几十行的 Python 脚本调一次deepseek-chat感受一下模型输出质量和响应速度。第二步再试本地部署用 Ollama 拉一个小尺寸模型观察显存占用。第三步再去折腾 Codex CLI 接入这时你已经有能力区分本地模型名、官方 API 模型名和中间层配置之间的差异。最容易踩的坑集中在模型名混用和配置文件格式不匹配。记住一个原则官方 API 走deepseek-chat本地 Ollama 看模型仓库标签Codex CLI 的配置里的 provider 必须能解析出可用的 base_url 和 API Key。后续可以继续扩展的方向包括用 DeepSeek 做 RAG 知识库问答、把接口封装成公司内部统一的 LLM 网关、对比不同量化等级下的推理速度和准确率、尝试用 deepseek-reasoner 处理复杂代码任务。每个方向都可以单独写一篇实践文章关键是先把本文里的链路跑通后面的扩展才有基础。
返回列表