AI Agent(人工智慧代理人)是一個能自主感知環境、進行決策並執行動作以達成特定目標的智慧實體。它不僅僅是被動地回應指令,更能主動規劃、推理,並利用可用工具(例如:讀寫檔案、執行程式碼、搜尋網路)來完成複雜任務。
一個典型的 AI Agent 包含以下幾個核心組件:
- 感知 (Perception): 接收並理解來自環境的資訊,例如使用者的輸入、檔案內容、API 回應等。
- 規劃 (Planning): 根據目標將複雜任務拆解成一系列可執行的小步驟。
- 記憶 (Memory): 擁有短期與長期記憶,能記住過去的互動、學習經驗與使用者偏好。
- 工具使用 (Tool Use): 能夠呼叫外部工具或函式庫來擴展其能力,例如執行程式碼、操作檔案系統、進行網路搜尋等。
AI CLI (Command-Line Interface) 是一種將大型語言模型(LLM)的強大能力整合到終端機命令列環境中的工具。它讓開發者、系統管理員和進階使用者能用自然語言與他們的電腦互動,將傳統上需要手動輸入的複雜指令,轉化為與 AI 的對話。
相較於傳統 CLI 只能執行語法固定的指令,AI CLI 能理解使用者的「意圖」,並將其轉換為實際的指令或程式碼。
find . -type f -exec ls -s {} + | sort -n -r | head -n 5)。bash 或 powershell 腳本來自動化維運任務。SQL 查詢或 Python 腳本來進行數據清洗與分析。這些是目前市面上主流的、為程式開發與命令列操作提供支援的 AI 模型或工具。它們各自擁有強大的程式碼理解與生成能力,而 Google Gemini CLI 則是將這種能力深度整合到開發者工作流程中的一個範例。
這是一個很好的問題,也點出了一個有趣的分界點。簡單來說,AI CLI 可以被視為一種「特定領域」且「使用者驅動」的 AI Agent,但它通常不具備一個完整 AI Agent 所擁有的高度自主性 (Autonomy)。
您可以這樣理解:AI CLI 讓您成為了一個更強大的 Agent;而 AI Agent 則試圖自己成為一個 Agent。
雖然 Web 介面的 AI 服務(如 ChatGPT、Claude 網頁版)非常方便,但它們存在一個根本性的限制:它們被侷限在瀏覽器的沙盒中,無法直接與您電腦的本地檔案系統和開發環境互動。 這正是 AI CLI 發揮其最大價值的所在。
AI CLI 將大型語言模型的智慧,從雲端帶到您的本地終端機,使其能夠:
- 讀取本地檔案: 分析您專案中的實際程式碼。
- 寫入本地檔案: 直接修改程式碼、新增檔案、產出報告。
- 執行本地指令: 運行測試、安裝套件、啟動伺服器、操作 Git。
這意味著 AI CLI 能完成許多 Web 介面 AI 無法處理的、需要與真實開發環境深度整合的複雜任務。
情境:
假設您正在維護一個中型 JavaScript 專案。您發現專案中有一個名為 getUserProfile() 的舊函式已被棄用,您希望將所有使用到它的地方,全部替換為一個新的、位於 src/utils/api.js 中的 fetchUserProfile() 函式。完成後,您還需要執行專案的測試來確保這次重構沒有引入新的 Bug。
為什麼 Web 介面 AI 做不到?
- 它看不到您的專案資料夾結構,不知道哪些檔案需要修改。
- 您必須手動一個一個地將檔案內容複製貼上到聊天視窗中,極度耗時且容易出錯。
- 它無法在修改後,幫您執行 npm test 或 pytest 等本地測試指令來驗證結果。
AI CLI 如何解決這個問題?
您可以直接在專案的根目錄下,對 Gemini CLI 下達一個高階指令:
gemini "請幫我分析這個專案中所有的 .js 檔案。將所有 `getUserProfile()` 的呼叫,替換成 `fetchUserProfile()`。同時,請在需要修改的檔案頂部自動加入 `import { fetchUserProfile } from '/src/utils/api.js';` 這行匯入語句。完成所有檔案的修改後,請使用 @shell 工具執行 `npm test` 來運行單元測試,並告訴我測試結果。"
背後的工作流程:
1. 理解意圖: Gemini CLI 解析您的自然語言指令,理解了這是一個包含「搜尋、取代、新增匯入、執行測試」四個步驟的複雜任務。
2. 檔案搜尋: 它會使用內建的檔案系統工具(或呼叫 @shell 執行 find . -name "*.js"),找出專案中所有需要檢查的 JavaScript 檔案。
3. 逐一處理:
- 對於每一個找到的檔案,它會讀取其內容。
- 檢查是否包含 getUserProfile()。
- 如果有,它會執行程式碼替換,並在檔案頂部插入 import 語句(同時會智能地判斷是否已存在)。
- 將修改後的內容寫回原檔案。
4. 執行驗證: 在處理完所有檔案後,它會呼叫 @shell 工具,在您的終端機中執行 npm test 指令。
5. 結果回報: 最後,它會將 npm test 的輸出結果回報給您,告訴您測試是否通過,或者出現了哪些錯誤。
這個範例清楚地展示了 AI CLI 如何作為一個真正的「開發助理」,無縫地融入您的工作流程,自動化完成那些繁瑣、重複且需要與本地環境互動的任務。
Google Gemini CLI 是一個功能強大的開源 AI 代理人,它將 Gemini 模型的強大能力直接整合到您的終端機中。它不僅是一個問答工具,更是一個能理解您的工作環境、操作檔案、執行指令的開發夥伴。
在安裝 Gemini CLI 之前,您的系統中必須先安裝 Node.js。
為什麼需要 Node.js?
Google Gemini CLI 這個工具本身是一個基於 Node.js 開發的應用程式。因此,無論您使用 npx、npm 或是 Homebrew 進行安裝,都需要 Node.js 的執行環境才能運作。簡單來說,如果沒有安裝 Node.js,是無法執行 Gemini CLI 的。
如何安裝 Node.js?
1. 前往 Node.js 官方網站。
2. 建議下載並安裝 LTS (Long-Term Support) 版本,因為它最為穩定。
3. 安裝完成後,您可以打開終端機並執行 node -v 和 npm -v 來確認是否安裝成功。如果成功,這兩個指令會分別顯示 Node.js 和 npm 的版本號。
確認 Node.js 安裝成功後,您可以根據您的作業系統與偏好,選擇以下任一種方式進行安裝。
npx (推薦,無需全域安裝)這是最快開始的方式,npx 會執行最新的版本而不在您的系統中永久安裝。
npx @google/gemini-cli
npm (全域安裝)如果您希望在系統的任何地方都能直接使用 gemini 指令,可以選擇全域安裝。
npm install -g @google/gemini-cli
brew install gemini-cli
安裝後,第一次執行時需要進行設定,主要是提供您的 API 金鑰。
執行以下指令,並將您剛剛取得的金鑰貼上。
gemini config set api_key YOUR_API_KEY_HERE
設定完成後,gemini-cli 就準備就緒了。
這是最基礎的用法,就像與 ChatGPT 或其他聊天機器人對話一樣。
gemini "請用 Python 寫一個函式,它能將 Markdown 檔案轉換為 HTML。"
如果您需要進行多輪對話,以逐步完成一個複雜任務,可以使用 chat 模式。
gemini chat
進入 chat 模式後,您可以持續提問,gemini 會記住之前的對話內容。
Gemini CLI 可以與傳統的 shell 指令完美結合。
分析檔案內容:
bash
# 請 gemini 解釋一個 shell 腳本的用途
cat script.sh | gemini "這個腳本是做什麼用的?"
將輸出儲存到檔案:
bash
# 產生一個 Dockerfile 並直接寫入檔案
gemini "為一個基本的 Node.js Express 應用產生一個 Dockerfile" > Dockerfile
情境: 您看到一段不熟悉的 C++ 程式碼,想了解它的功能。
// main.cpp
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
int sum = std::accumulate(v.begin(), v.end(), 0, [](int a, int b) {
return a + b;
});
std::cout << "Sum: " << sum << std::endl;
return 0;
}
操作:
cat main.cpp | gemini "用繁體中文解釋這段 C++ 程式碼的功能,並說明 std::accumulate 的用途。"
情境: 您想了解目前最新的前端框架趨勢。
操作: 使用 @google 工具來觸發網路搜尋。
gemini "@google 2025 年最值得關注的前端框架有哪些?請整理成表格並說明各自的優缺點。"
情境: 您想快速找出目前專案中所有 TODO 註解的位置。
操作: 使用 @file 工具來讀取檔案內容。
# 讓 gemini 搜尋當前目錄下所有 .js 檔案
ls *.js | gemini "在 @file 中找出所有包含 'TODO' 的行,並列出檔案名稱與行號。"
情境: 您想為您的 Python 專案自動產生 requirements.txt 檔案。
操作: 結合 @shell 工具來執行指令。
gemini "分析這個 Python 專案,然後使用 @shell 工具執行 'pip freeze > requirements.txt' 來產生依賴檔案。"
情境: 您想快速了解一個新的開源工具(例如 Gemini CLI 本身),並產出一份清晰的教學文件。這正是您剛剛對我下達的指令!
操作: 您在終端機中輸入的指令,本質上就是一個完美的 Gemini CLI 使用範例。
gemini "google cli的安裝 https://github.com/google-gemini/gemini-cli 根據這個網頁整理更詳細的說明與應用"
背後原理:
1. 工具觸發: Gemini CLI 偵測到指令中包含一個 URL (https://...)。它會自動啟用內建的 @web 工具來處理這個網址。
2. 資料擷取: @web 工具在背景執行,存取該 GitHub 頁面,並將整個頁面的主要內容(例如 README.md 的文字)擷取下來。
3. 情境注入: 擷取到的網頁內容會被自動加入到您的原始提示中,作為一個龐大的上下文資訊。
4. 自然語言處理與生成: Gemini Pro 模型接著處理這個包含完整上下文的最終提示,閱讀並理解 GitHub 頁面的內容,然後根據您的要求,重新組織、提煉重點、撰寫範例,最終生成一份結構清晰、內容詳盡的教學文件。
這個範例完美展示了 AI CLI 如何將「外部資料」與「使用者意圖」無縫結合,自動化完成從研究到內容創作的完整工作流程。
情境:
這份您正在閱讀的文件,就是 AI CLI 能力的最佳證明。它並非一蹴可幾,而是透過一系列與 AI CLI 的對話,從一個簡單的大綱逐步演進、修正、擴充而來的。
為什麼 Web 介面不適合這個任務?
- 缺乏檔案系統感知: 您無法簡單地告訴 Web AI:「讀取 b06 版本,然後加入一個新章節,存成 b07 版本」。您必須手動複製 b06 的全部內容貼到網頁上,然後再將 AI 生成的結果完整複製回來,儲存為新檔案。這個過程極其繁瑣且容易出錯。
- 上下文遺忘: 在長時間、多輪的對話中,Web 介面可能會遺忘最初的目標或之前的修正細節。
- 無法整合外部資訊: 您無法讓 Web AI 直接讀取一個 URL 的內容並整合進現有的文件中。
AI CLI 如何實現這個迭代流程?
以下是我們這次對話的模擬指令流程,完美展示了 AI CLI 如何解決上述所有痛點:
第一步:從大綱開始
bash
# 初始檔案 AI_Agent_Cli.md 只有一個基本大綱
gemini "請根據 @AI_Agent_Cli.md 的大綱,為每一個標題擴充詳細的解說與範例,並將結果儲存為 AI_Agent_Cli_b01.md"
@file) 作為上下文,並將結果寫入新檔案。第二步:補充與修正
bash
gemini "讀取 @AI_Agent_Cli_b01.md,在其中加入一個新章節,討論『AI CLI 是否為一種 Agent』,然後儲存為 AI_Agent_Cli_b02.md"
第三步:整合外部資訊
bash
gemini "請根據這個網頁 https://github.com/google-gemini/gemini-cli 的內容,更新 @AI_Agent_Cli_b02.md 中關於安裝與應用的說明,使其更詳細,然後儲存為 AI_Agent_Cli_b03.md"
@web 工具,自動抓取並理解 URL 內容,並將其與現有檔案內容結合後,產出新版本。第四步:持續迭代與完善
bash
# 模擬後續的修正指令...
gemini "修正 @AI_Agent_Cli_b03.md 中關於 Gemini 1.5 Pro 的錯誤資訊,並加入 Node.js 的安裝說明,存成 b04.md"
gemini "擴充 @AI_Agent_Cli_b04.md 中關於 gemini.md 的範例,存成 b05.md"
gemini "在 @AI_Agent_Cli_b05.md 中加入一個『超越 Web UI』的範例,存成 b06.md"
# ... 直到我們現在的版本
這個真實的迭代過程,是 Web 介面 AI 難以企及的,也正是 AI CLI 最核心的價值所在。
gemini.md 的指引規範這是 gemini-cli 最強大的特色之一。透過在您執行指令的專案資料夾根目錄下建立一個名為 gemini.md 的檔案,您可以為 AI 設定一個「角色」、「行為準則」和「輸出規範」,讓它在該專案中的所有回應都能遵循您的要求,確保風格與格式的一致性。
當您在一個資料夾中執行 gemini 指令時,它會自動向上搜尋 gemini.md 檔案。如果找到了,它會將該檔案的內容作為「系統提示 (System Prompt)」或「前導指令 (Preamble)」加到您的每一次請求的最前面。這等於是為 AI 提供了一個永久性的、專案範圍的行為指南。
情境: 您正在開發一個 Python 專案,並希望 AI 產生的所有程式碼都符合高品質的工程標準。
gemini.md 內容:
# Gemini 協作指引: Python 專案
## 1. 角色定位
你是一位資深的 Python 開發者,專長是撰寫乾淨、高效且易於維護的程式碼。
## 2. 程式碼生成規則
- **型別提示 (Type Hint)**: 所有函式的參數與回傳值都必須加上型別提示。
- **文件字串 (Docstring)**: 每個公開的函式和類別都必須有符合 Google 風格的 Docstring,並包含 Args 和 Returns 區塊。
- **註解**: 對於複雜的商業邏輯,請加上簡潔的繁體中文註解來解釋「為什麼」這樣做,而不是「做了什麼」。
- **風格**: 嚴格遵循 PEP 8 程式碼風格指南。
- **錯誤處理**: 優先使用 try...except 區塊處理潛在的例外,而不是讓程式崩潰。
效果: 在此專案中,當您請求 gemini "寫一個函式讀取 csv" 時,它產生的程式碼將會自動包含型別提示、完整的 Docstring 和錯誤處理。
情境: 您正在為一個軟體專案撰寫使用者手冊,需要 AI 協助產生清晰、格式一致的說明文件。
gemini.md 內容:
# Gemini 協作指引: 技術文件撰寫
## 1. 角色定位
你是一位專業的技術文件寫手,擅長將複雜的技術概念轉化為普通使用者也能輕鬆理解的文字。
## 2. 寫作風格與規則
- **語言**: 使用繁體中文。
- **目標讀者**: 假設讀者是初學者,避免使用過於深奧的技術術語。如果必須使用,請務必加上簡短的解釋。
- **語氣**: 專業、友善且有耐心。
- **格式**:
- 使用 Markdown 格式。
- 操作步驟必須使用有序列表 (1., 2., 3.)。
- 程式碼或指令必須放在 ` ```bash ` 或 ` ```python ` 等對應的程式碼區塊中。
- 重要的名詞或提示,請使用**粗體**標示。
效果: 當您請求 gemini "說明如何設定資料庫連線" 時,它會自動產出格式工整、用語淺顯易懂的 Markdown 教學文件。
情境: 您正在開發一個 React 專案,使用 TypeScript 和 Tailwind CSS。
gemini.md 內容:
# Gemini 協作指引: React + TypeScript 專案
## 1. 角色定位
你是一位專精於 React 和 TypeScript 的前端工程師,熟悉現代前端開發實踐。
## 2. 程式碼生成規則
- **元件類型**: 優先使用函式元件 (Functional Components) 搭配 Hooks。
- **狀態管理**: 簡單狀態使用 `useState`,複雜狀態使用 `useReducer` 或 `Zustand`。
- **型別**: 為所有 props 和 state 加上明確的 TypeScript 型別定義。
- **樣式**: 使用 Tailwind CSS 的 utility classes 進行樣式設計,避免使用傳統的 CSS 檔案或 CSS-in-JS。
- **檔案結構**: 元件檔案命名為 `ComponentName.tsx`。
效果: 當您請求 gemini "建立一個使用者登入表單元件" 時,它會產出一個 .tsx 格式的 React 函式元件,其中包含 TypeScript 型別定義和 Tailwind CSS 樣式。
情境: 您希望團隊的 Git 提交訊息都遵循「Conventional Commits」規範。
gemini.md 內容:
# Gemini 協作指引: Git 提交訊息
## 1. 角色定位
你是一個嚴格遵守 Conventional Commits 規範的 Git 專家。
## 2. 輸出規則
- 你的**唯一**任務是根據使用者提供的程式碼變更描述,產生一個符合規範的 Git 提交訊息。
- **不要**產生任何程式碼或解釋。
- 訊息格式必須是 `<type>(<scope>): <subject>`,例如 `feat(api): add user login endpoint`。
- 常見的 type 包括: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`。
效果: 當您執行 git diff | gemini "我新增了登入功能" 時,它會直接回傳 feat(auth): implement user login functionality 這樣的標準化訊息,方便您直接用於提交。
為了讓 VS Code 成為一個強大的 C++ 與 Python 開發環境,使其能與 Gemini CLI 完美配合,您需要安裝一些核心的擴充功能並進行基礎設定。
設定 Python 環境相對單純,主要依賴 Microsoft 官方提供的擴充功能。
步驟一:安裝 Python 擴充功能
1. 打開 VS Code。
2. 點擊左側活動欄的「擴充功能」圖示 (Extensions)。
3. 在搜尋框中輸入 Python。
4. 找到由 Microsoft 發布的 Python 擴充功能,點擊「安裝」(Install)。
核心功能
安裝後,您將獲得一個功能齊全的 Python 開發環境,包括:
- IntelliSense: 智慧程式碼補全、語法提示、函式簽名輔助。
- Linter 與 Formatter: 自動檢查程式碼風格(如 Pylint, Flake8)並進行格式化(如 Black, autopep8)。
- 偵錯 (Debugging): 支援中斷點、單步執行、變數監看等完整的偵錯功能。
- Jupyter Notebook 支援: 直接在 VS Code 中建立和執行 .ipynb 檔案。
- 環境管理: 輕鬆切換不同的 Python 解譯器,包括虛擬環境 (venv) 和 Conda 環境。VS Code 會自動偵測您專案中的虛擬環境。
步驟二:選擇 Python 解譯器
1. 打開您的 Python 專案資料夾。
2. 使用快捷鍵 Cmd + Shift + P (macOS) 或 Ctrl + Shift + P (Windows) 打開命令面板。
3. 輸入 Python: Select Interpreter。
4. 從列表中選擇您希望使用的 Python 版本(系統安裝的、venv 或 Conda 環境中的)。
本節將引導您在 Windows 上使用 MSYS2 和 VS Code 建立一個現代、穩定且易於更新的 C++ 開發環境。
步驟一:安裝 C/C++ 編譯器 (使用 MSYS2 — 推薦)
⚠️ 重要提示:請不要再使用舊版的 MinGW 安裝程式。MSYS2 提供了最新版本的 g++ 和 gdb,並且可以透過套件管理器輕鬆更新。
下載並安裝 MSYS2
更新系統套件
bash
pacman -Syubash
pacman -Su安裝 MinGW 64-bit C++ 工具鏈
bash
pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-gdb將 MinGW-w64 加入 Windows PATH 環境變數
g++.exe。C:\msys64\ucrt64\bin 這個路徑加入到 Windows 的 Path 環境變數中。bash
g++ --version
gdb --version步驟二:安裝 VS Code C++ 擴充套件
步驟三:建立並設定您的第一個 C++ 專案
D:\cpp_test。新增程式碼檔案:在 VS Code 的檔案總管中,新增一個名為 main.cpp 的檔案,並貼上以下程式碼:
```cpp
#include
#include
using namespace std;
int main() {
vector
for (const string& word : msg) {
cout << word << " ";
}
cout << endl;
return 0;
}
```
步驟四:一鍵編譯與偵錯 (推薦的快速方法)
VS Code 提供了極為便利的自動化設定功能,讓您無需手動撰寫複雜的 JSON 設定檔。
main.cpp 中,點擊 cout << word << " "; 這一行程式碼最左邊的行號處,會出現一個紅點,這就是中斷點。F5 鍵。g++.exe build and debug active file (它應該會自動偵測到您安裝的 g++)。.vscode 資料夾,並在其中生成 tasks.json (告訴 VS Code 如何編譯程式) 和 launch.json (告訴 VS Code 如何啟動偵錯器) 兩個檔案。從現在起,只要您在這個專案中按下 F5,VS Code 就會自動完成「編譯 -> 執行 -> 偵錯」的完整流程。
步驟五:(選用) 使用 Code Runner 快速執行
如果您只是想快速執行程式並看到結果,而不需要偵錯功能,可以安裝 Code Runner 擴充功能。安裝後,在編輯器右上角會出現一個播放按鈕 (Run Code),點擊即可快速在終端機中編譯並執行您的程式碼。
步驟六:常見問題
F5 後出現錯誤,提示「g++: command not found」或類似訊息。C:\msys64\ucrt64\bin 是否已確實加入到 Windows 的系統 Path 中,並確保您是在新的終端機中執行 g++ --version 來驗證。