Google百万Token上下文Gemini CLI,离AI自由更近一步

前言

Gemini CLI出来有一段时间了,一直比较忙没有时间尝鲜,今天终于有时间来了解Gemini CLI的基本功能和使用方式了。对往期内容感兴趣的小伙伴也可以看往期:

当前版本

Gemini CLI:0.1.22

优势

  • 开源免费
  • 免费访问Gemini 2.5 Pro
  • 支持100万token的超大上下文窗口
  • 使用Google账号登录1000次/天模型请求,使用Gemini API Key100次/天模型请求
  • 支持多模态

限制

  • 需要Google账户
  • 需要科学上网,限制国内IP
  • 60次请求/分钟
  • 只适用于命令行终端,需要一定的命令行终端行基础

简介

Gemini CLI 是由 Google 推出的一款开源、免费的命令行界面(CLI)工具,基于强大的 Gemini 2.5 Pro 模型构建,拥有高达 100 万 token 的上下文窗口。它不仅适用于编程任务(如代码编写、调试、生成测试用例),还支持内容创作、问题解决、深度研究和任务管理等多种功能,旨在为开发者和研究人员提供一个高效、灵活且功能强大的 AI 辅助工具。

Github地址:github.com/google-gemi...

Gemini CLI目前在Github上拥有53.9K Star,其受欢迎程度可见一般

核心特性

  • 强大的模型支持:基于 Gemini 2.5 Pro 模型,具备出色的代码生成、调试和优化能力,能够处理复杂的编程任务。
  • 超长上下文窗口:100 万 token 的上下文窗口使其能够处理大规模代码库、长文档和复杂对话,无需频繁截断或分段处理。
  • 多语言支持:支持多种编程语言,包括 Python、JavaScript、Java、C++ 等,能够根据用户需求生成高质量的代码。
  • 多功能集成:除了编程辅助,还支持内容创作、问题解决、深度研究和任务管理,满足不同场景下的需求。
  • 开源与免费:完全开源,用户可以自由查看、修改和贡献代码,同时免费使用,降低了使用门槛。

安装流程

Gemini CLI提供了两种安装方式,一种是通过 Npm 安装,一种是通过 Homebrew 安装

使用Npm安装

要求Node.js 20及更高版本

在命令行终端输入以下命令查看Node.js版本

php 复制代码
$ node -V

全局安装

通过npm在全局安装Gemini CLI,安装完成后直接输入gemini启动CLI工具

ruby 复制代码
$ npm install -g @google/gemini-cli
# 升级可以使用以下命令
$ npm install -g @google/gemini-cli@latest

直接运行

在临时环境安装运行,无需全局安装Gemini CLI,本人这里以该方式进行安装使用

php 复制代码
$ npx https://github.com/google-gemini/gemini-cli

根据提示输入y继续

允许成功后,会出现如下界面:

使用Homebrew安装

php 复制代码
$ brew install gemini-cli

基本使用

操作界面

启动Gemini CLI后,可以看到如下界面

  • 输入框:输入chat提示词或者Gemini CLI指令
  • 项目路径:当前Gemini CLI运行的路径,也就是项目根路径,Gemini CLI会以该路径作为工作区
  • 沙箱模式:在 AI 操作和环境之间提供安全屏障
  • 模型及上下文token:展示当前使用的模型及上下文tokens剩余状态

登录授权

手动授权

如果你是全局安装,Gemini CLI安装完成后,启动也很简单,直接通过以下命令即可启动

php 复制代码
$ gemini

使用需要进行登录授权,目前有 Google登录、Gemini API Key 和 Vertex AI 3种登录方式,选择一种适合自己的登录方式进行登录。

自动授权

这里我以 macOS Gemini API Key 为例,首先退出Gemini CLI,在终端导出GEMINI_API_KEY,对Gemini还不熟悉的小伙伴可以看往期内容:

ini 复制代码
# 使用Gemini API Key
$ export GEMINI_API_KEY=Your Gemini API Key

重新启动Gemini CLI无需手动登录,登录成功效果如下:

也可以在项目根目录创建 .env 文件,配置Gemini API Key,重启Gemini CLI无需手动登录

ini 复制代码
GEMINI_API_KEY=your Gemini API Key

命令行及快捷键列表

在终端输入 /help,可以看到Gemini CLI提供所有指令和快捷键

命令行列表:

  • /help:显示 gemini-cli 的帮助信息
  • /about:显示CLI版本信息
  • /auth:更改认证方法
  • /bug:提交bug反馈
  • /chat:管理对话历史
    • list:列出已保存的对话检查点
    • save:将当前对话保存为检查点。用法:/chat save
    • resume:从检查点恢复对话。用法:/chat resume
    • delete:删除对话检查点。用法:/chat delete
  • /clear:清屏并清空对话历史
  • /compress:通过替换为摘要来压缩上下文
  • /copy:将上一次结果或代码片段复制到剪贴板
  • /corgi:切换corgi模式
  • /docs:在浏览器中打开完整的 Gemini CLI 文档
  • /editor:设置外部编辑器偏好
  • /extensions:列出已激活的扩展
  • /init:分析项目并生成定制的 GEMINI.md 文件
  • /ide:管理 IDE 集成
    • enable:启用IDE扩展
    • disable:禁用IDE扩展
    • status:IDE集成状态
    • install:安装IDE集成依赖
  • /mcp:列出已配置的 MCP 服务器和工具,或与支持 OAuth 的服务器进行身份验证
    • list:列出已配置的 MCP 服务器和工具
    • auth:与支持 OAuth 的 MCP 服务器进行身份验证
    • refresh:刷新 MCP 服务器和工具列表
  • /memory:与记忆交互的命令
    • show:显示当前记忆内容
    • add:向记忆添加内容
    • refresh:从源刷新记忆
  • /privacy:显示隐私声明
  • /quit:退出 CLI
  • /stats:查看会话统计信息。用法:/stats [model|tools]
    • model:显示模型相关的使用统计
    • tools:显示工具相关的使用统计
  • /theme:更改主题
  • /tools:列出可用的 Gemini CLI 工具
  • /vim:开启 / 关闭 Vim 模式
  • !:执行shell命令

键盘快捷键列表:

  • Alt + ← / →:在输入中按单词跳转
  • Ctrl + C:退出程序
  • Ctrl + J:换行
  • Ctrl + L:清屏
  • Ctrl + X / Meta+Enter:在外部编辑器中打开输入
  • Ctrl + Y:切换 YOLO 模式
  • Enter:发送消息
  • Esc:取消操作
  • Shift + Tab:切换自动接受编辑
  • ↑ / ↓:浏览历史

执行Shell指令

Gemini CLI所有的输入都被视为指令,如果需要执行shell指令如 ls、grep 等需要在指令前加!,使用【ESC】键退出shell指令模式

命令行参数

如果需要在启动时覆盖某些默认配置,可以通过命令行参数形式进行覆盖,如需要启动沙盒模式可以使用

php 复制代码
$ gemini --sandbox
或者
$ gemini -s

如果想要从文件设置默认上下文,可以使用递归地将当前目录内的所有文件作为提示的上下文

css 复制代码
$ gemini --all_files
或者
$ gemini -a

需要开启YOLO自动批准模式,可以使用如下指令

css 复制代码
$ gemini --yolo

显示当前内存使用情况,可以使用如下指令

css 复制代码
$ gemini --show_memory_usage

配置文件

Gemini CLI提供了 .gemini/settings.json、.env、GEMINI.md 等配置文件

settings.json

settings.json 提供了 全局配置 和 项目配置 2种配置:

  • 全局配置:适用于所有项目,配置文件路为:~/.gemini/settings.json
  • 项目配置:只针对当前项目,配置文件路径为:项目根目录/.gemini/settings.json

Gemini CLI还提供了其他配置选项,有需要的小伙伴可以看官方文档,settings.json 的简单示例如下:

json 复制代码
{
  "theme": "GitHub",
  "sandbox": "docker",
  "toolDiscoveryCommand": "bin/get_tools",
  "toolCallCommand": "bin/call_tool",
  "mcpServers": {
    "mainServer": {
      "command": "bin/mcp_server.py"
    },
    "anotherServer": {
      "command": "node",
      "args": ["mcp_server.js", "--verbose"]
    }
  },
  "telemetry": {
    "enabled": true,
    "target": "local",
    "otlpEndpoint": "http://localhost:4317",
    "logPrompts": true
  },
  "usageStatisticsEnabled": true
}

.env

Gemini CLI提供了环境变量配置 .env 文件,CLI 会自动从 .env 文件加载环境变量。加载顺序是:

  • 当前工作目录中的 .env 文件
  • 如果未找到,它会在父目录中向上搜索,直到找到 .env 文件或到达项目根目录或主目录
  • 如果仍未找到,它会查找 ~/.env(在用户的主目录中)

.env 文件的简单示例如下:

ini 复制代码
GEMINI_API_KEY=your gemini api key
GEMINI_MODEL=gemini-2.5-flash
GOOGLE_CLOUD_PROJECT=your google cloud project id

GEMINI.md

Gemini CLI可以从多个位置加载上下文文件实现复杂的分层记忆系统,上下文文件加载顺序:

  • 全局上下文文件:为所有Gemini CLI会话提供,路径为:~/.gemini/GEMINI.md
  • 项目根目录和祖先上下文文件:作用于整个项目或项目重要部分,路径为:工作目录及工作区的每个父目录/GEMINI.md
  • 子目录上下文文件(上下文/本地):作用于项目特定组件、模块,路径为:工作目录下子目录/GEMINI.md

比如一个最简单的上下文示例可以这么写:

markdown 复制代码
## 语言
- 所有回复默认使用中文

外部编辑器

在Gemini CLI中使用外部编辑器有两种方式:

  • 在终端中使用,在外部编辑器打开查看文件修改差异
  • 在外部编辑器命令行中使用,配置完环境后可以在编辑器中查看文件修改差异

默认情况下,Gemini CLI生成的文件在编辑器中是没法看到修改差异的

第一种方式是在文件内容发生改变时使用【Modify with external editor】在外部编辑器中查看更改对比,在这之前需要进行一下外部编辑器配置,在Gemini CLI中输入命令 /editor 设置外部编辑器,使用【上下箭头】选择配置,使用【Tab】键切换配置

配置完外部编辑器后,有内容修改时选择【Modify with external editor】就可以在外部编辑器中对比查看了

第二种方式,我们以在VS Code和Cursor中使用分别展示。

在VS Code中使用

在VS Code编辑器中启动Gemini CLI,Gemini CLI会检测启动环境,首次会有提醒

选择【YES】会执行【/ide install】指令安装VS Code扩展依赖

安装完成后Gemini CLI会自动执行【/ide enable】指令启动集成扩展(注意如果遇到无法连接IDE集成问题,可以新开一个终端再次启动Gemini CLI,还不行可以重启IDE尝试),我们可以通过【/ide status】指令查看VS Code集成连接状态,状态为【Connected to VS Code】即为连接成功

当我们让Gemini CLI修改文件内容时,就会在VS Code中展示文件修改前后对比

在Cusor中使用

在Cursor中启动Gemini CLI后发现一个问题(不知道是不是只有我个人这样),在Cursor中Gemini CLI不会像在VS Code中会自动检测环境给出安装IDE集成提示,我们需要手动配置,当我们查看IDE状态时不管时启用禁用还是安装都会提示无法连接或找不到Cursor IDE集成

我们需要手动在插件商店找到【Gemini CLI Companion】扩展,注意这里还有一个坑,在Cursor扩展商店中无法通过"Gemini CLI Companion"关键词检索到插件,需要手动往下查找,是有这个插件的只是无法被精准检索,这个也困惑了我一段时间。(注意如果遇到无法连接IDE集成问题,可以新开一个终端再次启动Gemini CLI,还不行可以重启IDE尝试)

如果顺利就可以看到Cursor集成状态变为【Connected to Cursor】

当Gemini CLI对文件修改时就可以直接在Cursor中查看文件修改前后差异了

Chat对话

Chat是Gemini CLI最常用的指令,直接在输入框输入提示词回车即是一次对话,例如我们输入以下提示词

复制代码
使用Node.js开发一个简单文件服务

Gemini CLI便会开始执行任务,遇到权限会等待我们授权,这里直接选择【Yes,allow always】

Gemini CLI创建完任务后,还会执行测试

任务完成后,新开一个终端启动服务

php 复制代码
$ node server.js

在浏览器打开 http://localhost:8080

使用 /stats model 指令查看下模型消耗情况,该任务消耗了16次Request

在Chat聊天中,可以通过 @ 命令查看当前工作区文件列表

选择文件,可以将文件添加到聊天上下文

Gemini CLI尚不支持粘贴图片

工具使用

输入 /tools 可以查看Gemini CLI提供的工具列表,其中包含了对 文件、目录、Shell、Google Search 以及 Web Fetch 的功能,利用这些工具我们可以轻松实现对文件、目录查找读取、获取网络信息等操作。

我们可以输入如下提示词,要求Gemini CLI为我们创建一个python文件并打印hello world

复制代码
创建一个hello.py文件并打印hello world 

创建完成后,我们输入如下提示词从文件中读取文件内容,文件资源可以通过@符号 选择

css 复制代码
读取@hello.py文件的内容

我们可以发挥我们的想象利用Gemini的多模态能力,比如我本地images目录下有两张图片,可以要求Gemini CLI根据图片人物名称进行重新命名

输入提示词

css 复制代码
分析@images/文件夹下的所有图片内容,基于图片内容批量对图片进行重新命名

可以看到Gemini CLI读取并正确分析出了图片内容,准确的对图片完成了命名

我们也可以通过Gemini CLI获取网页信息

使用Google Search查询互联网信息

复制代码
帮我查询全球股票市值最高的6个股票信息并用柱状图展示

Gemini CLI获取到了最新的股票信息并尝试编写Python脚本展示图标

执行完毕后,我们将得到一个图表图片

记忆文件管理

记忆文件类似Cursor的 User Rules 和 Project Rules,在Gemini CLI中记忆文件也包含 用户(全局)记忆 和 项目记忆 两种。使用记忆文件首先需要创建GEMINI.md 文件,这里以项目记忆文件为例,在项目根目录创建一个GEMINI.md 文件

记忆文件没有固定的格式和要求,可以使用Markdown语法,也可以使用任何便于理解的描述,比如我们可以让Gemini CLI默认使用中文回复,我们可以这么写

markdown 复制代码
## 语言
- 所有回复默认使用中文

重启Gemini CLI(最好重启,不然有时会出现不生效的情况),输入指令 /memory refresh 刷新上下文

再输入指令 /memory show 即可查看上下文内容

再次测试,可以看到使用中文回复了

为了验证上下文作用生效效果,我们再在 根目录父目录 以及 images目录 下分别创建一个 GEMINI.md 文件

再次输入指令 /memory show 查看上下文内容,可以看到此时上下文内容已经包含了 工作区目录父目录、工作区目录 以及 工作区子目录 的所有的上下文内容

输入提示词,分别在 工作区目录 和 工作区子目录 创建一个Python文件要求添加注释

css 复制代码
在当前目录和@images/目录下分别创建index.py并输出hello world添加注释

Gemini CLI居然严格遵守了不同上下文约束,这个是真可以👍🏻

我们也可以添加更多项目说明和约束,例如TypeScript约束

markdown 复制代码
## 语言
- all response in 中文
## 一般指令:
- 生成新的 TypeScript 代码时,请遵循现有的编码风格。
- 确保所有新函数和类都有 JSDoc 注释。
- 在适当的地方优先使用函数式编程范式。
- 所有代码应与 TypeScript 5.0 和 Node.js 18+ 兼容。
## 编码风格:
- 使用 2 个空格缩进。
- 接口名称应以 `I` 为前缀(例如,`IUserService`)。
- 私有类成员应以下划线(`_`)为前缀。
- 始终使用严格相等(`===` 和 `!==`)。
## 特定组件:`src/api/client.ts`
- 此文件处理所有出站 API 请求。
- 添加新的 API 调用函数时,确保它们包含强大的错误处理和日志记录。
- 对所有 GET 请求使用现有的 `fetchWithRetry` 实用程序。
## 关于依赖项:
- 除非绝对必要,否则避免引入新的外部依赖项。
- 如果需要新的依赖项,请说明原因。

MCP服务

这里以项目MCP配置和 Mcp Server Chart 为例,在MCP.so检索 Mcp Server Chart

获取MCP配置信息,在工作区 .gemini/settings.json 文件中配置

perl 复制代码
{
  "mcpServers": {
    "mcp-server-chart": {
      "command": "npx",
      "args": [
        "-y",
        "@antv/mcp-server-chart"
      ]
    }
  }
}

配置完成后,重启Gemini CLI,输入 /mcp show 查看MCP信息,MCP前面状态为绿色表明MCP服务启动成功

接下来,我们还是用上面股票信息的提示词来测试下

复制代码
帮我查询全球股票市值最高的6个股票信息并用柱状图展示

额,好像发现了Gemini CLI的一个bug,尝试了好多次,只要配置了这个MCP就报错

还是改成Context7 MCP吧

perl 复制代码
{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": [
        "-y",
        "@upstash/context7-mcp"
      ]
    }
  }
}

配置完成后,输入 /mcp list 查看MCP配置状态

输入提示词,显示指明使用Context7 MCP

复制代码
使用Context7 MCP 查询AutoGen新特性

允许权限后,就可以看到MCP调用结果了

总结

Gemini CLI整体体验下来,使用限制和问题还是蛮多的,实际使用Gemini CLI需要突破 Google相关API Key、科学上网环境、IP锁国 等限制,毕竟是免费提供的折腾点也可以忍了。本次体验主要涉及文件操作、工具调用、上下文文件、MCP调用等功能,没有过多涉及编程,整体来说Gemini CLI的使用过程还是很流畅的,准确度和响应速度也还不错,基本可以满足日常任务需求,还是建议入手的。

常见问题

Fetch failed sending request

出现该问题表明你可能需要科学上网环境,终止Gemini CLI,配置代理在终端输入如下指令,重启Gemini CLI

arduino 复制代码
$ export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890

使用Google账号登录一直loading

出现该问题和科学上网环境有关,终端配置代理,配置代理命令如下

arduino 复制代码
$ export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890

GOOGLE_CLOUD_PROJECT报错

出现该问题多半是使用Google账号登录状态下,表明需要创建Google Cloud项目,打开Google Cloud:console.cloud.google.com,如果没有项目点击左上角【选择项目】

点击【新建项目】创建一个新项目

创建完成后,复制项目ID

在终端导出 GOOGLE_CLOUD_PROJECT,重启Gemini CLI

shell 复制代码
$ export GOOGLE_CLOUD_PROJECT=your project id

请求403

该问题多出现在使用Google账号登录下,意思是说用户未开通Gemini接口调用权限,因为Gemini API是收费的,个人使用需要开通接口调取权限,超出限制后需要扣费。打开提示中的链接,点击【启动】后重新启动Gemini CLI即可

Request contains an invalid argument

这个问题发生在配置了 @antv/mcp-server-chart 或 mcp-echarts MCP后,只要配置了这两个MCP chat必然报错,这可能是Gemini CLI的bug,建议更换为其他MCP尝试。

IDE无法连接到集成扩展

新开一个命令后终端或者重启IDE重试

友情提示

见原文:Google百万Token上下文Gemini CLI,离AI自由更近一步

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。

相关推荐
pc大老10 小时前
优化浏览体验:4个设置让Google Chrome更好用!
chrome·google·谷歌浏览器·谷歌·浏览器设置
程序员爱钓鱼10 小时前
Go语言实战案例 — 项目实战篇:任务待办清单 Web 应用
后端·google·go
路边闲人21 天前
vscode启用GEMINI CODE ASSIST插件
ide·vscode·gemini
程序员爱钓鱼1 天前
Go语言实战案例 — 项目实战篇:图书管理系统(文件存储)
后端·google·go
iChochy2 天前
[开源免费] iGTTS(Gemini TTS) 文本转语音(TTS)的命令行工具。
python·tts·gemini
程序员爱钓鱼2 天前
Go语言实战案例 — 工具开发篇:编写一个进程监控工具
后端·google·go
程序员爱钓鱼3 天前
Go语言实战案例 — 工具开发篇:Go 实现条形码识别器
后端·google·go
云雾J视界4 天前
AI时代技术面试重构:谷歌如何用Vibe Coding与抗作弊革命重塑招聘
人工智能·google·面试·重构·谷歌·ai工具·技术面试
深度学习机器4 天前
Embedding Gemma,谷歌发布的小而精向量模型,仅需0.3B|附RAG实战代码
google·llm·openai