Ubuntu 本地端部屬gemini 3
可以看到ubuntu 預設的node.js version是18
root@suiseiserver:/var/www/order-sys$ node.js
Command 'node.js' not found, did you mean:
command 'nodejs' from deb nodejs (18.13.0+dfsg1-1ubuntu2)
Try: sudo apt install <deb name>
1. 環境準備 (Environment Setup)
為了管理不同版本的 Node.js,我們使用了 NVM (Node Version Manager) 進行安裝。
-
安裝 NVM & Node.js:
# 安裝 NVM curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 安裝最新的 LTS 版本 Node.js (本例使用 v24.12.0) nvm install --lts
2. 專案初始化 (Project Initialization)
在 /var/www/ 下建立專屬目錄,避免與網頁程式碼(如 order-sys)混淆。
-
建立目錄與安裝 SDK:
mkdir -p /var/www/gemini cd /var/www/gemini npm install @google/generative-ai
3. 核心程式碼實作 (Implementation)
我們建立了兩個檔案:index.js (測試用) 與 cli.js (互動介面)。
互動式腳本:cli.js
這個腳本實現了「持續對話」與「串流輸出 (Streaming)」功能。
JavaScript
#!/usr/bin/env node
// 位於 /var/www/gemini/cli.js
const { GoogleGenerativeAI } = require("@google/generative-ai");
const readline = require("readline");
// 敏感資訊隱藏:建議使用環境變數或在此處替換為你的 Key
const API_KEY = "AIzaSy...[HIDDEN]";
const genAI = new GoogleGenerativeAI(API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-3-flash-preview" });
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: "\x1b[32m您 > \x1b[0m"
});
const chat = model.startChat({ history: [] });
console.log("\x1b[36m=== Gemini 終端機對話模式 (輸入 'exit' 退出) ===\x1b[0m");
rl.prompt();
rl.on("line", async (line) => {
if (line.trim().toLowerCase() === "exit") process.exit(0);
try {
process.stdout.write("\x1b[33mGemini > \x1b[0m");
const result = await model.generateContentStream(line);
for await (const chunk of result.stream) {
process.stdout.write(chunk.text());
}
process.stdout.write("\n\n");
} catch (err) {
console.error("發生錯誤:", err.message);
}
rl.prompt();
});
4. 系統整合 (System Integration)
為了讓 gemini 成為全局指令,我們設定了執行權限與 Bash 別名。
-
賦予執行權限:
chmod +x /var/www/gemini/cli.js -
設定 Alias: 在
~/.bashrc加入alias gemini='node /var/www/gemini/cli.js' -
生效:
source ~/.bashrc
💡 經驗總結
-
API Key 錯誤: 遇到
400 Bad Request (API_KEY_INVALID)時,應檢查 Key 是否包含空格或是否已從 Google AI Studio 正確複製。 -
目錄權限: 在
/var/www下操作時,需注意檔案擁有者,確保執行時具備讀取node_modules的權限。 -
模型選擇: 選擇
gemini-3-flash-preview能在免費層級下獲得最快的響應速度。
Visit the link for more information:
References