Writer API

Alexandra Klepper
Alexandra Klepper
Thomas Steiner
Thomas Steiner

发布时间:2025 年 5 月 20 日

说明类视频 Web 扩展程序 Chrome 状态 意向
GitHub 源试用 源试用 源试用 源试用 视图 实验意向

Writer API 可帮助您创建符合指定写作任务的新内容。Writer API 和 Rewriter APIWriting Assistance API 提案的一部分。

这些合作伙伴 API 可帮助您改进用户创建的内容。

使用场景

根据您的初始想法和可选背景信息撰写新内容。这可用于:

  • 帮助用户撰写任何类型的内容,例如评价、博文或电子邮件。
  • 帮助用户撰写更好的支持请求。
  • 为一系列工作样本撰写简介,以便更好地展示特定技能。

您的使用场景是否未列出?加入抢先试用计划,分享您的反馈。

开始使用

加入 Writer API 源试用,该试用在 Chrome 137 至 142 中进行。

查看硬件要求

开发者和在 Chrome 中使用这些 API 运行功能的用户必须满足以下要求。其他浏览器可能有不同的运行要求。

语言检测器和翻译器 API 可在桌面版 Chrome 中使用。这些 API 不适用于移动设备。当满足以下条件时,Prompt API、Summarizer API、Writer API 和 Rewriter API 可在 Chrome 中正常运行:

  • 操作系统:Windows 10 或 11;macOS 13 及更高版本(Ventura 及更高版本);或 Linux。使用 Gemini Nano 的 API 尚不支持 Android 版 Chrome、iOS 版 Chrome 和 ChromeOS 版 Chrome。
  • 存储空间:包含 Chrome 个人资料的卷上至少有 22 GB 的可用空间。
  • GPU:VRAM 严格大于 4 GB。
  • 网络:无限流量或不按流量计费的网络连接。

Gemini Nano 的确切大小可能会略有不同。如需了解当前大小,请访问 chrome://on-device-internals 并前往模型状态。 打开列出的文件路径,以确定模型大小。

报名参加源试用

Writer API 与 Rewriter API 一起提供源试用。如需开始使用这些 API,请执行以下操作:

  1. 确认《Google 生成式 AI 使用限制政策》
  2. 前往 Writer API 来源试用
  3. 点击注册,然后填写表单。在“Web 来源”字段中,提供您的来源或扩展程序 ID chrome-extension://YOUR_EXTENSION_ID
  4. 如需提交,请点击注册
  5. 复制提供的令牌,并将其添加到来源中的每个参与网页,或将其包含在扩展程序清单中。
  6. 开始使用 Writer 和 Rewriter API。

详细了解如何开始使用源试用

添加对 localhost 的支持

如需在源试用期间访问 localhost 上的 Writer 和 Rewriter API,您必须将 Chrome更新到最新版本。然后,请按下列步骤操作:

  1. 前往chrome://flags/#writer-api-for-gemini-nano
  2. 选择已启用
  3. 点击重新启动或重启 Chrome。

使用 Writer API

首先,运行功能检测,看看浏览器是否支持这些 API。

if ('Writer' in self) {
  // The Writer API is supported.
}

Writer API 和所有其他内置 AI API 都已集成到浏览器中。首次有任何网站使用内置 AI API 时,系统会单独下载 Gemini Nano。实际上,如果用户已与内置 API 互动,则已将模型下载到浏览器。

如需确定模型是否已准备就绪,请调用异步 Writer.availability() 函数。它会返回一个字符串,该字符串可以采用以下四种可能的值:

  • unavailable:浏览器支持 Writer API,但目前无法使用。这可能是由多种原因造成的,例如没有足够的可用磁盘空间来下载模型。
  • available:浏览器支持 Writer API,可立即使用。
  • downloadable:浏览器支持 Writer API,但需要先下载模型。
  • downloading:浏览器支持 Writer API,并且目前正在下载模型。

如需触发模型下载并启动写入器,请调用 Writer.create() 函数。如果对 availability() 的响应为 downloadable,请监听下载进度并告知用户,因为下载可能需要一些时间。

const writer = await Writer.create({
  monitor(m) {
    m.addEventListener("downloadprogress", e => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

API 功能

借助 create() 函数,您可以配置新的写入器对象。它采用一个可选的 options 对象,该对象包含以下参数:

  • tone写作语气是指内容的风格、特征或态度。该值可以设置为 formalneutral(默认值)或 casual
  • format:输出格式,允许的值为 markdown(默认值)和 plain-text
  • length:输出的长度,允许的值为 shortmedium(默认值)和 long
  • sharedContext:在生成多个输出时,共享上下文有助于模型生成更符合您期望的内容。

以下示例展示了如何初始化 writer 对象:

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'casual',
  format: 'plain-text',
  length: 'medium',
};

const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
  // The Writer API isn't usable.
  return;
}
if (available === 'available') {
  // The Writer API can be used immediately .
  writer = await Writer.create(options);
} else {
  // The Writer can be used after the model is downloaded.
  const writer = await Writer.create({
    ...options,
    monitor(m) {
      m.addEventListener("downloadprogress", e => {
        console.log(`Downloaded ${e.loaded * 100}%`);
      });
    }
  });
}

开始撰写

模型输出写作内容的方式有两种:非流式和流式。

非流式传输输出

在非流式写入模式下,模型会整体处理输入内容,然后生成输出内容。

如需获取非流式输出,请调用异步 write() 函数。您必须提供提示,说明您要撰写的内容。您可以添加可选的 context 来为模型提供背景信息,这有助于模型更好地满足您对输出的期望。

// Non-streaming
const writer = await Writer.create();
const result = await writer.write(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);

流式写入输出

流式传输可实时提供结果。随着输入内容的添加和调整,输出内容会不断更新。

如需获取流式写入器,请调用 writeStreaming() 函数,并遍历流中可用的文本段。您可以添加可选的 context 来为模型提供背景信息,这有助于模型更好地满足您对输出的期望。

// Streaming
const writer = await Writer.create();
const stream = writer.writeStreaming(
  "An inquiry to my bank about how to enable wire transfers on my account.", {
    context: "I'm a longstanding customer",
  },
);
for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

为多个任务共享上下文

您可能需要使用 writer 生成多条内容。在这种情况下,添加 sharedContext 会很有用。例如,您可能希望帮助审核者在评论中提供更出色的反馈。

// Shared context and per writing task context
const writer = await Writer.create({
sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = writer.writeStreaming(
  "Write a blog post about how I love all this work on gen AI at Google!" +
  "Mention that there's so much to learn and so many new things I can do!",
  { context: " The request comes from someone working at a startup providing an e-commerce CMS solution."}
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

重复使用写入器

您可以使用同一撰稿人来创作多篇内容。

// Reuse a writer
const writer = await Writer.create({ tone: "formal" });

const reviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => writer.write(reviewEl.textContent)
  ),
);

停止 writer

如需结束写入过程,请中止控制器并销毁写入器。

// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });

// Destroying a writer
writer.destroy();

演示

互动和分享反馈

Writer 和 Rewriter API 正在积极讨论中,未来可能会发生变化。如果您试用了此 API 并有反馈意见,欢迎随时告诉我们。

探索浏览器中所有使用模型的内置 AI API,包括 Gemini Nano 和其他专家模型。