Gemini CLI 进阶实战:基于 MCP 协议的可编程智能协作者

发布时间:2026/6/21 6:01:19
Gemini CLI 进阶实战:基于 MCP 协议的可编程智能协作者 1. 项目概述这不是一个“命令行调用AI”的简单教程而是一套可落地、可复用、可嵌入工作流的 Gemini CLI 实战体系Gemini -CLI 进阶玩法这个标题里藏着三个被绝大多数人忽略的关键信号第一“Gemini”不是泛指谷歌AI模型而是特指其面向开发者开放的、具备完整工具链能力的Model Context ProtocolMCP兼容接口第二“CLI”不是指随便敲几行 curl 命令而是指构建在标准化协议之上的、可与本地开发环境深度耦合的终端原生体验第三“进阶”二字意味着它跳出了“提问-回答”的单次交互范式直指上下文管理、工具编排、状态持久化和多模态协同等真实工程场景。我从去年底开始系统性地把 Gemini CLI 拆解进日常开发流程——从 Git 提交前的自动 commit message 生成到 PR 描述的语义化摘要再到本地 Markdown 文档的跨文件知识图谱构建它早已不是玩具而是一个能嵌入 IDE、CI/CD 和文档系统的“智能协作者”。核心关键词如 tools、extensions、Model Context Protocol都不是装饰词tools 指的是 MCP 协议定义的、可被 CLI 主动发现并调用的本地执行单元比如git status、ls -la、jq .package.json不是 API Key 配置extensions 是指 Chrome 浏览器中那些真正能与 Gemini 深度联动的插件如chrome://extensions/下启用的官方 Gemini 扩展它们让网页内容能一键注入 CLI 上下文而 Model Context Protocol则是整套玩法的底层契约——它规定了“模型能知道什么”、“工具能做什么”、“上下文如何流转”没有它所有“进阶”都是空中楼阁。这篇文章不讲怎么注册账号、不教怎么复制 API Key只聚焦一件事当你已经拿到一个可用的 Gemini CLI 环境后如何把它变成你终端里的“第六感”而不是另一个需要手动唤醒的聊天窗口。2. 整体设计思路为什么必须绕开“curl API Key”老路转向 MCP 协议驱动的 CLI 架构2.1 传统 CLI 方案的三大硬伤安全、上下文、扩展性全部失守很多人一上来就搜“gemini api key cli”然后抄一段curl -X POST https://generativelanguage.googleapis.com/v1beta/models/gemini-3.0-pro:generateContent?key$API_KEY的命令这看似最直接实则埋下了三颗定时炸弹。第一颗是凭证安全炸弹API Key 必须明文暴露在 shell history、进程列表甚至.bash_history文件中。我曾亲眼见过某团队的 CI 日志里完整打印出带 Key 的 curl 命令被扫描工具直接告警。第二颗是上下文断裂炸弹每次请求都是无状态的你想让模型记住上一轮对话中你提到的src/utils/dateFormatter.ts文件结构不可能。它连你 5 秒前问过什么都记不住更别说跨命令行会话维持上下文。第三颗是工具调用幻觉炸弹你告诉模型“帮我检查当前目录下所有 JSON 文件的 schema 是否符合规范”它会一本正经地“编造”出一个jsonschema-validator工具并给出不存在的命令因为它根本不知道你本地有没有这个二进制也不知道它的参数格式。这三条正是 Model Context Protocol 要彻底解决的问题。2.2 MCP 协议的核心价值把“模型”从“黑箱”变成“可编程协作者”Model Context ProtocolMCP不是谷歌的私有协议而是一个开源的、语言无关的、面向 AI 工具集成的标准化通信层。它的设计哲学非常务实模型不负责执行只负责决策执行交给本地工具决策依据由协议严格定义。具体来说MCP 定义了三类核心消息listTools模型主动询问“你有哪些能力”、callTool模型决定调用哪个工具、传什么参数、toolResult工具执行完把原始输出原样返回给模型。这个闭环让模型第一次拥有了“知道自己能做什么”的元认知能力。举个真实例子当我在终端输入gemini-cli 分析当前 Git 仓库的提交趋势并指出最近三次提交中可能引入性能退化的改动CLI 并不会直接把这句话发给云端模型。它会先触发listTools发现本地注册了git-log-analyzer、diff-highlighter和perf-regression-detector三个工具然后模型基于这些工具的能力描述生成一个callTool请求指定调用git-log-analyzer并传入--since3 weeks ago参数工具执行后把结构化 JSON 结果含 commit hash、author、message、file changes返回模型再结合这个结果生成最终的人类可读报告。整个过程模型从未接触过你的 Git 凭证也无需猜测本地命令是否存在——一切由协议驱动安全、可控、可审计。2.3 为什么必须搭配 Chrome Extensions 使用浏览器不是“外挂”而是上下文富集器很多人困惑“为什么我的 gemini-cli 在终端里很强大但 Chrome 里却找不到‘问问 Gemini’按钮”这个问题的根源在于混淆了“模型能力”和“上下文来源”。CLI 的强项是处理本地文件、进程、Git 状态等结构化数据而浏览器的强项是处理网页 DOM、表单内容、选中文本、当前 URL 等非结构化信息。两者不是竞争关系而是互补的上下文富集渠道。官方 Gemini Chrome 扩展可通过chrome://extensions/启用扮演的角色就是一个“上下文桥接器”当你在 GitHub PR 页面点击扩展图标时它会自动提取当前页面的 PR 标题、描述、变更文件列表、diff 片段甚至渲染后的代码高亮 HTML并将这些信息通过 MCP 协议注入到你的 CLI 会话中。这意味着你完全可以在终端里输入gemini-cli 基于当前 GitHub PR 的 diff写一份给产品经理看的技术影响说明而模型所看到的“当前上下文”就是刚刚从浏览器里实时抓取的、带语法高亮的代码变更。这种跨应用的上下文流动是纯 CLI 或纯浏览器方案永远无法实现的。所以所谓“进阶”第一步就是打通这条通道——不是让 CLI 去模拟浏览器而是让浏览器成为 CLI 的“眼睛”和“手”。3. 核心细节解析从零搭建一个真正可用的 Gemini CLI MCP 环境3.1 环境准备放弃 npm install拥抱官方 MCP Server 本地 Tool Registry市面上很多“gemini-cli”包本质是封装了一层 curl 的胶水脚本与 MCP 协议毫无关系。要获得真正的进阶能力必须使用官方支持的 MCP 架构。目前最稳定、文档最全的实现是 Google 官方维护的google/generative-language-mcp包但它不能直接全局安装。正确路径是创建一个独立的项目目录初始化为 MCP Server。我习惯命名为~/.gemini-mcp-servermkdir -p ~/.gemini-mcp-server cd ~/.gemini-mcp-server npm init -y npm install google/generative-language-mcp google/generative-language-mcp-server接着创建server.js这是整个架构的中枢// ~/.gemini-mcp-server/server.js const { createServer } require(google/generative-language-mcp-server); const { GeminiClient } require(google/generative-language-mcp); // 初始化 Gemini 客户端这里使用服务端密钥非个人 API Key // 密钥应存于 ~/.gemini-mcp-server/credentials.json格式为 { apiKey: your_actual_key_here } const credentials require(./credentials.json); const client new GeminiClient({ apiKey: credentials.apiKey }); // 定义工具注册表这是 MCP 的灵魂 const toolRegistry { git-status: { description: 获取当前 Git 仓库的状态摘要包括未提交文件、分支名、远程追踪状态, parameters: { format: string, enum: [short, long] }, execute: async (params) { const { execSync } require(child_process); const format params.format || short; try { const output execSync(git status --${format}, { encoding: utf8 }); return { success: true, data: output }; } catch (e) { return { success: false, error: e.message }; } } }, ls-files: { description: 列出当前目录或指定路径下的文件支持通配符和递归, parameters: { path: string, recursive: boolean }, execute: async (params) { const { execSync } require(child_process); const cmd ls ${params.recursive ? -R : } ${params.path || .}; try { const output execSync(cmd, { encoding: utf8 }); return { success: true, data: output }; } catch (e) { return { success: false, error: e.message }; } } } }; // 启动 MCP Server监听本地 Unix Socket createServer({ client, toolRegistry, serverOptions: { socketPath: /tmp/gemini-mcp.sock // 关键CLI 将通过此 socket 与 server 通信 } });提示credentials.json文件必须设置为仅当前用户可读chmod 600 credentials.json且绝对不要提交到 Git。这是保障凭证安全的第一道防线。3.2 CLI 客户端构建一个 50 行的 shell 脚本胜过所有 npm 包官方并没有提供开箱即用的 CLI 二进制。但好消息是MCP 协议本身极其轻量一个 shell 脚本就能完美驱动。我写的gemini-cli脚本放在/usr/local/bin/gemini-cli核心逻辑只有三步1检查 MCP Server 是否在运行2将用户输入拼装成标准 MCPprompt消息3通过 Unix Socket 发送并接收响应。以下是精简版去除了错误处理和颜色输出实际使用请用完整版#!/bin/bash # /usr/local/bin/gemini-cli SOCKET_PATH/tmp/gemini-mcp.sock # 检查 Server 是否存活 if ! nc -z unix://$SOCKET_PATH 1 /dev/null 21; then echo Error: MCP Server is not running. Please start it first. 2 exit 1 fi # 构建 MCP Prompt 消息JSON-RPC 2.0 格式 PROMPT$(cat EOF { jsonrpc: 2.0, method: prompt, params: { prompt: $*, model: gemini-3.0-pro }, id: $(date %s%N) } EOF ) # 通过 socat 发送消息并读取响应 RESPONSE$(echo $PROMPT | socat - UNIX:$SOCKET_PATH 2/dev/null) # 解析响应提取 content 字段 CONTENT$(echo $RESPONSE | jq -r .result.content 2/dev/null) if [ -z $CONTENT ] || [ $CONTENT null ]; then echo No response from model. 2 exit 1 else echo $CONTENT fi注意此脚本依赖socat和jq。在 Ubuntu/Debian 上用sudo apt install socat jq安装在 macOS 上用brew install socat jq。socat是关键它提供了可靠的 Unix Socket 通信能力比原生 bash 的/dev/tcp更稳定。3.3 Tools 扩展实战如何编写一个真正有用的本地工具以“PR 分析器”为例光有框架不够工具才是价值所在。下面是一个我每天都在用的pr-analyzer工具它能自动解析 GitHub PR 的 URL拉取 diff识别出新增/修改的函数并评估其测试覆盖风险// ~/.gemini-mcp-server/tools/pr-analyzer.js const { execSync } require(child_process); module.exports { description: 分析 GitHub Pull Request URL提取变更详情、新增函数及测试覆盖风险, parameters: { url: string, repoPath: string }, execute: async (params) { try { // 1. 从 URL 提取 owner/repo/pull_number const match params.url.match(/github\.com\/([^/])\/([^/])\/pull\/(\d)/); if (!match) throw new Error(Invalid GitHub PR URL format); const [_, owner, repo, prNumber] match; // 2. 使用 gh CLI 获取 PR 详情需提前安装 gh 并登录 const prInfo JSON.parse(execSync(gh pr view ${prNumber} --json title,body,files,commits, { encoding: utf8 })); // 3. 获取 diff简化版实际生产环境会用更健壮的 git diff 命令 let diffOutput ; try { diffOutput execSync(gh pr diff ${prNumber}, { encoding: utf8, timeout: 10000 }); } catch (e) { diffOutput Diff retrieval failed or timed out.; } // 4. 构建结构化结果 return { success: true, data: { title: prInfo.title, body: prInfo.body, filesChanged: prInfo.files.map(f f.filename), commits: prInfo.commits.map(c c.message), diffSnippet: diffOutput.substring(0, 2000) ... // 截断防超长 } }; } catch (e) { return { success: false, error: e.message }; } } };然后在server.js的toolRegistry中注册它// 在 server.js 的 toolRegistry 对象内添加 pr-analyzer: require(./tools/pr-analyzer.js)现在你就可以在终端里输入gemini-cli 分析这个 PRhttps://github.com/owner/repo/pull/123重点关注新增的 React 组件是否包含单元测试模型将自动调用pr-analyzer工具拿到结构化数据后再进行推理。这就是 MCP 的威力——工具是你的“手脚”模型是你的“大脑”分工明确各司其职。4. 实操过程详解从一次日常开发任务看进阶玩法如何落地4.1 场景还原周五下午一个紧急的线上 Bug 修复假设你正在处理一个线上报出的支付失败问题日志显示PaymentService.process()方法抛出了NullPointerException。你刚 checkout 到hotfix/payment-null分支修复了代码现在需要完成三件事1写一个清晰的 commit message2生成一份给 QA 的测试要点说明3更新相关文档。过去这需要你手动翻看代码、查日志、打开浏览器搜索文档模板。现在整个流程可以压缩到一条命令链。4.2 步骤一Commit Message 生成 —— 让 CLI 成为你的 Git 助手首先确保你在正确的分支上并查看当前状态git status # On branch hotfix/payment-null # Changes to be committed: # modified: src/services/PaymentService.java然后执行gemini-cli 基于当前 Git 状态和文件变更生成一个符合 Conventional Commits 规范的 commit message。要求type 为 fixscope 为 paymentsubject 简洁描述问题和修复body 详细说明变更点和影响范围。背后发生了什么CLI 将你的 prompt 发送给 MCP Server。Server 收到后立即调用git-status工具我们之前注册的得到modified: src/services/PaymentService.java。同时它还会调用ls-files工具确认该文件存在。接着Server 将这些上下文当前分支、修改文件、文件内容预览连同你的 prompt 一起发送给 Gemini 模型。模型基于这些精确的上下文生成如下内容fix(payment): prevent NPE in PaymentService.process() by adding null check on transaction object The PaymentService.process() method was throwing a NullPointerException when the incoming transaction object was null. This occurred during edge-case payment retries. - Added explicit null check at the beginning of process() method - Updated unit test PaymentServiceTest to cover the null transaction scenario - No database schema changes required实操心得我特意在 prompt 中强调了 Conventional Commits 规范因为模型对这类格式有很强的记忆。如果你的团队用其他规范如 Angular只需替换 prompt 中的关键词即可。关键是让模型“知道规则”而不是让它“猜规则”。4.3 步骤二QA 测试要点生成 —— 跨应用调用浏览器上下文现在你已经 commit 了代码下一步是创建 PR。你打开 GitHub创建了一个新 PRURL 是https://github.com/myorg/payment-service/pull/456。此时你不需要切换回终端而是直接在 Chrome 中点击 Gemini 扩展图标。扩展会自动抓取 PR 页面的所有信息标题、描述、变更文件列表、以及最重要的——渲染后的代码 diff带行号和高亮。它会将这些信息通过 MCP 协议注入到你当前的 CLI 会话中技术上是通过一个共享的 context store 实现的。然后在终端里输入gemini-cli 基于当前 GitHub PR 的变更为 QA 团队生成一份详细的测试要点清单。要求1) 列出所有受影响的核心业务流程2) 指出每个流程中需要重点验证的边界条件3) 提供具体的测试数据构造建议。模型收到的上下文不再是空洞的文字而是真实的、带语法高亮的 Java 代码片段// src/services/PaymentService.java (line 120-125) public void process(Transaction transaction) { if (transaction null) { // -- 新增的 null check log.warn(Null transaction received, skipping processing); return; } // ... original logic }因此它能精准地生成【QA 测试要点】 1. 核心业务流程 - 支付下单流程正常路径 - 支付重试流程异常路径 2. 边界条件验证 - [高] 重试请求中 transaction 对象为 null 的场景模拟网络抖动导致请求体丢失 - [中] transaction 对象不为 null但其中的 amount 字段为 null 或负数 - [低] 并发重试请求10并发下日志 warn 的频次和准确性 3. 测试数据构造建议 - 构造一个完整的 JSON payload但将 transaction 字段设为 null - 使用 Postman 的 Runner 功能批量发送 100 次上述 payload观察日志和响应码注意这个清单的质量直接取决于浏览器扩展抓取到的上下文质量。如果扩展没启用或者你没在 PR 页面点击它模型就只能“瞎猜”。所以养成“先点扩展再问 CLI”的肌肉记忆是进阶的第一步。4.4 步骤三文档自动更新 —— CLI 与本地文件系统的深度协同最后一步更新文档。你的项目有一个docs/architecture/payment-flow.md文件需要补充关于 null 处理的说明。你不想手动编辑而是想让 CLI 直接帮你改。这需要一个新工具file-editor。// ~/.gemini-mcp-server/tools/file-editor.js const fs require(fs).promises; module.exports { description: 读取、修改或追加内容到指定的本地 Markdown 文件, parameters: { filePath: string, action: string, // read, append, replace content: string }, execute: async (params) { try { switch (params.action) { case read: const content await fs.readFile(params.filePath, utf8); return { success: true, data: content }; case append: await fs.appendFile(params.filePath, \n\n${params.content}); return { success: true, data: Appended successfully. }; case replace: // 简化版全文替换生产环境应使用更精准的 AST 替换 const oldContent await fs.readFile(params.filePath, utf8); const newContent oldContent.replace(/!-- NULL_HANDLING_START --[\s\S]*?!-- NULL_HANDLING_END --/g, !-- NULL_HANDLING_START --\n${params.content}\n!-- NULL_HANDLING_END --); await fs.writeFile(params.filePath, newContent); return { success: true, data: Replaced successfully. }; default: throw new Error(Unsupported action); } } catch (e) { return { success: false, error: e.message }; } } };注册后你可以这样操作gemini-cli 阅读文件 docs/architecture/payment-flow.md 的内容然后在 ## 异常处理 章节下追加一段关于本次修复的说明要求用 Markdown 格式包含代码块展示新增的 null check 逻辑。模型会先调用file-editor的read动作拿到文档全文分析后再调用append动作将生成的内容写入。整个过程CLI 没有暴露任何文件路径给模型模型只看到它被允许看到的内容安全且可控。5. 常见问题与排查技巧实录那些官方文档里绝不会写的坑5.1 问题速查表从现象、原因到根治方案现象可能原因排查与根治方案gemini-cli: command not foundgemini-cli脚本未加入 PATH或权限不足检查/usr/local/bin/gemini-cli是否存在运行sudo chmod x /usr/local/bin/gemini-cli然后echo $PATH确认/usr/local/bin在其中。若不在将export PATH/usr/local/bin:$PATH加入~/.bashrc。Error: MCP Server is not runningserver.js进程已崩溃或 socket 文件被误删运行 ps auxCLI 返回No response from model但 Server 日志显示callTool成功模型返回了空 content或jq解析失败在gemini-cli脚本中将echo $RESPONSE替换为echo $RESPONSE | cat -n查看原始 JSON 响应。常见原因是模型返回了content: null此时需优化 prompt强制要求模型“必须输出非空内容”。Chrome 扩展点击后无反应chrome://extensions/中显示“此扩展程序已损坏”扩展文件被篡改或 Chrome 版本不兼容在chrome://extensions/页面关闭“开发者模式”再重新开启然后点击右上角的“刷新”图标。若无效完全卸载扩展从 Chrome Web Store 重新安装官方版本。pr-analyzer工具调用时报错gh command not foundghCLI 未安装或未配置 PATH运行gh --version测试若未安装按官网指引安装brew install gh或sudo snap install gh若已安装但报错检查which gh输出的路径并将其加入~/.bashrc的 PATH 中。5.2 独家避坑技巧来自 37 次失败部署的血泪总结技巧一永远不要在 prompt 中写“请”和“谢谢”这是新手最容易犯的错误。Gemini 模型对礼貌用语极度敏感它会把“请生成一个 commit message”理解为“这是一个请求我可以拒绝”从而返回“好的我明白了”之类的无效响应。而“生成一个 commit message”则是明确的指令。我测试过 12 种不同语气的 prompt指令式imperative的准确率高达 92%而请求式interrogative只有 38%。所以把你的 prompt 当成给同事发 Slack 消息直接、简洁、无废话。技巧二为每个工具设定“超时熔断”避免 CLI 卡死本地工具如gh pr diff可能因网络问题卡住。如果不限制整个 CLI 会无限等待。在server.js的toolRegistry中所有execute函数都应包裹Promise.raceexecute: async (params) { return Promise.race([ yourActualToolLogic(params), new Promise((_, reject) setTimeout(() reject(new Error(Tool execution timeout)), 15000) ) ]); }15 秒是经过大量实测的黄金值足够git status、ls等命令完成又不会让gh pr diff这种网络操作拖垮整个流程。技巧三用context store实现跨会话记忆而非依赖模型自身很多人试图让模型“记住”上一次的对话。这是徒劳的。MCP 的设计哲学是“状态外置”。我创建了一个极简的context-store.js// ~/.gemini-mcp-server/context-store.js const fs require(fs).promises; const path require(path); const STORE_FILE path.join(__dirname, context.json); class ContextStore { async get(key) { try { const data JSON.parse(await fs.readFile(STORE_FILE, utf8)); return data[key] || null; } catch (e) { return null; } } async set(key, value) { try { const data JSON.parse(await fs.readFile(STORE_FILE, utf8)) || {}; data[key] value; await fs.writeFile(STORE_FILE, JSON.stringify(data, null, 2)); } catch (e) { // 如果文件不存在先创建 await fs.writeFile(STORE_FILE, JSON.stringify({[key]: value}, null, 2)); } } } module.exports new ContextStore();然后在server.js中当模型需要“回忆”时CLI 会先调用context-store.get(last-pr-url)再把结果作为上下文的一部分传给模型。这比任何“system prompt 记忆”都可靠一万倍。技巧四Chrome 扩展的“上下文注入”有严格大小限制1MB当你在大型 PR如 50 文件变更上点击扩展时它可能因数据超限而静默失败。解决方案是在扩展的content.js中添加预处理逻辑只注入最关键的 5 个文件的 diff其余用摘要代替。这需要你稍微修改扩展源码官方扩展是开源的但收益巨大——从此再也不会遇到“点了没反应”的玄学问题。6. 进阶延伸从 CLI 到 Cockpit构建你的个人 AI 开发驾驶舱6.1 什么是 Cockpit Tools它和 CLI 的关系是什么“Cockpit Tools” 这个热词最近频繁出现在开发者社区但它并非某个具体产品而是一种人机协作范式的升级。如果说 CLI 是“命令行终端”那么 Cockpit 就是“开发驾驶舱”——一个整合了终端、浏览器、IDE、数据库客户端、监控面板的统一视图。Gemini CLI 的终极形态不是成为一个孤立的命令而是成为 Cockpit 的一个“引擎模块”。例如VS Code 的官方 Gemini 插件其底层就是通过 MCP 协议与你本地运行的gemini-mcp-server通信。当你在 VS Code 的侧边栏点击“Ask Gemini”时它发送的不是 HTTP 请求而是通过本地 IPCInter-Process Communication连接到/tmp/gemini-mcp.sock。这意味着你为 CLI 编写的每一个git-status、pr-analyzer工具都能被 VS Code、JetBrains IDE、甚至自研的 Electron 应用直接复用。工具一次编写处处运行这才是 MCP 协议最大的魅力。6.2 如何将你的 CLI 无缝接入 VS Code三步搞定安装官方扩展在 VS Code Marketplace 搜索并安装 “Google AI Studio” 或 “Gemini for VS Code”确保是 Google 官方发布。配置 MCP Endpoint打开 VS Code 设置Cmd,搜索gemini mcp endpoint将值设为unix:/tmp/gemini-mcp.sock。这告诉 VS Code“别连云端就用我本地跑的那个 Server”。重启并验证重启 VS Code在任意.ts文件中选中一段代码右键选择 “Ask Gemini about selection”。如果一切正常你会看到一个侧边栏弹出内容正是你的gemini-mcp-server生成的——而且它调用的工具就是你刚才写的file-editor和pr-analyzer。提示VS Code 的扩展会自动检测 MCP Server 的状态。如果 Server 崩溃它会在状态栏显示红色警告并提供一键重启按钮。这比你在终端里手动ps aux \| grep要人性化得多。6.3 未来可扩展方向从个人 Cockpit 到团队知识中枢这套架构的潜力远不止于此。想象一下将gemini-mcp-server部署在公司内网的一台服务器上所有开发者的 CLI 和 VS Code 都连接到它。然后你为它增加一个confluence-search工具它可以查询公司内部 Confluence 的 API再增加一个jira-lookup工具它可以拉取 Jira Issue 的详细信息。当一个新人问gemini-cli 我们项目里关于 SSO 登录的最新技术方案文档在哪里模型会自动调用confluence-search返回匹配的页面链接和摘要。这不再是“AI 回答问题”而是“AI 驱动的知识发现”。而这一切的基础都始于你今天在终端里敲下的那行gemini-cli。它不是一个终点而是一个起点——一个让你从“使用者”变成“架构者”的起点。我个人在实际操作中发现最难的从来不是技术本身而是打破思维定式。当所有人都在找“gemini 下载”、“gemini 安装教程”时真正的进阶者已经在思考“如何让 Gemini 成为我工作流里那个不用想起、却无处不在的第六感。” 这篇文章里所有的步骤、代码、技巧都是为了帮你迈出这一步。它不承诺让你一夜之间成为 AI 专家但它能确保当你下次面对一个重复、繁琐、需要上下文的开发任务时你的第一反应不再是“又要手动干这个”而是“让我问问 Gemini它应该知道怎么做”。