ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gemini Cli repo 系统提示词拆解:把 settings 改到 TaoToken 的完整配置与验证

Gemini Cli repo 系统提示词拆解:把 settings 改到 TaoToken 的完整配置与验证 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换成你的真实 Keycurl -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 改到 TaoTokenGemini 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两层用好已经能覆盖绝大多数自定义需求。
返回列表