在小型上下文窗口中缩放客户端摘要

Alexandra Klepper
Alexandra Klepper

发布时间:2025 年 3 月 12 日;上次更新时间:2025 年 5 月 28 日

说明类视频 Web 扩展程序 Chrome 状态 目的
MDN Chrome 138 Chrome 138 视图 Intent to Ship

Summarizer API 可帮助您生成各种长度和格式的信息摘要。您可以将其与 Chrome 中的 Gemini Nano 或浏览器中内置的其他语言模型搭配使用,以便简洁地解释冗长或复杂的文本。

在客户端执行时,您可以在本地处理数据,从而确保敏感数据的安全,并大规模提供可用性。不过,与服务器端模型相比,本地模型具有更小的上下文窗口,这意味着总结非常大的文档可能会很困难。如需解决此问题,您可以使用总结的总结技术。

什么是“总结的总结”?

如需使用总结的总结技巧,请在关键点拆分输入内容,然后单独总结每个部分。您可以将每个部分的输出串联起来,然后将串联后的文本总结为最终摘要。

例如,如果文档分为三个部分,则每个部分都会生成摘要。然后将这三个摘要放在一起,再次进行总结,得出最终结果。

周全地拆分内容

请务必考虑如何拆分大段文本,因为不同的策略可能会导致 LLM 给出不同的输出。 理想情况下,当主题发生变化时(例如文章的新部分或段落),应拆分文本。请务必避免在字词或句子的中间拆分文本,这意味着您不能仅使用字符数作为拆分指南。

您可以通过多种方式实现此目的。在以下示例中,我们使用了 LangChain.js 中的 Recursive Text Splitter,该工具可平衡性能和输出质量。这应该适用于大多数工作负载。

创建新实例时,有两个关键参数:

  • chunkSize 是每个拆分中允许的最大字符数。
  • chunkOverlap 是两个连续拆分之间的重叠字符数。这样可确保每个块都包含前一个块的部分上下文。

使用 splitText() 拆分文本,以返回包含每个块的字符串数组。

大多数 LLM 的上下文窗口都以 token 数量(而非字符数量)表示。平均而言,一个 token 包含 4 个字符。在我们的示例中,chunkSize 为 3, 000 个字符,大约相当于 750 个 token。

确定令牌可用性

如需确定可用于输入的 token 数量,请使用 measureInputUsage() 方法和 inputQuota 属性。在这种情况下,实现是无限的,因为您无法知道总结器将运行多少次才能处理所有文本。

为每个拆分生成摘要

设置好内容拆分方式后,您可以使用 Summarizer API 为每个部分生成摘要。

使用 create() 函数创建总结器的实例。为了尽可能保留上下文,我们将 format 参数设置为 plain-texttype 设置为 tldr,并将 length 设置为 long

然后,为 RecursiveCharacterTextSplitter 创建的每个拆分生成摘要,并将结果串联成一个新字符串。 我们用换行符分隔每个摘要,以便清楚地标识每个部分的摘要。

虽然在仅执行一次此循环时,此新行并不重要,但它有助于确定每个摘要如何增加最终摘要的令牌值。在大多数情况下,此解决方案应适用于中长内容。

摘要的递归摘要

当您有大量过长的文本时,串联摘要的长度可能会大于可用的上下文窗口,从而导致总结失败。为解决此问题,您可以递归地总结摘要。

如果总结的总结仍然过长,您可以重复上述流程。从理论上讲,您可以无限期地重复此过程,直到获得合适的长度。

我们仍会收集由 RecursiveCharacterTextSplitter 生成的初始分块。然后,在 recursiveSummarizer() 函数中,我们根据串联拆分的字符长度循环执行总结流程。如果摘要的字符长度超过 3000,则将摘要连接到 fullSummaries 中。如果未达到限制,系统会将摘要保存为 partialSummaries

生成所有摘要后,最终的部分摘要会添加到完整摘要中。如果 fullSummaries 中只有一个摘要,则无需进行额外的递归。该函数会返回最终摘要。如果存在多个摘要,该函数会重复执行,并继续总结部分摘要。

我们使用 Internet Relay Chat (IRC) RFC 测试了此解决方案,该 RFC 包含 110,030 个字符,其中包括 17,560 个字词。总结器 API 提供了以下总结:

互联网中继聊天 (IRC) 是一种使用文本消息实时在线交流的方式。您可以在频道中聊天或发送私信,还可以使用命令来控制聊天并与服务器互动。它就像互联网上的聊天室,您可以在其中输入消息,并立即看到其他人的消息。

这非常有效!而且只有 309 个字符。

限制

总结的总结技术可帮助您在客户端大小的模型上下文窗口中运行。虽然客户端 AI 有许多优势,但您可能会遇到以下问题:

  • 摘要准确性较低:使用递归时,摘要过程可能会无限重复,并且每个摘要都与原始文本相差甚远。这意味着模型生成的最终摘要可能过于肤浅,无法发挥作用。
  • 效果较差:生成每个摘要都需要时间。同样,由于较长的文本中可能存在无限数量的摘要,因此此方法可能需要几分钟才能完成。

我们提供了总结器演示版,您可以查看完整的源代码

分享您的反馈

尝试使用总结的总结技术,输入不同长度的文本,采用不同的拆分大小和不同的重叠长度,并使用 Summarizer API