
1. 为什么要在 Gemini-CLI 里塞进 DeepSeekGemini-CLI 是谷歌开源的一个终端 AI 编程助手能在命令行里读代码、改文件、跑命令交互体验和 Claude Code 很像。它默认走 Google 的模型接口但很多开发者手里更顺手的其实是 DeepSeek——中文理解好、代码能力强、价格也友好。问题在于Gemini-CLI 的模型配置和 Key 是绑死在 Google 那套体系里的想换成 DeepSeek就得改源码、改 Base URL、改鉴权方式一套下来很容易劝退。更麻烦的是多模型切换。你可能今天想用 DeepSeek 写业务代码明天想用别的模型跑长文档分析如果每个工具都单独配一份 Key 和地址管理起来就是灾难环境变量散落在.zshrc、.env、项目配置里改一个忘一个最后自己都记不清哪个工具在用哪个 Key。我试过同时维护三套配置结果一次调试花了半小时才发现是某个旧 Key 没删干净。这篇要解决的就是这个场景把 Gemini-CLI 改造成能跑 DeepSeek 的同款命令行工具并且用 TaoToken 的统一 Key 来收口所有模型的接入。TaoToken 是一个模型聚合接入服务你只需要一个 API Key就能在同一个 Base URL 下调用包括 DeepSeek 在内的多种模型省去每个模型单独申请、单独配置的麻烦。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。适合谁看已经在用或想用命令行 AI 助手的开发者手里有 DeepSeek 或其他模型需求、但不想被单一厂商绑定的同学以及被多套 Key 管理折磨过、想统一收口的人。整篇会给出可复制的环境变量、配置文件片段以及一次完整的命令行调用验证目标是在你的本地终端真正跑通同款 CLI 交互。需要先说明一点Gemini-CLI 本身是开源项目改造它属于正常的二次开发。我们不碰任何网络访问层面的东西只做模型接口的替换——把请求指向 TaoToken 的兼容端点用统一 Key 鉴权。这样既保留了 CLI 的交互逻辑又换上了你想用的模型。2. TaoToken 前置准备拿到统一 Key 和 Base URL在动手改 Gemini-CLI 之前先把 TaoToken 这边的接入信息准备好。这一步不复杂但顺序别搞反否则后面配置会来回返工。首先打开 TaoToken 官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并登录。登录后进入控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。控制台里能看到你的账户概览、用量统计以及最关键的 API Key 管理入口。进入 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 创建一个新的 Key。建议按用途命名比如gemini-cli-deepseek这样以后排查问题时一眼能看出这个 Key 是给哪个工具用的。创建后立刻复制保存页面刷新后就看不到完整 Key 了。拿到 Key 之后记住两个核心信息配置项值说明Base URLhttps://taotoken.net/api所有模型请求的统一入口注意结尾不带斜杠API Keysk-开头的一串字符在 API Keys 页面创建Model ID例如deepseek-chat具体模型标识以控制台模型列表为准这里要强调 Model ID 的写法。TaoToken 的模型列表里DeepSeek 系列通常以deepseek-开头比如对话模型、代码模型各有对应 ID。你在配置时填的 Model ID 必须和控制台里列出的完全一致大小写、连字符都不能错。如果不确定可以在控制台的模型列表页复制或者用模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 先手动发一条消息确认这个模型能正常响应再去配 CLI。为什么用统一 Key 而不是每个模型单独申请因为 Gemini-CLI 改造后它的请求会走 OpenAI 兼容格式发到 TaoToken。你换模型时只需要改一个 Model ID 字符串Base URL 和 Key 都不用动。这意味着你可以在同一个终端里通过切换环境变量就实现 DeepSeek 和其他模型的来回切换而不用维护多份鉴权配置。对于经常在多个模型间对比效果的开发者来说这个收口价值很大。另外提醒一下Key 属于敏感信息不要硬编码进源码提交到 Git。后面我们会用环境变量和本地配置文件来管理确保它不会泄露。如果你打算在团队里共享这套配置建议每个人用自己的 Key而不是共用一个。3. 可复制配置改造 Gemini-CLI 指向 TaoToken这一节是核心给出可以直接复制的配置片段。Gemini-CLI 的模型接入逻辑集中在它的配置和环境变量读取部分我们要做的是让它把请求发到 TaoToken 的兼容端点而不是默认的 Google 接口。先确认你的 Node 环境。Gemini-CLI 要求 Node 18 以上用下面命令检查node -v npm -v如果版本不够先升级 Node。然后安装 Gemini-CLI。你可以用 npm 全局安装也可以从源码跑。为了改造方便建议先把源码 clone 下来git clone https://github.com/google-gemini/gemini-cli.git cd gemini-cli npm install接下来配置环境变量。在项目根目录创建一个.env文件或者在 shell 里 export。推荐用.env配合 dotenv避免污染全局环境# .env TAOTOKEN_API_KEYsk-你的Key TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_MODELdeepseek-chat然后在 Gemini-CLI 读取配置的地方把默认的 API 端点和鉴权替换掉。找到处理模型请求的模块通常在packages/core/src/core/目录下。核心改动是构造一个 OpenAI 兼容的客户端指向 TaoToken 的 Base URL。如果你不想改源码也可以用 Gemini-CLI 支持的 settings 文件方式覆盖。在用户目录下创建或编辑~/.gemini/settings.json{ model: { name: deepseek-chat, apiBase: https://taotoken.net/api, apiKeyEnv: TAOTOKEN_API_KEY }, provider: { type: openai-compatible, baseURL: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY} } }注意${TAOTOKEN_API_KEY}这种写法是让程序从环境变量读取不要直接把 Key 写进 JSON。如果你的 Gemini-CLI 版本对 settings 字段名有差异以实际源码里的 schema 为准核心就是三件套Base URL 填https://taotoken.net/apiKey 走环境变量Model ID 填deepseek-chat。对于用 Claude Code 或 Cline 的同学配置逻辑是一样的。Claude Code 的配置在~/.claude/settings.json或项目级.claude/settings.jsonCline 的 MCP 配置在它的 settings 里都是把 Base URL 指向 TaoToken、Key 用环境变量、Model ID 填对应模型。Codex 的话看~/.codex/auth.json同样三件套。这里不展开每个工具的细节但原则一致统一 Base URL 统一 Key 明确 Model ID。配置完成后检查一下环境变量是否生效echo $TAOTOKEN_API_KEY echo $TAOTOKEN_BASE_URL如果输出为空说明.env没被加载需要确认你的启动方式有没有引入 dotenv或者直接在 shell 里 export。这一步别跳过很多后续报错都是环境变量没读到导致的。4. 验证请求跑通一次完整的命令行调用配置写完不算完得实际发一次请求确认链路通。这一节给出完整的验证动作从最简单的 curl 到 Gemini-CLI 的实际交互层层递进。先用 curl 直接打 TaoToken 的接口确认 Key 和 Base URL 没问题curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [ {role: user, content: 用一句话说明什么是命令行 AI 助手} ] }如果返回里有choices字段和模型回复内容说明 Key 和地址都正确。如果返回 401说明 Key 有问题返回 404多半是 Base URL 或路径写错了。这一步能快速定位是接入层的问题还是 CLI 层的问题。curl 通了之后启动改造后的 Gemini-CLI。如果你是从源码跑npm run start -- --prompt 列出当前目录下的文件并说明这个项目是做什么的如果你装的是全局命令直接gemini --prompt 列出当前目录下的文件并说明这个项目是做什么的预期结果是CLI 会调用 DeepSeek 模型读取当前目录然后返回文件列表和项目说明。你会看到类似工具调用的输出比如读取文件夹、读取文件内容最后给出总结。这说明 Gemini-CLI 的交互逻辑保留了下来只是背后的模型换成了 DeepSeek。再验证一次多轮交互。进入交互模式gemini然后在提示符下输入 帮我看看 package.json 里有哪些依赖挑出三个最可能影响启动速度的观察它是否能正确读取文件、分析依赖、给出有依据的回答。如果它能引用具体的包名和版本说明模型和工具调用配合正常。这里给一个实测的成功标志当 CLI 输出里出现模型对文件内容的准确引用而不是泛泛而谈就说明 DeepSeek 已经真正接管了推理。如果它只是重复你的问题或者答非所问那多半是 Model ID 填错了或者请求根本没发到 TaoToken。验证通过后你可以把这套命令保存成脚本比如run-gemini-deepseek.sh下次直接执行。这也是命令行工具相比 GUI 的优势——一组配置和命令可以长期复用、持续迭代。5. 常见报错排查401、local proxy failed 与 reading choices改造过程中最容易撞上几个典型报错这一节按真实错误信息来对照排查。401 Unauthorized。这是鉴权失败最常见的原因是 Key 没读到或填错。检查顺序先echo $TAOTOKEN_API_KEY确认环境变量有值再确认 Key 没有多余空格或换行然后确认请求头里是Authorization: Bearer sk-xxx格式。如果用的是 settings.json 里的${TAOTOKEN_API_KEY}确认你的程序支持这种变量替换有些版本不解析需要改成直接读环境变量。还有一种情况是 Key 被禁用或额度耗尽去控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 看一眼状态。local proxy failed。这个报错通常出现在 CLI 尝试通过本地代理转发请求时。如果你没有配置任何本地代理那多半是 Gemini-CLI 的默认网络配置在作祟。检查你的环境变量里有没有HTTP_PROXY、HTTPS_PROXY之类的设置如果有先 unset 掉再试。另外确认 Base URL 是https://taotoken.net/api不要写成带端口或带路径的变体。这个错误的本质是请求没发到预期地址被本地某个环节拦截了。reading choices 相关报错。比如Cannot read properties of undefined (reading choices)。这说明程序期望返回 OpenAI 格式的choices数组但实际拿到的响应结构不对。原因通常是 Base URL 路径不对——TaoToken 的兼容端点是https://taotoken.net/api/v1/chat/completions如果你只填了https://taotoken.net/api而程序没有自动补/v1就会打到错误路径。解决办法是在配置里确认完整的请求路径或者看源码里拼接逻辑确保最终 URL 正确。另一个可能是 Model ID 不存在接口返回了错误对象而不是正常响应同样会导致读choices失败。OAuth 相关报错。Gemini-CLI 默认可能走 Google 的 OAuth 登录流程改造后如果还残留这个逻辑会报 OAuth 失败或 token 无效。你需要在配置里明确指定用 API Key 鉴权而不是 OAuth。检查 settings 里有没有authType之类的字段改成api-key或对应值。如果源码里硬编码了 OAuth 分支需要把那条路径绕过直接走 API Key 客户端。模型无响应或超时。先确认 Model ID 在 TaoToken 控制台的模型列表里存在。然后确认账户余额或额度充足。如果 curl 能通但 CLI 不通问题在 CLI 的配置层如果 curl 也不通问题在 Key 或网络接入层。分层排查能省很多时间。排查时建议打开 CLI 的详细日志很多版本支持--debug或环境变量DEBUG*能看到实际发出的请求 URL 和请求头对照上面几点逐一核对。6. 统一 Key 收口后的长期用法与接入入口跑通之后这套配置的价值在于长期复用。你可以把 Gemini-CLI 的启动命令、环境变量、settings 文件都纳入版本管理Key 除外团队成员拉下来改一下自己的 Key 就能用。换模型时只改一个 Model ID不用碰其他配置。对于需要长期编码和 Agent 场景的同学可以考虑 TaoToken 的 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 适合把 CLI 助手当成日常开发工具来用。如果你只是想先验证模型效果用模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 手动试几条 prompt 最直接。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各语言和各工具的配置示例遇到字段不确定时查一下比猜快。回到 Gemini-CLI 本身改造后的体验和原版差别不大交互逻辑、工具调用、文件读写都保留只是推理换成了 DeepSeek。你可以继续用--yolo自动批准模式让它连续干活也可以在多轮对话里逐步细化需求。命令行工具的好处是每一步都可脚本化、可回溯配合统一 Key多模型切换不再是负担。最后给一个实用技巧把常用的几套配置写成不同的 shell 函数比如use-deepseek、use-other-model每个函数 export 对应的 Model ID然后启动 CLI。这样切换模型就是敲一个命令的事比改配置文件快得多。配置一次长期受益。