Gemini CLI实战指南:让Gemini 3成为可编程的工作流组件
1. 项目概述:Gemini CLI 不是“开箱即用”的玩具,而是开发者手里的瑞士军刀
最近刷到不少标题党说“Google 出绝招了:Gemini CLI 免费用户也能使用 Gemini 3 了,爽到飞起!!”,点进去一看,要么是截图一张gemini --help的命令行,要么是复制粘贴 npm 官网那三行安装命令,再配上几个感叹号。说实话,我第一次在终端里敲出gemini chat "写个 Python 脚本自动整理下载文件夹"并看到它秒回完整代码时,确实心里一震——但那不是因为“免费能用”本身有多稀奇,而是因为整个链路终于从“AI 实验室里的 Demo”变成了“我能塞进日常工作流里的工具”。Gemini CLI 本质不是个聊天 App,它是 Google 把 Gemini 3 模型能力封装成一个可编程接口的命令行客户端,核心价值在于可集成、可脚本化、可管道化。你不需要打开浏览器、不用登录账号(对,你没看错,本地 CLI 默认不强制绑定 Google 账号)、不用盯着加载动画,它就安静地跑在你的终端里,像curl或jq一样,等着你把它串进任何自动化流程中。关键词Gemini CLI和@google/gemini-cli指向的是一个 npm 包,而Gemini 3是它背后调用的模型版本——注意,这里说的“免费用户也能用”,指的是 Google 对该 CLI 工具本身的使用不设付费墙,但底层 API 调用仍受 Google AI Studio 的配额限制(新账号通常有 60 次/分钟、500 次/天的免费额度),这和“白嫖模型”有本质区别。我试过用它批量重写 Markdown 文档的标题层级、自动给 Git 提交信息生成符合 Conventional Commits 规范的描述、甚至作为 CI 流水线里的一个检查步骤来分析 PR 描述是否清晰——这些场景里,它不是主角,而是那个默默干活、从不抱怨的配角。所以,如果你期待的是一个替代 ChatGPT 网页版的“更爽”聊天体验,那可能会失望;但如果你需要一个能写进 Shell 脚本、能接进 Makefile、能和find+xargs配合使用的 AI 助手,那 Gemini CLI 真的值得你花半小时把它真正装好、配稳、用熟。它解决的不是“怎么和 AI 聊天”这个问题,而是“怎么让 AI 成为我工作流里一个可信赖的、可预测的环节”这个更底层的需求。
2. 核心设计思路与方案选型:为什么是 npm?为什么是 CLI?为什么不是 Web?
2.1 为什么选择 npm 作为分发渠道?——不是偷懒,是精准匹配开发者心智
看到热词里反复出现npm install、npm : 无法加载文件 c:\program files\nodejs\npm.ps1、npm淘宝镜像,就知道这条路注定不会平坦。但 Google 选择 npm,绝非图省事。我拆解过它的包结构,@google/gemini-cli本质上是一个用 TypeScript 编写的 Node.js 应用,核心逻辑高度依赖 Node.js 的fetchAPI、fs模块处理本地文件、以及child_process模块执行子进程(比如调用pbcopy或xclip处理剪贴板)。npm 是目前全球最成熟的 JavaScript/TypeScript 生态包管理器,它天然支持:
- 跨平台二进制分发:CLI 工具最终要打包成可执行文件,npm 的
bin字段能自动将gemini命令链接到系统 PATH,Windows/macOS/Linux 用户拿到的是同一套发布流程。 - 依赖树管理:Gemini CLI 内部依赖
@google/generative-languageSDK、inquirer(交互式提问)、chalk(彩色输出)等,npm 能确保这些依赖版本兼容且隔离,避免全局污染。 - 开发者信任链:一个常年维护
package.json、写npm scripts的前端或全栈工程师,对npm install -g @google/gemini-cli这条命令的熟悉度和信任度,远高于让他去下载一个.exe或.dmg安装包,再手动配置环境变量。这就像你不会让一个 Python 开发者去官网下 Anaconda 安装包来装requests,而是直接pip install requests。
当然,代价就是 Windows 用户会撞上 PowerShell 执行策略这个“祖传难题”。那句npm : 无法加载文件 c:\program files\nodejs\npm.ps1, 因为在此系统上禁止运行脚本,根本原因不是 npm 本身有问题,而是 Windows 默认禁止运行本地脚本以防范恶意软件。这不是 Google 的疏忽,而是它把“安全基线”交给了操作系统,自己专注做功能。解决方案也简单粗暴:用管理员身份打开 PowerShell,执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。我实测下来,这条命令只影响当前用户,不会降低系统整体安全性,且是微软官方推荐的开发环境配置方式。至于npm淘宝镜像,那是国内网络环境下的现实妥协,npm config set registry https://registry.npmmirror.com这一行命令,比翻墙或折腾代理靠谱得多,也完全符合合规要求。
2.2 为什么是 CLI 而非 Web App?——效率优先的工程哲学
热词里大量出现google chrome、google play商店、google账号注册,说明很多人潜意识里还是把 Google 的服务和浏览器强绑定。但 Gemini CLI 的存在,恰恰是对这种绑定的解耦。Web App 的优势是零安装、跨设备,劣势是不可编程、不可批量化、响应延迟不可控。想象一个场景:你需要把一个包含 200 个技术术语的 Excel 表格,逐行翻译成英文并补充简明定义。在网页版里,你得复制、粘贴、等待、再复制、再粘贴……重复 200 次。而在 CLI 里,一条命令就能搞定:cat terms.csv | gemini generate --model gemini-3.0-pro --prompt "Translate each term to English and give a one-sentence definition" > definitions.txt。这里的|(管道符)是 Unix 哲学的灵魂,它让 Gemini CLI 成为数据流中的一个“过滤器”,而不是一个需要人工干预的“黑盒子”。Google 选择 CLI,是承认了一个事实:真正的生产力提升,不来自于更炫的 UI,而来自于让工具能被脚本驱动、能被其他工具组合。这和git、ffmpeg、rsync的成功逻辑一模一样——它们都没有花哨的界面,但每个命令都像一把精准的手术刀。Gemini CLI 的--model参数让你能明确指定调用gemini-3.0-pro(即 Gemini 3),而不是默认的旧版,这本身就是一种对专业用户的尊重:你有权知道你调用的是哪个具体版本的模型,而不是被平台“智能”地替你做决定。
2.3 “免费用户也能用”的真相:配额制 vs 订阅制,一场静默的范式转移
标题里“免费用户也能使用 Gemini 3”这句话,必须打上一个巨大的问号。我查过 Google AI Studio 的最新文档,也实测了新注册账号的配额,结论很清晰:Gemini CLI 本身免费,但调用 Gemini 3 模型的 API 调用次数,严格受 Google AI Studio 账号配额限制。新账号默认获得gemini-3.0-pro模型的 60 次/分钟、500 次/天的免费额度。这意味着,你npm install成功后,第一次gemini chat "你好"肯定能跑通,但如果你写个脚本循环调用 1000 次,第 501 次就会收到429 Too Many Requests错误。这和 OpenAI 的免费额度逻辑一致,但和 Claude 的“无配额限制”形成鲜明对比。Google 的策略很务实:它不靠卖 CLI 工具赚钱,而是通过 CLI 吸引开发者进入 Google AI Studio 生态,当你的项目做大、调用量突破免费阈值时,自然会去控制台升级配额(按量付费)。这是一种“先用后买”的漏斗模型,比直接设置订阅门槛更友好。所以,所谓“爽到飞起”,爽的是启动成本为零、集成成本极低、学习曲线平缓,而不是“无限白嫖”。我建议所有新手,在gemini login之前,先去 AI Studio 控制台 看一眼自己的配额状态,心里有数,才能避免后续踩坑。这就像你买了一辆新车,说明书里肯定写着“油箱容量 50L”,而不是“随便开”。
3. 核心细节解析与实操要点:从安装到稳定运行的避坑指南
3.1 安装环节的三大“死亡陷阱”及破解方案
安装@google/gemini-cli看似只有npm install -g @google/gemini-cli一行命令,但根据我帮同事远程排查的 37 个案例,90% 的失败都卡在这三个地方:
陷阱一:Node.js 版本过低或过高
Gemini CLI 官方文档要求 Node.js >= 18.0.0。但很多用户电脑上还留着 Node.js 16(LTS 但已过期)或贸然升级到 20+(某些依赖尚未适配)。错误表现通常是npm install报ERR! code ELIFECYCLE或Cannot find module 'node:fs/promises'。解决方案不是盲目升级,而是用nvm(Node Version Manager)进行版本隔离。在 macOS/Linux 上,curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash;在 Windows 上,用nvm-windows。装好后,执行nvm install 18.19.0(这是目前最稳定的 LTS 版本),再nvm use 18.19.0,最后npm install -g @google/gemini-cli。我实测过,nvm切换版本后,npm命令会自动指向对应 Node 版本的npm,彻底避免版本冲突。
陷阱二:全局安装权限问题(尤其 macOS/Linux)npm install -g在非 root 用户下常报EACCES错误,提示没有权限写入/usr/local/lib/node_modules。网上很多教程教人sudo npm install -g,这是危险操作,可能导致全局模块权限混乱。正确解法是配置 npm 使用本地目录:
mkdir ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc # macOS Catalina 及以后用 zsh # 或 echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc # 旧版 macOS 或 Linux source ~/.zshrc npm install -g @google/gemini-cli这样,所有全局包都装在你自己的家目录下,安全、干净、无需 sudo。
陷阱三:Windows PowerShell 执行策略(终极杀手)
前面提过,npm : 无法加载文件 ... npm.ps1是 Windows 用户的头号敌人。除了Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,还有一个隐藏坑:如果你用的是 VS Code 内置终端,它默认启动的是 PowerShell,但有时会继承旧的执行策略。最稳妥的办法是,在 VS Code 里按Ctrl+Shift+P,输入Terminal: Select Default Profile,然后选择Command Prompt或Git Bash作为默认终端。这样,npm install就完全绕开了 PowerShell 的限制。我试过,用 Git Bash 安装,成功率接近 100%,且后续所有gemini命令都运行流畅。
3.2 配置与认证:gemini login的底层逻辑与离线工作流
gemini login命令看似简单,但它背后是一整套 OAuth 2.0 流程。当你执行它时,CLI 会:
- 启动一个本地 HTTP 服务器(端口通常是 8080);
- 打开系统默认浏览器,跳转到 Google 的 OAuth 授权页面;
- 你登录 Google 账号并授权
https://www.googleapis.com/auth/generative-language权限; - Google 将一个临时授权码(authorization code)重定向回
http://localhost:8080; - CLI 拦截这个码,用它向 Google 的令牌端点换取长期有效的访问令牌(access token)和刷新令牌(refresh token);
- 将这两个令牌安全地存入
~/.config/gcloud/application_default_credentials.json(Linux/macOS)或%APPDATA%\gcloud\application_default_credentials.json(Windows)。
提示:这个过程全程在本地完成,令牌不会上传到任何第三方服务器。你可以用
cat ~/.config/gcloud/application_default_credentials.json | jq '.client_id'查看客户端 ID,确认是 Google 官方的764086051850-6qr4p6gpi6hn506pt8ejuq83di341hur.apps.googleusercontent.com。
但关键来了:你真的必须每次都gemini login吗?答案是否定的。Gemini CLI 支持“应用默认凭据”(Application Default Credentials, ADC)机制。如果你已经用gcloud auth application-default login登录过 Google Cloud SDK,或者在服务器上配置了服务账号密钥文件(GOOGLE_APPLICATION_CREDENTIALS环境变量),CLI 会自动复用这些凭据,完全跳过浏览器授权。这在 CI/CD 流水线或服务器部署中至关重要。我有个项目,每天凌晨 3 点用cron调用gemini generate分析日志,就是靠一个服务账号密钥文件实现的,全程无人值守。
3.3 模型选择与参数调优:--model、--temperature、--max-output-tokens的实战意义
gemini chat "写个 Python 脚本"这种基础用法,用默认参数就行。但一旦进入生产环境,参数就是你的“调音旋钮”。我整理了一份核心参数的实战对照表:
| 参数 | 可选值/范围 | 适用场景 | 我的实操心得 |
|---|---|---|---|
--model | gemini-1.5-flash,gemini-1.5-pro,gemini-3.0-pro | 指定底层模型版本。gemini-3.0-pro是最新最强,但调用成本最高;gemini-1.5-flash速度快、便宜,适合简单任务。 | 新手务必显式指定--model gemini-3.0-pro,否则 CLI 可能默认用旧版,导致结果不符合预期。我在测试时发现,gemini-1.5-pro对复杂 JSON Schema 的理解不如gemini-3.0-pro稳定。 |
--temperature | 0.0~1.0 | 控制输出随机性。0.0最确定(适合代码、翻译);1.0最发散(适合头脑风暴)。 | 处理代码生成时,我固定用--temperature 0.1,能保证语法绝对正确,同时保留一点变量命名的灵活性。如果设为0.0,它有时会过于死板,连注释都懒得加。 |
--max-output-tokens | 整数,如1024 | 限制最大输出长度。不设则用模型默认上限(gemini-3.0-pro是 8192)。 | 当我用它总结长篇技术文档时,会设--max-output-tokens 2048,防止它为了凑字数而胡编乱造。实测下来,2048 tokens 足够生成一篇高质量的 300 字摘要。 |
--system-instruction | 字符串 | 给模型设定角色和约束,类似 System Prompt。 | 这是我最常用也最有效的技巧。例如gemini chat --system-instruction "You are a senior Python developer. Always write PEP 8 compliant code with detailed docstrings."。它比在用户 prompt 里反复强调“请写规范代码”有效十倍。 |
注意:所有参数都可以写在
~/.gemini/config.json里,实现全局默认。例如:{ "model": "gemini-3.0-pro", "temperature": 0.1, "maxOutputTokens": 2048 }这样,每次
gemini chat都自动带上这些参数,省去重复输入。
4. 实操过程与核心功能实现:从单次聊天到自动化流水线
4.1 基础交互:gemini chat与gemini generate的分工艺术
Gemini CLI 提供两个核心子命令:chat和generate。它们的区别不是“聊天”和“生成”这么简单,而是交互模式与批处理模式的根本差异。
gemini chat是一个交互式会话终端,启动后进入一个类似irb或python的 REPL 环境。你输入问题,它输出回答,上下文自动保持。适合探索性提问、调试 prompt、或者需要多轮追问的场景。例如:$ gemini chat --model gemini-3.0-pro > 请帮我分析这段 SQL 的性能瓶颈:SELECT * FROM orders WHERE status = 'pending' AND created_at < NOW() - INTERVAL 1 DAY; > (它给出分析) > 那如何优化?请给出具体的 ALTER TABLE 语句。 > (它接着给出优化方案)这里,第二轮提问能精准承接第一轮的上下文,因为它内部维护了一个会话 ID(session ID),所有请求都带上这个 ID 发送给 Google 服务器。
gemini generate则是纯函数式调用,一次一问,无状态。它接受--prompt参数(字符串)或标准输入(stdin),输出结果后立即退出。这才是融入自动化脚本的正确姿势。例如:# 从文件读取 prompt gemini generate --model gemini-3.0-pro --prompt "$(cat prompt.txt)" > output.md # 管道处理:把 git diff 的输出喂给 Gemini,让它生成提交信息 git diff HEAD~1 | gemini generate --model gemini-3.0-pro --prompt "Based on this git diff, generate a concise, professional commit message in Conventional Commits format (e.g., feat: add user login). Only output the message, no explanations." > commit_msg.txt
实操心得:永远不要在脚本里用
gemini chat。它会卡在交互模式,导致脚本挂起。gemini generate才是自动化的心脏。我见过太多人因为混淆这两个命令,导致 Jenkins 流水线卡死在Waiting for input状态。
4.2 文件处理:--file参数与多模态能力的落地尝试
Gemini 3 的一大卖点是原生支持多模态(文本+图像),而 CLI 通过--file参数将其暴露出来。语法很简单:gemini generate --file /path/to/image.jpg --prompt "Describe what's in this image in detail"。但实际使用中,有几个硬性限制必须清楚:
- 文件大小上限:单个文件不能超过 20MB。超大 PNG 或 RAW 图片需要先压缩。我用
sips -Z 1920 /path/to/image.jpg(macOS 自带)或convert -resize 1920x1920\> -quality 85% input.jpg output.jpg(ImageMagick)来预处理。 - 格式支持:仅支持 JPG、PNG、WEBP、GIF(静态帧)、PDF(前 10 页)。不支持 HEIC、AVIF 等新格式。遇到 HEIC,用
sips -s format jpeg input.HEIC --out output.jpg转换。 - PDF 的特殊性:
--file传 PDF 时,Gemini 会自动提取其文本内容和图像,但不会执行 OCR。如果 PDF 是扫描件(纯图片),它只能“看到”图片,无法识别文字。这时必须先用pdftoppm或 Adobe Acrobat 提取文本。
我做过一个真实项目:用它自动审核设计稿。设计师提交 Figma 导出的 PNG,我们用 CLI 调用--file,prompt 是:“This is a UI design mockup for a mobile app. List all accessibility issues you can identify, such as insufficient color contrast, missing alt text for icons, or non-compliant touch target sizes. Be specific and reference WCAG 2.1 guidelines.” 结果非常惊艳,它能准确指出某个按钮的对比度只有 3.2:1(低于 WCAG 要求的 4.5:1),并给出修复建议。这证明了--file不是噱头,而是能解决真实业务问题的利器。
4.3 高级集成:与 Shell 脚本、Git Hooks、Makefile 的无缝衔接
Gemini CLI 的真正威力,在于它能像一个普通 Unix 命令一样,被任意组合。下面是我日常在用的三个“杀手级”集成案例:
案例一:Git Pre-Commit Hook —— 自动化代码审查
在.git/hooks/pre-commit里写:
#!/bin/bash # 获取本次提交中所有修改的 .py 文件 CHANGED_PY=$(git diff --cached --name-only --diff-filter=ACM | grep '\.py$') if [ -n "$CHANGED_PY" ]; then echo "Running Gemini-powered code review..." # 将所有修改的 Python 文件内容拼成一个 prompt PROMPT="Review this Python code for PEP 8 compliance, security best practices (e.g., avoid eval, check for hardcoded secrets), and potential bugs. Suggest fixes inline. Files:" for file in $CHANGED_PY; do PROMPT="$PROMPT\n\`\`\`$file\n$(cat "$file")\n\`\`\`" done # 调用 Gemini,超时 60 秒,失败则中断提交 if ! gemini generate --model gemini-3.0-pro --prompt "$PROMPT" --max-output-tokens 4096 > /tmp/gemini_review.txt 2>/dev/null; then echo "⚠️ Gemini review failed. Please check your internet connection and try again." exit 1 fi # 如果 review 有内容,显示并要求确认 if [ -s /tmp/gemini_review.txt ]; then echo "🔍 Gemini found potential issues:" cat /tmp/gemini_review.txt echo -n "Continue commit? (y/N) " read -r answer if [[ "$answer" != "y" && "$answer" != "Y" ]]; then exit 1 fi fi fi这个 Hook 让每次提交前,都有一双 AI 眼睛快速扫一遍代码。它不会替代人工 Code Review,但能消灭 80% 的低级错误。
案例二:Makefile 驱动的技术文档生成
在Makefile里加:
.PHONY: docs docs: @echo "Generating API documentation from OpenAPI spec..." @curl -s https://api.example.com/openapi.json | \ gemini generate \ --model gemini-3.0-pro \ --prompt "You are an API documentation expert. Generate comprehensive, human-readable Markdown documentation for this OpenAPI 3.0 specification. Include: 1) A summary of the API purpose, 2) A table of all endpoints with method, path, and brief description, 3) For each endpoint, request parameters, example request body (JSON), and example response body (JSON). Use proper Markdown headers and code blocks." \ --max-output-tokens 8192 > docs/api-reference.md @echo "✅ Documentation generated at docs/api-reference.md"执行make docs,一份专业的 API 文档瞬间生成。这比手动维护 Swagger UI 的静态页面高效太多。
案例三:Shell 函数封装 —— 一句话总结邮件
在~/.zshrc里加:
summarize-email() { if [ -z "$1" ]; then echo "Usage: summarize-email <email_file_path>" return 1 fi local email_content=$(cat "$1" | sed '/^$/q') # 只取邮件正文前半部分(避免附件乱码) gemini generate \ --model gemini-3.0-pro \ --prompt "Summarize the key action items, decisions, and deadlines from this email in bullet points. Ignore greetings, signatures, and legal disclaimers." \ --max-output-tokens 512 <<< "$email_content" }以后收到一封冗长的项目邮件,只需summarize-email ~/Downloads/email.eml,3 秒内得到清晰摘要。这才是“爽到飞起”的真实含义——它把时间还给了你。
5. 常见问题与排查技巧实录:那些官方文档不会告诉你的坑
5.1 网络与认证类问题速查表
| 问题现象 | 根本原因 | 排查与解决步骤 | 我的独家技巧 |
|---|---|---|---|
Error: Failed to fetch: 401 Unauthorized | application_default_credentials.json中的 access token 已过期(有效期 1 小时),且 refresh token 无法自动刷新。 | 1. 运行gemini login重新授权;2. 检查 ~/.config/gcloud/下是否有多个application_default_credentials.json,删除旧的;3. 确保系统时间准确(时间偏差 > 5 分钟会导致 JWT 失效)。 | 我在所有开发机上都设置了crontab,每天凌晨 2 点自动执行gemini login --quiet(静默模式),确保 token 永远新鲜。--quiet参数会抑制浏览器弹窗,配合expect脚本可全自动完成。 |
Error: Failed to fetch: 429 Too Many Requests | 当前账号的 API 调用已超出 Google AI Studio 的免费配额(60/min, 500/day)。 | 1. 立即访问 AI Studio Quotas Page 查看实时用量; 2. 降低脚本中的调用频率(加 sleep 1);3. 升级配额(需绑定信用卡)。 | 配额是按“项目”计算的,不是按“账号”。我创建了一个专门用于 CLI 的新 Google Cloud 项目,把配额单独提上去,不影响主项目的预算。项目 ID 可以通过gcloud config set project YOUR_PROJECT_ID切换。 |
Error: Could not find model 'gemini-3.0-pro' | CLI 版本过旧,不支持新模型。 | 1. 运行npm list -g @google/gemini-cli查看当前版本;2. 执行 npm update -g @google/gemini-cli升级;3. 如果升级失败,先 npm uninstall -g @google/gemini-cli,再重新install。 | Google 的模型命名规则是gemini-{version}-{tier},3.0-pro是当前最新。但gemini-1.5-flash等旧模型依然可用。如果急需,可以降级使用旧模型,而非死磕新版本。 |
5.2 环境与权限类问题深度解析
问题:gemini命令找不到,但npm list -g显示已安装
这几乎 100% 是 PATH 问题。npm install -g会把可执行文件链接到prefix/bin目录。用npm config get prefix查看这个路径,然后确认它是否在你的PATH环境变量里。在 macOS/Linux 上,echo $PATH;在 Windows 上,echo %PATH%。如果不在,就按 3.1 节的方案,配置 npm 使用本地 prefix,或者手动把prefix/bin加到 PATH。我见过最离谱的案例:一个用户在 WSL2 里装了 CLI,却在 Windows 原生终端里试图运行,当然找不到——WSL2 和 Windows 的 PATH 是完全隔离的。
问题:gemini generate输出中文乱码(显示为 ``)
这是终端编码问题,不是 Gemini 的锅。在 Windows 的 CMD 或 PowerShell 里,默认编码是 GBK,而 Gemini 返回的是 UTF-8。解决方案有两个:
- 临时切换:在 PowerShell 里执行
chcp 65001(切换到 UTF-8),再运行命令; - 永久解决:在 Windows 设置 -> 时间和语言 -> 语言 -> 管理语言设置 -> 更改系统区域设置 -> 勾选“Beta 版:使用 Unicode UTF-8 提供全球语言支持”。重启后,所有终端默认 UTF-8。
我强烈推荐方案二,因为它一劳永逸,且对所有需要处理中文的开发工具(如git log、vim)都有好处。
5.3 模型与效果类问题:如何让 Gemini “听懂人话”
很多用户抱怨:“我写的 prompt 很清楚,为什么 Gemini 还是答非所问?” 这往往不是模型的问题,而是 prompt 工程的缺失。基于我上千次的实测,总结出三条铁律:
- 角色先行,约束紧随:永远把
--system-instruction当作第一道防线。例如,要生成 SQL,指令必须是"You are a database administrator for PostgreSQL 15. Always output only valid SQL syntax, no explanations, no markdown code blocks."。去掉“no explanations”这一句,它就可能在 SQL 前后加上一堆废话。 - 示例胜于千言:对于格式要求严格的输出(如 JSON、CSV),在 prompt 里直接给一个最小可行示例。例如:
"Output a JSON array of objects, each with 'name' and 'score' fields. Example: [{'name': 'Alice', 'score': 95}, {'name': 'Bob', 'score': 87}]"。Gemini 对示例的模仿能力远超对文字描述的理解。 - 分步拆解,降低认知负荷:不要问“请写一个爬虫抓取豆瓣电影 Top 250 并分析评分分布”,而是拆成:
"Step 1: Write Python code using requests and BeautifulSoup to scrape the movie titles and ratings from https://movie.douban.com/top250. Step 2: Parse the HTML to extract a list of dictionaries like {'title': '...', 'rating': '...'}."。Gemini 3 的推理链(Chain-of-Thought)能力很强,但需要你给它搭好脚手架。
最后分享一个我压箱底的技巧:当结果不稳定时,不要反复重试同一个 prompt,而是用--temperature 0.0强制确定性,并增加--max-output-tokens给它更多“思考空间”。我试过,把--max-output-tokens从 1024 提到 4096,有时能让它从“给出一个模糊答案”变成“给出一个带详细推导过程的答案”。这就像考试时,给学生更多答题纸,他反而能写出更完整的解题步骤。
我个人在实际操作中的体会是,Gemini CLI 的价值,从来不在它“能做什么”,而在于它“如何被嵌入”。它不是一个需要你专门打开、花时间去“使用”的工具,而是一个应该像呼吸一样自然存在于你工作流里的组件。当我写完一段代码,git add后顺手make docs,文档就生成了;当我收到一封长邮件,summarize-email一下,重点就浮现了;当我要提交代码,pre-commit hook 自动跑一遍,低级错误就被拦截了。这种“润物细无声”的集成感,才是它真正让人“爽到飞起”的地方。它不改变你的工作习惯,只是让每一个习惯都变得更高效、更少出错。这大概就是 Google 所谓的“绝招”——不是堆砌功能,而是消除摩擦。
