使用编写辅助 API 汇总、编写和重写文本

编写辅助 API 是实验性 Web API,允许你使用小型语言模型 (SLM) (内置于 Microsoft Edge)从网站或浏览器扩展的 JavaScript 代码中汇总、编写和重写文本

有关摘要生成器 API、编写器 API 和重写器 API 的介绍性信息,请参阅 编写协助 API 解释器

详细内容:

编写帮助 API 的可用性

从版本 138.0.3309.2 开始,Microsoft Edge Canary 或开发频道中提供了摘要生成器、编写器和重写器 API 作为开发人员预览版。

编写协助 API 针对特定于生成、修改和汇总文本内容的任务进行优化。 若要详细了解这些 API 可能无法提供的更多自定义提示工程方案的替代方法,请参阅 使用提示 API 提示内置语言模型

编写协助 API 的替代项和优点

若要在网站和浏览器扩展中利用 AI 功能,还可以使用以下方法:

编写帮助 API 使用小型语言模型 (SLM) ,该模型在模型输入和输出用于 (本地) 的同一设备上运行。 与基于云的解决方案相比,这具有以下优势:

  • 降低成本: 使用云 AI 服务不产生任何费用。

  • 网络独立性: 除了初始模型下载,提示模型时没有网络延迟,也可以在设备脱机时使用。

  • 改进的隐私: 模型的数据输入永远不会离开设备,也不会收集这些数据来训练 AI 模型。

编写协助 API 使用由 Microsoft Edge 提供并内置于浏览器中的模型,该模型与自定义本地解决方案(例如基于 WebGPU、WebNN 或 WebAssembly 的解决方案)具有其他优势:

  • 共享一次性成本: 首次调用 API 并在浏览器中运行的所有网站之间共享 API 时,将下载浏览器提供的模型,从而降低用户和开发人员的网络成本。

  • 简化 Web 开发人员的用法: 内置模型可以使用简单的 Web API 来运行,不需要 AI/ML 专业知识或使用第三方框架。

Phi-4-mini 模型

提示 API 允许提示 Phi-4-mini(一种功能强大的小型语言模型,适用于基于文本的任务),内置于 Microsoft Edge 中。 若要了解有关 Phi-4-mini 及其功能的详细信息,请参阅 microsoft/Phi-4-mini-指令中的模型卡。

免责声明

与其他语言模型一样,Phi 系列模型的行为方式可能不公平、不可靠或冒犯性。 若要详细了解模型的 AI 注意事项,请参阅 负责任的 AI 注意事项

硬件要求

提示 API 开发人员预览版适用于具有硬件功能的设备,这些设备可生成具有可预测的质量和延迟的 SLM 输出。

提示 API 当前仅限于:

  • 作系统:Windows 10 或 11 以及 macOS 13.3 或更高版本。

  • 存储: 包含 Edge 配置文件的卷上至少有 20 GB 可用。 如果可用存储空间低于 10 GB,则将删除该模型,以确保其他浏览器功能有足够的空间正常运行。

  • GPU: 5.5 GB 或更多 VRAM。

  • 网络: 无限制的数据计划或非计量连接。 如果使用按流量计费的连接,则不会下载模型。

若要检查设备是否支持编写协助 API 开发人员预览版,请参阅下面的启用编写协助 API 并检查设备性能类。

由于编写协助 API 的实验性,你可能会发现特定硬件配置存在问题。 如果发现特定硬件配置存在问题,请在 MSEdgeExplainers 存储库 中打开新问题 来提供反馈。

模型可用性

网站首次调用内置 AI API 时,需要初始下载模型。 创建新的摘要生成器、编写器或重写器 API 会话时,可以使用监视选项来监视模型下载。 若要了解详细信息,请参阅下面的 监视模型下载进度

启用编写协助 API

若要在 Microsoft Edge 中使用任何编写协助 API,请执行以下作:

  1. 请确保使用最新版本的 Microsoft Edge Canary 或 Dev (版本 138.0.3309.2 或更高版本) 。 请参阅 成为Microsoft Edge 预览体验成员

  2. 在 Microsoft Edge Canary 或 Dev 中,打开一个新选项卡或窗口,然后转到 edge://flags/

  3. 在页面顶部的搜索框中:

    • 若要启用摘要生成器 API,请输入 Phi mini 的摘要 API
    • 若要启用编写器 API,请输入 Phi mini 的编写器 API
    • 若要启用重写器 API,请输入 Phi mini 的重写器 API

    筛选页面以显示匹配标志。

  4. 为要启用的 API 选择标志旁边的“ 已启用 ”:

    浏览器的“标志”页

  5. (可选)若要在本地记录可能对调试问题有用的信息,还可以启用 “启用设备 AI 模型调试日志” 标志。

  6. Microsoft Edge Canary 或 Dev 重启。

  7. 若要检查设备是否满足编写辅助 API 开发人员预览版的硬件要求,请打开一个新选项卡,转到 edge://on-device-internals,然后检查设备性能类值。

    如果设备性能类为 “高 ”或“更高”,则设备上应支持“编写协助 API”。 如果继续发现问题,请 提交新问题

查看工作示例

若要查看编写帮助 API 的作,并查看使用这些 API 的现有代码,请执行以下作:

  1. 如上所述,启用编写帮助 API

  2. 在 Microsoft Edge Canary 或 Dev 浏览器中,打开选项卡或窗口并转到 内置 AI场

  3. 在左侧导航下:

    • 对于“摘要生成器 API”,请单击“ 摘要生成器”。
    • 对于编写器 API,请单击“ 编写器”。
    • 对于重写器 API,请单击“ 重写器”。
  4. 在顶部的信息横幅中,检查状态:它最初读取模型下载,请稍候

    显示模型下载进度的状态指示器

    下载模型后,信息横幅将读取 API 和模型就绪,指示可以使用 API 和模型:

    显示 API 和模型就绪状态的状态指示器

    如果模型下载未启动,请重启Microsoft Edge,然后重试。

    只有满足某些硬件要求的设备才支持编写协助 API。 有关详细信息,请参阅上面的 硬件要求

  5. 若要运行 API,可以选择性地更改场页中的设置,例如要汇总、写入或重写的文本或预期输出的长度和格式。

  6. 单击页面底部的 “汇总”、“ 写入”或“ 重写 ”按钮。

    输出在页面的响应部分中生成。

  7. 随时单击“ 停止 ”按钮停止生成文本:

    “停止”按钮

若要查看编写辅助 API场的源代码,请参阅 GitHub 上的 MicrosoftEdge/Demos 存储库。

使用编写帮助 API

这三个编写辅助 API(摘要生成器、编写器和重写器)的使用非常相似,并在以下各节中一起记录。

检查 API 是否已启用

在网站代码中使用任何编写协助 API 之前,检查通过测试 、 WriterRewriter 对象来Summarizer启用 API:

if (!Summarizer) {
  // The Summarizer API is not available.
}

if (!Writer) {
  // The Writer API is not available.
}

if (!Rewriter) {
  // The Rewriter API is not available.
}

检查是否可以使用模型

仅当设备支持运行模型,并且语言模型和模型运行时已由 Microsoft Edge 下载后,才能使用编写辅助 API。

若要检查 API 是否可以使用,请使用 API 的 availability() 方法。 例如,若要使用编写器 API 检查模型的可用性:

const availability = await Writer.availability();

if (availability == "unavailable") {
  // The model is not available.
}

if (availability == "downloadable" || availability == "downloading") {
  // The model can be used, but it needs to be downloaded first.
}

if (availability == "available") {
  // The model is available and can be used.
}

若要使用重写器和摘要生成器 API 检查模型的可用性,请将 更改为 WriterRewriter 上述代码中的 或 Summarizer

创建新会话

创建会话会指示浏览器在内存中加载语言模型,以便可以使用它。 在使用编写协助 API 汇总、写入或重写文本之前,请使用 create() 方法创建新会话:

// Create a Summarizer session.
const summarizerSession = await Summarizer.create();

// Create a Writer session.
const writerSession = await Writer.create();

// Create a Rewriter session.
const rewriterSession = await Rewriter.create();

若要自定义模型会话,可以将选项传递给 create() 方法:

// Create a Writer session with options.
const session = await Writer.create(options);

一些选项在三个编写协助 API 中是通用的,而其他选项则不同,或者采用不同的值。 下面列出了每个 API 的可用选项:

选项 摘要生成器 API 编写器 API 重写程序 API
monitor Monitor 对象 Monitor 对象 Monitor 对象
type 字符串: "tl;dr""key-points""teaser"、、 "headline" 不支持 不支持
tone 不支持 字符串: "formal""neutral""casual" 字符串: "as-is""more-formal""more-casual"
length 字符串: "short""medium""long" 字符串: "short""medium""long" 字符串: "as-is""shorter""longer"
format 字符串: "plain-text""markdown" 字符串: "plain-text""markdown" 字符串: "as-is""plain-text""markdown"

下面介绍了这些选项。

监视模型下载进度

可以使用 选项跟踪模型下载 monitor 进度。 当模型尚未完全下载到要使用的设备上时,这将非常有用,以通知网站用户他们应该等待。

// Create a Summarizer session with the monitor option to monitor the model
// download.
const session = await Summarizer.create({
  monitor: m => {
    // Use the monitor object argument to add an listener for the 
    // downloadprogress event.
    m.addEventListener("downloadprogress", event => {
      // The event is an object with the loaded and total properties.
      if (event.loaded == event.total) {
        // The model is fully downloaded.
      } else {
        // The model is still downloading.
        const percentageComplete = (event.loaded / event.total) * 100;
      }
    });
  }
});
设置摘要类型

选项 type 仅受摘要生成器 API 支持。 type使用 选项要求语言模型生成以下类型之一的摘要:

  • tl;dr
  • key-points
  • teaser
  • headline

使用摘要type选项key-points创建Summarizer会话的示例:

const session = await Summarizer.create({
  type: "key-points"
});
设置生成的文本的音调

编写器和重写器 API 支持 tone 选项。

tone使用 选项可设置要写入或重写的文本的基调。

编写器 API 支持选项的以下值 tone

  • formal
  • neutral
  • casual

重写程序 API 支持选项的以下值 tone

  • as-is
  • more-formal
  • more-casual

创建 Rewriter 会话的示例,要求模型重写文本以使用 tonemore-formal

const session = await Rewriter.create({
  tone: "more-formal"
});
设置生成的文本的长度

length 摘要生成器”、“编写器”和“重写器”API 支持选项,用于控制生成的文本的长度。

编写器和摘要生成器 API 支持以下值:

  • short
  • medium
  • long

重写程序 API 支持以下值:

  • as-is
  • shorter
  • longer

创建 Writer 会话的示例,要求模型使用 lengthlong生成文本:

const session = await Writer.create({
  length: "long"
});
设置生成的文本的格式

format 摘要生成器”、“编写器”和“重写器”API 支持该选项,用于要求模型生成纯文本或格式为 markdown 的文本。

编写器和摘要生成器 API 支持以下值:

  • plain-text
  • markdown

重写程序 API 支持以下值:

  • as-is
  • plain-text
  • markdown

创建 Rewriter 会话的示例,要求模型重写提供的文本以生成 formatmarkdown

const session = await Rewriter.create({
  format: "markdown"
});

运行编写帮助 API

若要生成文本,请使用摘要生成器、编写器或重写器 API,在创建相应的模型会话后,使用以下方法:

  • summarizerSession.summarize()
  • writerSession.write()
  • rewriterSession.rewrite()

或者,若要在生成时显示生成的文本,请使用上述方法的流式处理版本:

  • summarizerSession.summarizeStreaming()
  • writerSession.writeStreaming()
  • rewriterSession.rewriteStreaming()

下面介绍了这些方法的两个版本。

等待文本生成

若要在继续运行代码之前等待文本完全生成,请使用 summarize()write()rewrite() 异步方法。 这些方法返回一个承诺,该承诺在相应的 API 完成文本生成后解析。

使用 summarize() 摘要生成器 API 的异步方法的示例:

// Create a Summarizer session.
const summarizerSession = await Summarizer.create();

// Summarize text and wait for the summary to be done.
const summary = await summarizerSession.summarize(textToBeSummarized);

// Use the summary.
console.log(summary);
在生成令牌时显示令牌

若要在生成令牌时显示令牌,请改用上述方法的流式处理版本。 summarizeStreaming()writeStreaming()rewriteStreaming() 方法会立即返回流对象。 使用返回的流对象在生成响应令牌时显示这些令牌。

使用 summarizeStreaming() 摘要生成器 API 的异步方法的示例:

// Create a Summarizer session.
const session = await Summarizer.create();

// Ask the model to summarize text.
const stream = session.summarizeStreaming(textToBeSummarized);

// Use the stream object to display tokens that are generated by the model, as
// they are being generated.
for await (const chunk of stream) {
  console.log(chunk);
}

停止生成文本

若要在上述方法返回的承诺或流已解决或结束之前停止生成文本,请使用 AbortController 信号:

使用AbortController信号的Rewriter会话示例:

// Create a Rewriter session.
const session = await Rewriter.create();

// Create an AbortController object.
const abortController = new AbortController();

// Use the model session to generate some text and pass the AbortController
// object by using the signal option.
const stream = session.rewriteStreaming(textToBeRewritten, {
    signal: abortController.signal
});

// Later, perhaps when the user presses a "Stop" button, call the abort()
// method on the AbortController object to stop generating text.
abortController.abort();

Summarizer对于 或 Writer 会话,在上面的代码中:

  • 将 更改为 Rewriter.create()Summarizer.create()Writer.create()
  • 从使用 session.rewriteStreaming()进行更改。

销毁会话

销毁会话,让浏览器知道你不再需要语言模型,以便可以从内存中卸载该模型。

可以通过两种不同的方式销毁会话:

  • 通过使用 destroy() 方法。
  • 通过使用 AbortController
使用 destroy () 方法销毁会话

可以将 方法与 、 WriterRewriter 会话一Summarizer起使用destroy()

使用会话的示例 Summarizer

const session = await Summarizer.create();

// Later, destroy the session by using the destroy method.
session.destroy();
使用 AbortController 销毁会话

或者,可以创建 AbortController 对象,创建 SummarizerWriterRewriter 会话,然后调用 abort()

使用会话的示例 Writer

// Create an AbortController object.
const controller = new AbortController();

// Create a Summarizer, Writer, or Rewriter session and pass the 
// AbortController object by using the signal option.
const session = await Writer.create({ signal: controller.signal });

// Later, perhaps when the user interacts with the UI, destroy the session by
// calling the abort() function of the AbortController object.
controller.abort();

发送反馈

我们非常有兴趣了解你打算使用编写辅助 API 的方案范围、API 或语言模型的任何问题,以及新 API(例如用于校对的 API)是否有用。

若要发送有关方案和要实现的任务的反馈,请向 编写辅助 API 反馈问题添加注释。

如果在改用 API 时发现任何问题,请在存储库中报告。

还可以在 W3C Web 机器学习工作组存储库中参与有关编写辅助 API 的设计的讨论。

另请参阅