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

    promptfoo 使用教程:对比提示词和模型、写断言自动评测(安装与配置)

    promptfoo 是什么、怎么使用?按官方 README 和入门文档讲清它的用途、三种安装方式、用示例项目起步、promptfooconfig.yaml 里提示词、模型和测试用例三部分怎么写、常用断言类型的含义、eval 与 view 两条命令,以及把它放进日常改提示词流程的方法。

    ChatGPT其他 AI 工具0
  2. 02

    Kimi API怎么用:API Key获取、Python调用、K3价格与429报错处理

    Kimi API Key 在哪里获取、怎么用 Python 调用 K3、价格怎么算、429 和 401 报错怎么办?本文按 Kimi API 开放平台官方文档讲清注册认证、创建 Key、base_url 与模型名、计费规则和常见错误排查。

    Kimi0
  3. 03

    Cursor Agent 模式怎么用:Agent、Plan、Ask 三种模式,检查点回滚与消息排队

    Cursor Agent 模式是什么、和 Plan / Ask 模式怎么选?按官方文档讲清 Agent 能调用哪些工具、Shift+Tab 切换模式、Plan 模式先出方案再动手、用检查点撤销改动、任务进行中排队或插话,以及 /goal 长目标。

    Cursor0
  4. 04

    Gemini 聊天记录怎么导出:导出到文档 / 表格、生成 PDF 与用 Takeout 批量导出完整对话

    Gemini 没有「一键导出全部对话」的按钮,但有三条官方路径:单条回答导出到 Google 文档、Gmail、表格;让 Gemini 直接生成 PDF、Word、Markdown 文件;用 Google Takeout 批量下载全部活动记录。本文给出每种方法的步骤和限制。

    Gemini0
  5. 05

    ChatGPT 生成图片中文乱码、文字错误怎么办:7 个按顺序试的办法

    让 ChatGPT 做海报、封面、信息图,中文总是缺笔画、错字、乱码?本文按 OpenAI 官方图像提示指南,给出从写法、字数、局部修改、质量档位到后期排版的 7 个办法,以及什么时候干脆别让 AI 写字。

    ChatGPT0
  6. 06

    OpenCode Skills 使用指南:技能目录、命名规则、权限配置与不加载排查

    OpenCode 的 Skills 放在哪个目录、怎么控制哪些技能能用?按 OpenCode 官方文档讲清六个扫描位置、name 的正则规则、skill 工具的工作方式、在 opencode.json 里用 allow / deny / ask 配置权限、按智能体覆盖,以及技能不出现时的五项检查。

    其他 AI 工具0

同模型

  1. 01

    Google AI Studio 系统指令怎么写:System instructions 与运行设置(思考等级、温度、联网搜索)

    系统指令决定模型的身份和输出规则。本文按官方文档讲清 AI Studio 里系统指令在哪填、怎么写、怎么保存复用,以及思考等级、温度(新模型已弃用)、联网搜索等工具的作用与限制。

    Gemini0
  2. 02

    Gemini 结构化输出(Structured Output)怎么用:JSON Schema、Pydantic 与 Zod 示例

    想让 Gemini API 稳定返回可解析的 JSON,就用结构化输出。本文给出 Pydantic 和 Zod 的官方写法、枚举与可空字段、流式、和工具组合、支持的 Schema 范围与限制,以及新旧接口的参数差别。

    Gemini0
  3. 03

    Gemini API 接口地址(Base URL)是什么:原生端点与 OpenAI 兼容调用写法

    Gemini API 域名是 generativelanguage.googleapis.com。本文列出原生与 OpenAI 兼容端点的地址和鉴权方式、v1 与 v1beta 的区别,和用 OpenAI SDK 调 Gemini 的写法。

    Gemini0
  4. 04

    Gemini 怎么看额度:用量限制在哪查、多久重置、额度变少怎么办

    Gemini 的额度不是按条数算的,而是按计算量:每 5 小时刷新、另有每周上限。本文讲在哪里查看用量、各档会员的额度倍数、哪些操作最费额度、额度用完后会怎样,以及官方认可的省额度方法。

    Gemini0
  5. 05

    Gemini Canvas 怎么用:写文档、生成网页和小应用、导出与分享全流程

    Gemini Canvas 是对话旁边的一块可编辑工作区:在里面写文档、做幻灯片、生成能直接运行的网页和小应用。本文按官方帮助中心讲入口、文档的局部修改与格式工具、应用的预览 / 代码 / 控制台、把文档变成测验 / 信息图 / 网页,以及导出和分享的方法与限制。

    Gemini0
  6. 06

    NotebookLM PPT 可编辑吗:演示文稿的生成、修改、下载 PPTX 与信息图

    NotebookLM(现名 Gemini Notebook)生成的 PPT 能改吗、怎么下载?本文按官方帮助讲清演示文稿的两种格式、用「修改(Revise)」逐页改稿、删页和调整顺序、下载 PDF 或 PPTX,以及信息图的风格和下载。

    Gemini0

同产品的其他教程

  1. 01

    提示词链(Prompt Chaining)怎么用:把复杂任务拆成几步,前一步的输出交给后一步

    提示词链是什么、什么时候该把大提示词拆开?本文按 Anthropic 和 Google 官方文档讲清拆指令、串成链、分块聚合三种拆法,最常用的「起草 → 审查 → 修改」链,以及哪些情况不必拆。

    ClaudeGemini0
  2. 02

    Nano Banana 提示词怎么写:官方提示词指南要点与 7 个生成模板

    Nano Banana(Gemini 生图)的提示词怎么写效果最好?本文把 Google 官方提示词指南提炼成 6 条原则和写实照片、贴纸、带文字设计、商品图、留白背景、漫画分镜、搜索增强 7 个可复制模板,并给出改图句式。

    Gemini0
  3. 03

    Gemini 音乐生成怎么用:用 Lyria 写歌作曲、歌曲长度、下载 MP3 与水印说明

    Gemini 里可以直接用 Lyria 模型生成带人声和歌词的完整歌曲。本文按官方帮助中心讲入口、使用条件、短曲与完整曲目的长度、人声 / 纯音乐与曲风选项、提示词五要素、下载 MP3 / MP4 和分享、SynthID 水印,以及次数限制该怎么看。

    Gemini0
  4. 04

    Veo 3.1 提示词怎么写:主体、动作、镜头、声音与对白的官方写法

    Veo 3.1 和 Gemini Omni 的视频提示词怎么写才稳?本文按 Google 官方视频提示指南和最佳实践,拆解提示词的 7 个组成部分,讲清音效与对白写法、负面提示、图生视频和多镜头角色一致的技巧,附可复制模板。

    Gemini0
  5. 05

    NotebookLM 怎么用:改名 Gemini Notebook 后的入口、三栏界面与基本流程

    NotebookLM 是什么、怎么用?2026 年 7 月它已改名 Gemini Notebook。本文按官方帮助中心讲清改名后哪些变了、使用条件、「来源 → 对话 → Studio」三步流程,以及回答不出来时的官方原因。

    Gemini0
  6. 06

    Gemini 隐私设置:怎么关闭模型训练、活动记录保留多久、人工审核怎么回事

    Gemini 的隐私核心是「保留活动记录(Keep Activity)」这一个开关:开着,对话会保存并可能用于训练和人工审核;关掉,对话只留 72 小时且不用于训练。本文讲开关位置、自动删除期限、音频与 Live 录制的单独选项,以及关掉后会失去哪些功能。

    Gemini0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~