Gemini 4 Carbon如何用JavaScript进行长输出并读取完整文本
使用background、max_output_tokens与交互状态轮询,拼接model_output步骤文本,区分同步64K上限、统一窗口和思考预算。
Gemini 4 Carbon如何用JavaScript进行长输出并读取完整文本?对于超过普通同步65,536 Token上限的任务,使用Interactions API的background模式,设置更高的max_output_tokens,轮询交互状态,并在结束后拼接各个model_output步骤的文本。只设置background但不提高预算,仍会在64K停止;只提高预算而不理解思考与输出共享额度,也不能保证最终可见文本达到指定长度。

准备服务端Node.js环境
以下使用Node.js 22或更新版本与Google官方JavaScript SDK,代码在服务端执行,不把API密钥交给浏览器页面。需要具备Gemini API付费层访问的项目,模型ID为gemini-4-carbon。先在项目环境安装依赖:
npm install @google/genai
再在macOS、Linux或兼容Shell的当前终端设置密钥变量,替换YOUR_API_KEY:
export GEMINI_API_KEY="YOUR_API_KEY"
安装SDK只准备代码依赖,设置变量只提供认证材料;二者不会自动开通付费项目,也不会把Google AI Ultra应用订阅转换成API权限。真实密钥应保留在服务端运行环境中。
用后台交互让服务器执行长输出续接
将下面完整内容保存为carbon_long.mjs。示例采用262,144 Token上限与high思考级别,属于较大的任务预算;执行会发起真实付费模型调用,应根据实际任务决定是否需要该规模。
import { GoogleGenAI } from "@google/genai";
const apiKey = process.env.GEMINI_API_KEY;
if (!apiKey) {
throw new Error("请设置GEMINI_API_KEY环境变量。");
}
const client = new GoogleGenAI({ apiKey });
let interaction = await client.interactions.create({
model: "gemini-4-carbon",
input: "编写一个数据库事务与重试设计手册,解释幂等性、锁、超时和恢复,并给出各自适用边界。",
background: true,
generation_config: {
max_output_tokens: 262144,
thinking_level: "high",
},
});
while (interaction.status === "in_progress" || interaction.status === "queued") {
await new Promise((resolve) => setTimeout(resolve, 5000));
interaction = await client.interactions.get(interaction.id);
}
const text = interaction.steps
.filter((step) => step.type === "model_output")
.flatMap((step) => step.content ?? [])
.filter((content) => content.type === "text")
.map((content) => content.text)
.join("");
console.log(text);
console.log("Status:", interaction.status);
console.log("Usage:", interaction.usage);
在设置变量的同一终端执行:
node carbon_long.mjs
代码会保存首次返回的交互ID,在queued或in_progress期间每5秒查询该交互,结束后拼接文本并打印状态与用量。没有固定的输出字数或完成耗时保证;终止状态也需要实际查看,不能因为轮询循环结束就断定业务结果已经满足要求。
为什么要拼接model_output步骤
后台长输出由服务器按64K续接段继续生成,每一段会在interaction.steps中增加model_output步骤。对于这种结果,只读取某一个步骤可能遗漏其他段,因此示例按步骤筛选、提取文本内容并拼接。这里处理的是文本结果,不把工具调用或其他类型内容混进最终文字。
服务端续接与客户端轮询承担不同职责:续接推进生成,轮询取得同一交互的新状态。轮询不是再次create新任务,也不应因一次查询较慢就提交另一个相同长任务。需要更细致的重试、退避或不存储交互等控制时,属于另外的客户端续接设计。
预算上限包含思考,统一窗口还要容纳输入
Carbon的输入、思考与输出共享1,048,576 Token窗口。普通同步响应最多65,536 Token,长输出上限还要扣除输入占用。示例262,144并不是保留这么多可见答案字数,也不是要求模型必须把预算全部用尽。
max_output_tokens限制思考与输出合计。困难任务可能把更大比例用于分析、探索和验证;high通常使用更多Token、首个结果也更慢。low、medium与high各有适用任务,默认medium不意味着能力缺失。仅缩小预算,可能让任务在思考后留给答案的空间不足。
长输出适合任务需要,不等于输出越长越好

Carbon面向复杂软件工程、科学推理和多步骤知识任务。一个长任务是否值得使用后台执行,应以需要的完整内容和验收条件判断。最终文本仍需要检查结构、事实、代码和边界,不应把长输出能力当成正确性保证。
截至2026年11月30日,API首发价为每百万输入Token 2美元、输出Token 10美元,之后为4美元与20美元。长任务的思考与输出用量可能显著高于简短问答,因此应结合实际usage、延迟和优惠到期后的价格评估。应用端分批开放与Fairwind网络安全申请各有条件,不能代替这里的付费API项目资格。
js字符串转数组哪种方法最推荐
2026-11-13 19:59:01
vue字符串怎么转数组v-for渲染
2026-11-13 19:25:47
useEffect依赖数组漏写会有什么后果?怎么用ESLint拦住?
2026-11-13 19:12:59
js字符串转数组URL编码decodeURIComponent
2026-11-13 17:51:20
js字符串转数组中文每个字单独成元素
2026-11-13 15:32:42
