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

发布时间:2025 年 3 月 12 日

解说 Web 扩展程序 Chrome 状态 意向
GitHub 在标志后面 Origin 试用版 在标志后面 Origin 试用版 视图 意图进行实验

Summarizer API 可帮助您生成各种长度和格式的摘要信息。将其与 Chrome 中的 Gemini Nano 搭配使用,即可执行客户端推理,并简洁地解释复杂或长篇幅文本。

在客户端执行时,您可以在本地处理数据,从而确保敏感数据的安全,并实现大规模可用性。不过,上下文窗口比服务器端模型要小得多,这意味着很难对非常大的文档进行总结。如需解决此问题,您可以使用摘要的摘要技术。

什么是摘要摘要?

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

例如,如果文档被拆分为三部分,系统会对每部分进行总结。这三个摘要会合并在一起,然后再次汇总,以得出最终结果。

精心拆分内容

请务必考虑如何拆分大量文本,因为在不同位置拆分可能会导致 Gemini Nano 或其他 LLM 生成截然不同的输出。理想情况下,应在主题发生变化时(例如文章的新部分)或段落中拆分文本。请务必避免在字词或句子中间拆分文本,这意味着您不能将字符数设置为唯一的拆分准则。

您可以通过多种方式实现此目的,而无需手动操作。在以下示例中,我们使用了 LangChain.js 中的递归文本分屏器,以平衡性能和输出质量。这对大多数工作负载都适用。

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

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

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

大多数 LLM 的上下文窗口都表示为令牌数,而不是字符数。平均而言,令牌包含 4 个字符,因此您可以通过将字符数除以 4 来估算输入所使用的令牌数。

在我们的示例中,chunkSize 为 3, 000 个字符,即大约 750 个令牌。

为每个分块生成摘要

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

使用 create() 函数创建摘要生成器的实例。为了尽可能保留尽可能多的上下文,我们将 format 参数设置为 plain-text,将 type 设置为 tl;dr,并将 length 设置为 long

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

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

摘要的递归摘要

如果文本量过长,串联摘要的长度可能会超出可用上下文窗口,从而导致摘要失败。为解决此问题,您可以递归地对摘要进行总结。

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

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

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

我们使用 Internet Relay Chat (IRC) RFC 测试了此解决方案,该 RFC 包含 17,560 个字词,总字符数高达 110,030 个。Summarizer API 提供了以下摘要:

Internet Relay Chat (IRC) 是一种使用短信在线实时沟通的方式。您可以在渠道中聊天或发送私信,还可以使用命令来控制聊天和与服务器互动。它就像互联网上的聊天室,您可以输入消息并即时查看其他人的邮件。

这样做很有效!并且只有 309 个字符。

限制

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

  • 摘要不太准确:使用递归时,摘要过程重复可能无限,并且每次摘要都与原始文本相差更远。这意味着,模型生成的最终摘要可能过于浅显,无法提供实用信息。
  • 性能较慢:每个摘要都需要时间生成。同样,由于较长文本中的摘要数量可能无限,因此此方法可能需要几分钟才能完成。

我们提供了摘要生成器演示版,您可以查看完整的源代码

分享反馈

尝试使用摘要的摘要技术,并采用不同长度的输入文本、不同的分块大小和不同的重叠长度,以确定哪种方法最适合您的用例。

立即加入源试用,开始测试 Summarizer API,并分享您的反馈。您的反馈将直接影响我们构建和实现此 API 以及所有内置 AI API 的未来版本的方式。