发布时间:2025 年 3 月 12 日
解说 | Web | 扩展程序 | Chrome 状态 | 意向 |
---|---|---|---|---|
GitHub | 视图 | 意图进行实验 |
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 的未来版本的方式。
- 如需针对 Chrome 的实现提供反馈,请提交bug 报告或功能请求。
- 在 GitHub 上讨论 Summarizer API 设计,方法是针对现有问题发表评论或创建新问题。
- 加入 Web Incubator 社区群组,参与制定标准。
- 与 Chrome AI 团队讨论摘要生成流程或任何其他内置 AI 问题。