☰
Gemini Cli repo 系统提示词拆解:把 settings 改到 TaoToken 的完整配置与验证
2026/10/3 6:16:39 网站建设 项目流程

1. Gemini Cli repo 系统提示词到底藏在哪:从仓库结构到调用链路

很多人第一次打开 Gemini Cli 的仓库,会以为系统提示词写死在某个prompt.ts里,改一行就能换掉整个 CLI 的人格。实际翻一遍代码你会发现,它的提示词是分层拼装的:仓库根目录的GEMINI.md负责项目级上下文,packages/core/src/core/prompts.ts负责内置角色模板,而运行时真正注入的那一段,还会被settings.json里的contextFileName、systemPrompt之类的字段覆盖或追加。理解这个顺序,比记住某个文件名重要得多。

我把它拆成三层来看。第一层是「静态模板」,也就是仓库里随代码一起提交的默认提示词,它定义了 CLI 的基础行为,比如怎么读文件、怎么跑命令、什么时候该问用户确认。第二层是「项目上下文」,CLI 启动时会从当前工作目录往上找GEMINI.md,找到就整段塞进上下文,这一层是给你放项目规范、技术栈说明、禁止事项的。第三层是「运行时配置」,来自~/.gemini/settings.json或项目内的.gemini/settings.json,可以指定模型、API 端点、上下文文件名,甚至直接追加一段自定义系统提示词。

调用链路大致是这样:CLI 启动 → 读取 settings → 解析模型与端点配置 → 加载GEMINI.md→ 拼接内置模板 → 组装成最终请求 → 发给模型端点。你要做的「统一走 TaoToken 通道」,改的就是第二步里的端点配置,而「自定义 CLI 行为」,改的是第一层和第三层的提示词部分。两者互不冲突,可以同时生效。

这里有个容易踩的坑:Gemini Cli 的配置读取是有优先级的,项目级.gemini/settings.json会覆盖用户级~/.gemini/settings.json,但环境变量又会覆盖两者。如果你在项目里改了端点却没生效,先检查是不是有个环境变量在更高优先级上把它顶掉了。我试过在同一个终端里同时设了GOOGLE_GEMINI_BASE_URL和项目 settings,结果项目配置被环境变量压住,排查了十几分钟才反应过来。

适合谁看这篇?如果你正在用 Gemini Cli 做日常编码,想让它走自己的模型通道,同时还想通过系统提示词约束它的输出风格、禁止它乱改某些目录,那这篇的配置和验证步骤你可以直接抄。如果你只是想跑通一次请求,那看完第三节就够了;如果你想连提示词注入位置一起搞清楚,第四节和第五节值得细读。

2. TaoToken 前置准备:拿到 Base URL、Key 和 Model ID 三件套

在改 Gemini Cli 的 settings 之前,你得先把 TaoToken 这边的三件套准备好:Base URL、API Key、Model ID。这三个东西缺一个,后面配置都会报错,而且报错信息往往不会直接告诉你缺的是哪个,所以先备齐能省很多事。

Base URL 用https://taotoken.net/api,注意这里不带任何查询参数,就是干净的 API 根路径。Gemini Cli 内部会在这个根路径后面拼上具体的模型调用路径,所以你不需要自己补/v1之类的后缀,补了反而可能 404。API Key 去控制台生成,路径是https://taotoken.net/console/api-keys,生成后复制那一串,注意别把前后空格带进去,我见过有人粘贴时带了个换行符,结果 401 排查半天。

Model ID 这块要看你实际想调哪个模型。Gemini Cli 默认会用一个 Gemini 系列的模型名,但你走 TaoToken 通道时,Model ID 要填 TaoToken 侧支持的模型标识。如果你不确定填什么,可以先在模型对话页面手动发一条消息,看看返回里用的模型名是什么,然后把这个名字填进 settings。这一步别猜,猜错了会得到model not found之类的错误。

提示:三件套准备好之后,先别急着改 Gemini Cli 的配置,建议先用 curl 单独验证一次端点通不通。这样如果后面 CLI 报错,你能快速判断是端点问题还是 CLI 配置问题。

验证端点可以用这条命令,把$TAOTOKEN_KEY换成你的真实 Key:

curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_KEY" \ -H "Content-Type: application/json" | head -c 500

如果返回里能看到模型列表,说明 Base URL 和 Key 都没问题。如果返回 401,那就是 Key 的问题;如果返回 404,检查一下路径是不是多写了东西。这一步过了,再进第三节改 settings。

另外提一句,TaoToken 的接入文档在https://taotoken.net/doc,里面有针对不同客户端的配置示例,Gemini Cli 这种走 settings 文件的场景,文档里也有对应说明,配置前扫一眼能少走弯路。

3. 可复制配置:把 Gemini Cli 的 settings 改到 TaoToken

Gemini Cli 的配置文件位置分两级:用户级在~/.gemini/settings.json,项目级在项目根目录的.gemini/settings.json。项目级优先级更高,适合团队共享;用户级适合个人全局默认。下面这份是项目级配置,你可以直接复制到.gemini/settings.json:

{ "model": { "name": "你的ModelID" }, "api": { "baseUrl": "https://taotoken.net/api", "apiKey": "你的TaoTokenKey" }, "contextFileName": "GEMINI.md", "systemPrompt": "你是一个严谨的编码助手。修改任何文件前必须先说明改动点。禁止执行 rm -rf 类命令。回答使用中文。" }

这里有几个字段要解释清楚。model.name填你在第二节确认的 Model ID。api.baseUrl固定填https://taotoken.net/api,不要加尾斜杠。api.apiKey填你的 Key,生产环境建议用环境变量引用而不是明文写死,Gemini Cli 支持${TAOTOKEN_KEY}这种写法,你可以改成"apiKey": "${TAOTOKEN_KEY}",然后在 shell 里 export。contextFileName指定项目上下文文件名,默认就是GEMINI.md,如果你想起别的名字,这里同步改。systemPrompt是追加的自定义系统提示词,它会拼在内置模板之后,用来约束输出风格和禁止行为。

如果你更习惯用 TOML 风格或者你的工具链里有其他客户端,这里也给一份等价的 TOML 片段,方便你对照:

[model] name = "你的ModelID" [api] base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_KEY}" [context] file_name = "GEMINI.md" system_prompt = "你是一个严谨的编码助手。修改任何文件前必须先说明改动点。"

改完 settings 之后,还要确认系统提示词的注入位置。Gemini Cli 在组装请求时,顺序是:内置模板 →GEMINI.md内容 →systemPrompt字段。也就是说,systemPrompt里的约束优先级在最后,如果你在GEMINI.md里写了「允许自动执行命令」,又在systemPrompt里写了「禁止执行命令」,最终生效的是后者。这个顺序决定了你该把强约束放在哪一层。

注意:不要把 API Key 提交到 Git 仓库。项目级.gemini/settings.json如果进了版本控制,记得把 Key 部分改成环境变量引用,或者把整个文件加进.gitignore,只提交一份settings.example.json。

配置写完之后,别急着跑复杂任务,先做第四节的验证请求,确认通道通了、提示词生效了,再上真实项目。

4. 验证请求:一次实际调用与预期返回

配置改完,最直接的验证方式是让 Gemini Cli 跑一个最小任务,同时观察它是否走了 TaoToken 通道、系统提示词是否生效。我一般分两步:先验证端点连通,再验证提示词注入。

第一步,在项目目录下启动 Gemini Cli,输入一句最简单的指令,比如「列出当前目录的文件」。如果配置正确,你会看到它正常返回文件列表,而不是报 401 或连接错误。这一步验证的是 Base URL 和 Key 有没有生效。

第二步,验证系统提示词。在第三节的配置里,我在systemPrompt写了「回答使用中文」。所以你启动后随便问一句「what files are here」,如果它用中文回答,说明systemPrompt注入成功了。如果它还是用英文回,那要么是systemPrompt字段没被读取,要么是字段名写错了。Gemini Cli 不同版本的字段名可能有差异,遇到这种情况去https://taotoken.net/doc对照一下当前版本的配置说明。

第三步,验证模型确实走了 TaoToken。这个稍微绕一点,但很有用。你可以在 TaoToken 控制台的用量页面看请求记录,路径是https://taotoken.net/console/api-keys进去后的用量标签。发一条消息后刷新,如果能看到对应的请求记录,说明流量确实打到了 TaoToken,而不是走了别的端点。这一步能排除「配置看起来对但实际没生效」的情况。

预期返回长什么样?正常情况是:CLI 输出一段中文回复,内容和你问的问题相关,没有报错堆栈。如果你看到的是Error: 401 Unauthorized,那是 Key 问题;如果是Error: connect ECONNREFUSED或local proxy failed,那是网络或端点地址问题;如果是Cannot read properties of undefined (reading 'choices'),那通常是返回结构不符合预期,多半是 Base URL 多写了路径或者 Model ID 填错了。

验证通过之后,你可以把GEMINI.md写得更具体一些,比如加上项目的技术栈、代码规范、禁止修改的目录。这些内容会和systemPrompt一起注入,让 CLI 的行为更贴合你的项目。到这一步,配置就算完整跑通了。

5. 常见报错排查:401、local proxy failed、reading choices、OAuth

配置过程中最容易撞上的几类报错,我按出现频率排一下,每个都给出定位思路。

401 Unauthorized:九成是 Key 的问题。先检查 Key 有没有复制完整,前后有没有空格或换行。然后确认apiKey字段有没有被环境变量覆盖成空值。如果你用的是${TAOTOKEN_KEY}写法,在终端里echo $TAOTOKEN_KEY看看有没有输出。还有一种情况是 Key 被撤销了,去控制台重新生成一个换上。

local proxy failed / ECONNREFUSED:这类报错通常指向端点地址不对或者网络不通。先确认baseUrl是不是https://taotoken.net/api,有没有多写/v1或者尾斜杠。然后用第二节的 curl 命令单独测一次,如果 curl 也失败,那就是网络层的问题,检查一下当前环境能不能正常访问这个域名。如果 curl 成功但 CLI 失败,那多半是 CLI 读取配置的优先级问题,检查有没有环境变量在覆盖。

Cannot read properties of undefined (reading 'choices'):这个报错的意思是 CLI 拿到了返回,但返回结构里没有它预期的choices字段。常见原因是 Base URL 指向了一个不兼容的端点,或者 Model ID 填了一个不存在的模型,导致返回的是错误结构。先确认 Model ID 拼写,再确认 Base URL 没有多余路径。如果都對,去文档页对照一下当前版本要求的返回格式。

OAuth 相关报错:Gemini Cli 某些版本会尝试走 OAuth 流程做认证,如果你已经配了 API Key,但 CLI 还在走 OAuth,说明配置没被识别。检查一下 settings 文件的位置对不对,项目级是不是放在了项目根目录的.gemini/下。另外确认一下 CLI 版本,老版本可能不支持 API Key 直连,需要升级。

排查的时候有个通用技巧:把 CLI 的日志级别调高,或者在启动时加--debug之类的参数(具体看版本),能看到它实际读取了哪个配置文件、拼了什么请求。这比盲猜快得多。如果排查卡住了,去https://taotoken.net/doc看接入文档里的排障章节,或者直接在模型对话页面手动发一条消息,对比一下手动请求和 CLI 请求的差异,往往能定位到问题。

6. 把配置固化下来:长期编码与 Agent 场景的接入建议

配置跑通一次不难,难的是让它稳定地用在日常编码里。如果你打算长期用 Gemini Cli 配合 TaoToken 做编码和 Agent 任务,有几个习惯值得养成。

第一,把 Key 从明文配置里挪出来。用环境变量引用,然后在 shell 的启动脚本里 export。这样配置文件可以安全地提交到仓库,团队成员拉下来只需要各自设自己的 Key。项目级.gemini/settings.json里只保留baseUrl、model.name、contextFileName这些不含敏感信息的字段。

第二,GEMINI.md要跟着项目演进。刚开始可以只写技术栈和目录说明,用一段时间后,把 CLI 经常犯的错、你反复纠正的行为,都沉淀进去。比如它老爱改测试文件,你就在GEMINI.md里写「禁止修改*.test.ts,除非明确要求」。这比每次在对话里重复交代高效得多。

第三,如果你要做的是长时间运行的 Agent 任务,比如批量重构、自动修 lint,建议单独开一个 Coding Plan 通道,路径是https://taotoken.net/coding-plan。这类任务请求量大、持续时间长,用专门的通道比走普通对话端点更稳。配置方式一样,只是 Base URL 或 Model ID 按 Coding Plan 的说明调整。

第四,定期回控制台看用量。路径是https://taotoken.net/console/api-keys,进去后能看到请求量和消耗。如果发现某个项目的请求量异常高,可能是 CLI 在循环调用,或者提示词里有什么触发了反复请求,早点发现能省不少额度。

最后说个实际经验:Gemini Cli 的系统提示词注入是「追加」而不是「替换」,所以你没法通过systemPrompt完全覆盖内置行为,只能在其基础上加约束。如果你需要彻底换掉内置模板,那得改仓库源码里的prompts.ts,这属于 fork 级别的改动,一般场景用追加约束就够了。把GEMINI.md和systemPrompt两层用好,已经能覆盖绝大多数自定义需求。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询