概述
本文将介绍如何使用 gemini-cli
这个命令行工具来分析其自身的源码库。 我们将通过一系列交互式的命令,探索 gemini-cli
的设计和实现。这种方法不仅展示了 AI 工具的功能,也为开发者提供了一种新的学习和探索方式。
如果你不知道 gemini-cli 是什么,这里简单介绍一下:
gemini-cli 是一款开源的命令行界面(Command-Line Interface, CLI)工具,它允许开发者和用户直接在终端(Terminal)中与 Google 的 Gemini 模型进行交互。你可以把它想象成一个在命令行里的智能 A I助手。
缘起
学习一个新领域时,光学习理论与概念往往不够深入,也容易让人感到枯燥。反而,通过分析一个实际项目的源码,可以更直观地理解其设计和实现细节。学习 Kubernetes 如是,学习 AI 应用也如是。分析一个 AI 工具的实现源码,既有趣又富有挑战性。
评价一个工具是否已经成熟,有时可以通过看它是否能够 自举(bootstrapping)
。自举是指一个工具能够应用自身的功能来处理自身的事情。
相信有 OpenJDK 编译构建经验的同学都知道,要编译 OpenJDK 需要先安装一个 JDK(当然,可以是相对低版本的),然后用安装的 JDK 再去构建出目标 JDK。在计算机术语中,这个过程称为自举(bootstrapping)。而在 AI 领域,我们也可以用 AI 工具来分析和理解 AI 工具自身的源码。这种方法可以被视为一种“以子之矛,攻子之盾”的自举过程。
所以,用 Gemini-CLI 分析 Gemini-CLI 自身源码,我觉得是件相当有趣也相当实用的事情。
分析
每一次浏览 gemini-cli
的源码。我们可以用 AI 分析工具,也可以自己直接看源码。但我的建议是,先看它的 High Level 设计文档。AI 世代,人写的东西,特别是 high level 的,弥足珍贵: Gemini CLI Architecture Overview
|
|
Prompts
分析 LLM 应用源码,最直观也是最容易的切入点,当然是从 prompts 开始。因为 prompts 是 LLM 应用的核心,直接决定了模型的行为和输出。
Software Engineering Tasks
提出问题:
╭──────────────────────────────────────────────────────────────────────────────────────╮
│ > 解释 @packages/core/src/core/prompts.ts 中的提示语(prompt) 并用其中一个例子说明. │
╰──────────────────────────────────────────────────────────────────────────────────────╯
分析结果:
|
|
上面的 “代理”,是指 AI Agent 。
New Applications
接下来,我们分析 gemini-cli
是如何处理新应用的创建的。
提出问题:
╭───────────────────────╮
│ > 还能具其它例子吗? │
╰───────────────────────╯
分析结果:
|
|
有趣的周边
不得不诚认,我是个懒人。在思索如何写本文时,我希望 gemini-cli 能够帮我生成一篇关于如何用 gemini-cli 分析 gemini-cli 源码的文章。于是,我给它发了个 prompt:
> 生成一篇讲述"用 gemini-cli作为工具去分析 gemini-cli 源码库的 hugo markdown 文章,放于目录 /home/labile/blog/content/zh/posts/ai 中
✦ 好的,我将为您生成这篇 Hugo Markdown 文章。
我将创建文件 /home/labile/blog/content/zh/posts/ai/analyzing-gemini-cli-with-gemini-cli.md。
这篇文章将探讨如何利用 gemini-cli 这个强大的命令行工具,来交互式地分析和理解其自身的源码仓库,展示一种“以子之矛,攻子之盾”的现代软件开发学习方法。
现在,我将为您创建这篇文章。
✔ WriteFile Writing to /analyzing-gemini-cli-with-gemini-cli.md
│ 2 title: "以子之矛,攻子之盾:用 Gemini-CLI 分析自身源码"
│ 3 date: 2025-08-19T10:00:00+08:00
│ 4 draft: false
│ 5 tags: ["Gemini", "CLI", "AI", "源码分析", "Developer Tools"]
│ 6 categories: ["AI应用"]
│ 7 ---
│ 8
│ 9 ## 前言
│ 10
│ 11 在软件开发领域,……
✦ 我已成功在 /home/labile/blog/content/zh/posts/ai/ 目录下创建了 analyzing-gemini-cli-with-gemini-cli.md 文件。
您现在可以检查该文件,或者直接使用 Hugo 来构建您的网站以预览这篇文章。如果需要任何修改,请随时告诉我。
不过我得说。本文大部分还是我自己手写的。
结语
作为一个 20 年的 IT 从业者。每次面对技术更替,我或积极主动或被动地去学习。从 Cloud Native 到 AI 应用。我有一个藏着一段时间没说出来的感觉:实用技能学习的曲线越来越陡峭,学习成本越来越高:
- 有时,被硬件资源限制,如 Cloud Native 时的 CPU 和内存,AI 时的 GPU 。而这再一次拉开了贫富学习者之间的距离。
- 有时,被知识海洋的浩瀚所淹没,无所适从。每天有层出不穷的新技术、新工具、新框架。
有点讽刺的是,我在 vscode 中写本文写到这里,vscode 的 gemini code assist 插件提示自动补全:
但我相信,AI 工具的出现,尤其是像
gemini-cli
这样的工具,将极大地降低我们学习和掌握新技术的门槛。它们不仅能帮助我们更快地理解复杂的代码和概念,还能让我们在实际操作中获得即时反馈和指导。
就是这样,以前我们说基于推荐引擎的互联网信息影响了人们的独立思考能力。现在,AI 工具的普及,不但会让人们更依赖 AI 来获取信息,甚至在源头上影响信息的生成和输出!如何在 AI 统治一切信息前,保证人们的独立思考能力? 或者说,我们不需要这种能力?顺势舒服地活着,比独立思考更重要?
I know this steak doesn’t exist. I know that when I put it in my mouth, the Matrix is telling my brain that it is juicy and delicious. After nine years, you know what I realize? Ignorance is bliss.
—— Cypher @ The Matrix (1999)
我知道这块牛排并不存在。我知道当我把它放进嘴里时,是“母体”在告诉我的大脑,它多汁又美味。九年了,你知道我领悟到了什么吗?
无知是福。—— Cypher @ 黑客帝国 (1999)
最后说一句,我待业状态。I am open for work. 如果你有合适的工作机会,欢迎联系我。