Gemini API Node.js / JavaScript 調用教學:@google/genai 安裝、流式輸出與函數調用

用官方 @google/genai SDK 在 Node.js 裏調 Gemini API:安裝配置、第一個請求、流式輸出、多輪對話、傳圖片和函數調用的完整循環,並說明為什麼密鑰不能寫進瀏覽器前端。

NNathaniel bigo··原創首發·AI 輔助撰寫
9 分鐘讀完
資料核對於 2026-10-10 · 依據官方文檔與公開資料整理 其他 帳號
本文根據 Gemini API 官方文檔(Quickstart、Text generation、Interactions API、Using Gemini API keys、Files API)和官方 SDK 倉庫 googleapis/js-genai 整理,資料核對於 2026-10-10。示例代碼基於官方示例改寫並加了中文註釋。

適用於誰

  • 用 Node.js 或 TypeScript 寫後端、腳本,想接入 Gemini 的開發者;
  • 搜「gemini api nodejs」「gemini api javascript」「@google/genai」的人;
  • 想在網頁裏直接調 Gemini,但不確定密鑰該放哪裏的前端開發者。

Python 版見本站《Gemini API Python 調用教學:安裝 google-genai SDK、流式輸出、多輪對話與傳圖片》,兩篇的概念一致,這裏側重 JavaScript 的寫法和函數調用。

結論先說

  1. 官方 SDK 的包名是 @google/genai:npm install @google/genai。舊版 SDK @google/generative-ai 官方已標註為不再積極維護,並提供了遷移指南。
  2. 入口是 GoogleGenAI 類:const ai = new GoogleGenAI({}),然後調用 ai.interactions.create({ model, input }),文本結果在 interaction.output_text。
  3. 參數名用下劃線:Interactions API 的字段在 JavaScript 裏也是 previous_interaction_id、system_instruction、generation_config 這種寫法。
  4. 生產環境不要把密鑰放進瀏覽器:官方明確提示寫在客戶端代碼裏的密鑰可以被提取,要在自己的伺服器上調用。
  5. 函數調用是一個循環:模型返回 function_call → 你執行函數 → 把結果作為 function_result 傳回去 → 直到模型不再要求調用。

一、安裝與配置

bash
mkdir gemini-node && cd gemini-node
npm init -y
npm pkg set type=module          # 用 ES 模組,才能寫 import 和頂層 await
npm install @google/genai

export GEMINI_API_KEY="你的API密鑰"   # Windows PowerShell: $env:GEMINI_API_KEY="你的API密鑰"
  • Node.js 版本:SDK 倉庫 README 要求 20 及以上,並預告 3.0.0 版起需要 22 及以上。
  • 官方說明 Interactions API 需要 @google/genai 2.3.0 及以上。
  • 密鑰的申請和環境變量設定見本站《Gemini API Key 怎麼獲取:在 AI Studio 創建密鑰、設定環境變量與安全限制》。

二、第一個請求

新建 index.js:

javascript
import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});   // 自動讀取環境變量裏的密鑰

const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  system_instruction: "你是一個簡潔的中文助手。",
  input: "用三句話解釋什麼是向量數據庫",
  generation_config: { thinking_level: "low" },   // 可選 low / medium / high
});

console.log(interaction.output_text);
console.log(interaction.usage);   // 輸入、輸出、思考 token 數

運行 node index.js。說明:

  • 需要顯式傳密鑰時寫 new GoogleGenAI({ apiKey: "你的API密鑰" }),官方建議只在沒法用環境變量時這樣做;
  • output_text 是便捷屬性,完整過程在 interaction.steps 數組裏;
  • temperature、top_p、top_k 在 Gemini 3.6 Flash、3.5 Flash-Lite 及之後的模型上已棄用並被忽略,不用再傳。

三、流式輸出

javascript
const stream = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: "寫一段 200 字左右的秋天散文",
  stream: true,
});

for await (const event of stream) {
  // 文本片段在 step.delta 事件裏
  if (event.event_type === "step.delta" && event.delta.type === "text") {
    process.stdout.write(event.delta.text);
  }
}

四、多輪對話

把上一輪的 id 傳給 previous_interaction_id,歷史由伺服器管理:

javascript
const first = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: "我家裏有 2 只狗。",
});

const second = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: "那我家一共有多少隻爪子?",
  previous_interaction_id: first.id,
});
console.log(second.output_text);
  • 伺服器只接續對話歷史,system_instruction、generation_config、tools 每一輪都要重新傳;
  • 交互記錄預設儲存在伺服器上,官方寫明免費層保留 1 天、付費層保留 55 天;
  • 不想儲存就傳 store: false,自己把完整歷史(含模型返回的全部步驟)放進 input,寫法見 Python 版教學裏的「無狀態」一節,結構完全相同。

五、傳圖片

javascript
const uploaded = await ai.files.upload({
  file: "photo.jpg",
  config: { mimeType: "image/jpeg" },
});

const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    { type: "text", text: "這張圖裏有什麼?用中文描述。" },
    { type: "image", uri: uploaded.uri, mime_type: uploaded.mimeType },
  ],
});
console.log(interaction.output_text);

小文件也可以用 fs.readFileSync("photo.jpg").toString("base64") 讀成 base64,寫成 { type: "image", data: 這段base64, mime_type: "image/jpeg" }。官方的界限:整個請求超過 100 MB(PDF 為 50 MB)必須走 Files API;上載的文件儲存 48 小時。

六、函數調用:讓模型用你的函數

函數調用(function calling)的流程是:你聲明函數的名字和參數,模型決定什麼時候調用並給出參數,你在本地執行後把結果傳回去。下面是官方快速開始裏的循環寫法:

javascript
import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

// 1. 聲明工具:名字、說明、參數(JSON Schema)
const weatherTool = {
  type: "function",
  name: "get_current_temperature",
  description: "查詢指定城市當前的氣溫。",
  parameters: {
    type: "object",
    properties: {
      location: { type: "string", description: "城市名,例如 北京" },
    },
    required: ["location"],
  },
};

// 2. 你自己的函數實現(這裏用假數據)
const availableFunctions = {
  get_current_temperature: ({ location }) => ({
    location, temperature: "22", unit: "celsius",
  }),
};

let input = "北京現在多少度?";
let previousId = null;
let interaction;

while (true) {
  interaction = await ai.interactions.create({
    model: "gemini-3.8-flash",
    input,
    tools: [weatherTool],                 // 每一輪都要帶上工具聲明
    previous_interaction_id: previousId,
  });

  // 3. 找出模型要求調用的函數,逐個執行
  const functionResults = [];
  for (const step of interaction.steps) {
    if (step.type === "function_call") {
      const result = availableFunctions[step.name](step.arguments);
      functionResults.push({
        type: "function_result",
        name: step.name,
        call_id: step.id,                 // 和這次調用的 id 對應
        result: [{ type: "text", text: JSON.stringify(result) }],
      });
    }
  }

  if (functionResults.length === 0) break;   // 模型不再調用函數,結束

  // 4. 把執行結果作為下一輪輸入傳回去
  input = functionResults;
  previousId = interaction.id;
}

console.log(interaction.output_text);

官方說明:模型要求調用函數時,這一輪返回的 status 是 requires_action;你提交結果後,才會得到 completed 的最終回答。Google 搜尋、代碼執行這類內置工具不需要這個循環,在 tools 裏寫 { type: "google_search" } 即可,由伺服器端執行。

七、為什麼不能在瀏覽器裏直接用密鑰

SDK 可以在瀏覽器裏初始化,但官方在 README 和 API key 頁都給了同樣的警告:

  • 編譯進網頁或手機應用的密鑰可以被用戶提取出來;
  • 正確做法是在自己的後端服務裏調用 Gemini API,前端只和自己的後端通信;
  • 在 AI Studio 的 Build 模式裏生成的應用,官方說明密鑰會自動配置成伺服器端的密文(Secret),不會出現在客戶端代碼裏。

常見問題

Q:報 Cannot use import statement outside a module?

package.json 裏沒有 "type": "module"。按第一節執行 npm pkg set type=module,或把文件擴展名改成 .mjs。

Q:要用 TypeScript 怎麼辦?

包名和導入寫法相同。官方對這個 SDK 的正式稱呼就是「Google Gen AI SDK for TypeScript and JavaScript」,兩種語言共用一個包。

Q:舊代碼裏的 ai.models.generateContent 還能用嗎?

能。官方把 generateContent 稱為 legacy 接口但仍完全支持,寫法是 await ai.models.generateContent({ model, contents }),結果在 response.text;多輪對話用 ai.chats.create({ model })。新項目官方建議用 Interactions API。

Q:調用報錯怎麼排查?

先用 try { ... } catch (e) { console.error(e) } 把完整錯誤打印出來,看 HTTP 狀態碼。429 是觸發速率限制,見本站《Gemini API 429 錯誤怎麼解決:RESOURCE_EXHAUSTED 的原因與 400 / 403 / 503 排查表》。

Q:想讓輸出一定是 JSON?

用結構化輸出,配合 Zod 校驗,見本站《Gemini 結構化輸出(Structured Output)怎麼用:JSON Schema、Pydantic 與 Zod 示例》。

參考資料

  • Gemini API quickstart(官方):https://ai.google.dev/gemini-api/docs/quickstart
  • Gemini API quickstart(generateContent 版,官方):https://ai.google.dev/gemini-api/docs/generate-content/quickstart
  • Text generation(官方):https://ai.google.dev/gemini-api/docs/text-generation
  • Interactions API(官方):https://ai.google.dev/gemini-api/docs/interactions-overview
  • Gemini API libraries(官方):https://ai.google.dev/gemini-api/docs/libraries
  • Migrate to the Google GenAI SDK(官方):https://ai.google.dev/gemini-api/docs/migrate
  • Using Gemini API keys(官方):https://ai.google.dev/gemini-api/docs/api-key
  • Files API(官方):https://ai.google.dev/gemini-api/docs/files
  • Models(官方):https://ai.google.dev/gemini-api/docs/models
  • googleapis/js-genai(官方 SDK 倉庫):https://github.com/googleapis/js-genai
需要開通或續費?谷歌帳號 →

Nathaniel 的更多內容

  1. 01

    AI 學習路線:零基礎從哪開始,6 個階段、每階段該讀哪幾篇教學(2026)

    AI 學習路線怎麼走?給零基礎的人一條循序漸進的路徑:先選一個助手用順,再學提問,再用進日常工作,按需學做圖做影片,守住私隱與版權,最後進階自動化和編程。每個階段都配了本站對應的教學。

    其他 AI 工具0
  2. 02

    AI 瀏覽器有哪些:Perplexity Comet、Opera Neon、Dia、Brave Leo 與 Edge Copilot 的官方說法對照

    AI 瀏覽器有哪些?按官方頁面整理 Perplexity Comet、Opera Neon、Dia、Brave Leo 和 Edge 裏的 Copilot:官方自述的定位、支持的平台、免費還是訂閱,以及 Gemini、Claude 的 Chrome 方案和已停用的 ChatGPT Atlas。

    其他 AI 工具0
  3. 03

    即夢國際版 Dreamina 是什麼:官方站入口、能生成什麼、免費積分和模型(2026)

    即夢國際版 Dreamina 是什麼?官方站是 dreamina.capcut.com,是一個圖片、影片和數字人一體的 AI 創作平台。按官方首頁和 FAQ 講:能生成什麼、免費用戶每天 120 積分、列出的 Seedance 與 Seedream 模型,以及和國內即夢怎麼區分。

    其他 AI 工具0
  4. 04

    Kimi K3 Coding Plan 是什麼、怎麼用:Kimi Code 會員、模型 ID、套餐價格和額度規則

    Kimi K3 Coding Plan 是什麼?按 Kimi 官方文檔核對:官方現在叫 Kimi Code,是 Kimi 會員權益裏的編程服務,Plus 及以上才有;講 K3 等模型 ID、國內新套餐價格、三種客戶端、第三方工具接入和額度規則。

    Kimi0
  5. 05

    DeepSeek V4 Pro 和 Flash 的區別與 API 價格:官方價格頁逐項對照(高峰與空閒時段)

    DeepSeek V4 Pro 和 Flash 有什麼區別、API 怎麼收費?按 DeepSeek 官方價格頁(2026-10-19 查詢)列出兩個模型的版本、上下文、圖像理解、並發和每百萬 token 價格,說明高峰與空閒時段的計費差別和舊模型名怎麼處理。

    其他 AI 工具0
  6. 06

    GPT-6 Pro(Astra)怎麼用、哪些套餐有:怎麼選到 Pro 檔、用量限制和 Pro 三檔價格

    GPT-6 Pro(Astra)怎麼用、哪些套餐有?按 OpenAI 幫助中心核對:聊天裏 Pro 檔給 Pro 100、Pro 200、Business 和 Enterprise;Plus 在 Work 和 Codex 裏含 Astra。講怎麼選到、用量上限和官方 Pro 價格。

    ChatGPT0

同模型

  1. 01

    Nano Banana 官網入口在哪、免費能用嗎:Google 官方入口、Nano Banana 2 與 2.1 的免費和付費區別

    Nano Banana 官網地址是什麼、免費能用多少?Nano Banana 是 Google Gemini 的圖像模型,官方入口是 gemini.google.com 和官方介紹頁。按官方頁面核對:免費版用 Nano Banana 2,2.1 需要 Google AI 套餐,API 沒有免費層。

    Gemini0
  2. 02

    Gemini 3.5 Pro 是什麼、發佈了嗎、怎麼用:官方說法梳理,以及現在 Gemini 裏該選哪個模型

    Gemini 3.5 Pro 發佈了嗎?按 Google 官方網誌、Gemini 更新記錄和 API 模型列表核對:截至 2026-10-19 官方沒有宣佈 3.5 Pro 已發佈,最新的是 Gemini 4 Argon。講清官方說過什麼,以及 Gemini 應用裏各套餐現在能選哪些模型。

    Gemini0
  3. 03

    Gemini 打不開、無法登入、無法使用怎麼辦:帳號類型、年齡、瀏覽器和官方兩條登入提示

    Gemini 怎麼打不開?無法登入、無法使用怎麼辦?按官方「Sign in to Gemini Apps」頁排查:帳號類型、年齡、支持的瀏覽器、國家和語言名單,以及「Can't access this service」「Something went wrong」兩條提示的官方解釋。

    Gemini0
  4. 04

    Gemini 無法生成圖片怎麼辦:入口、年齡與地區、提示詞、模型和額度逐項排查

    Gemini 無法生成圖片怎麼辦?按官方幫助中心逐項排查:有沒有登入、年齡和地區是否滿足、生圖入口在哪、提示詞怎麼寫才會出圖、Flash-Lite 的 Nano Banana 2 Lite 有什麼限制、圖片被移除和額度用完時怎麼辦。

    Gemini0
  5. 05

    Gemini 分享對話怎麼操作:生成公開連結、對方能看到什麼、怎麼刪除分享連結

    Gemini 的「分享對話」會生成一個任何人都能打開的公開連結。本文按官方幫助中心講清:分享步驟、連結裏包含哪些內容(整段對話、上載的圖片、Canvas 作品)、別人能做什麼、連結什麼時候會自動失效、怎麼查看和刪除自己所有的公開連結。

    Gemini0
  6. 06

    Gemini API Python 調用教學:安裝 google-genai SDK、流式輸出、多輪對話與傳圖片

    用官方 google-genai SDK 調 Gemini API:安裝配置、第一個請求、系統指令與思考等級、流式輸出、多輪對話、傳圖片和查看 token 用量,按 2026 年 10 月官方預設的 Interactions API 寫法。

    Gemini0

同產品的其他教學

  1. 01

    AI圖片放大與高清修復:Midjourney、ChatGPT、Gemini 怎麼出高解像度圖

    AI 生成的圖不夠清晰,想打印或做大圖怎麼辦?本文按官方文檔講清 Midjourney 的 Subtle / Creative 放大和 HD 直出、Gemini 與 ChatGPT 的解像度選項、Flow 的影片放大,以及「AI 放大會編造細節」的注意事項。

    Gemini其他 AI 工具0
  2. 02

    AI影片運鏡提示詞大全:推拉搖移跟升降、環繞、甩鏡怎麼寫(中英對照)

    AI 影片的運鏡提示詞怎麼寫?本文按 Google 官方影片提示指南整理鏡頭運動、機位角度、鏡頭光學效果三張中英對照表,每個術語配效果說明和例句,並給出組合運鏡的寫法和常見翻車原因,適用於 Veo、即夢、可靈等工具。

    Gemini其他 AI 工具0
  3. 03

    Gemini API Key 怎麼獲取:在 AI Studio 創建密鑰、設定環境變量與安全限制

    調用 Gemini API 先要在 Google AI Studio 創建 API Key。本文講清創建入口、密鑰與項目的關係、2026 年新的授權密鑰規則、環境變量怎麼設、怎麼測試,以及密鑰被封或泄露後的處理。

    Gemini0
  4. 04

    NotebookLM 學習卡是什麼:抽認卡(閃卡)與測驗的生成、複習和下載

    NotebookLM(現名 Gemini Notebook)的學習卡是什麼、怎麼用?本文按官方幫助講清抽認卡和測驗的生成步驟、難度與數量設定、「答對了 / 沒答對」進度記錄、只練錯題、下載 CSV,以及手機上怎麼刷卡。

    Gemini0
  5. 05

    ChatGPT 和 Gemini 哪個好用:按官方頁面對比套餐、額度、上下文和功能,怎麼選

    ChatGPT 和 Gemini 哪個好用?本文只整理兩家官方頁面能查到的差異:套餐名稱、免費版額度、付費檔用量倍數、額度多久刷新、上下文窗口數字,以及各自的特色功能入口。不給「誰更強」的結論,文末附一份用自己任務測試的清單。

    ChatGPTGemini0
  6. 06

    Gemini 臨時對話怎麼用:能儲存嗎、關掉後能找回嗎、數據保留多久

    Gemini 的臨時對話不進聊天記錄、不用於訓練模型,但離開後就再也打不開。本文按官方幫助中心講:怎麼開啟、誰能用、臨時對話裏不能做什麼、想儲存內容該怎麼辦、Google 實際保留 72 小時是怎麼回事,以及它和關閉活動記錄的區別。

    Gemini0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~