Опубликовано: 12 марта 2025 г.
Объяснитель | Интернет | Расширения | Статус Chrome | Намерение |
---|---|---|---|---|
GitHub | Вид | Намерение экспериментировать |
API Summarizer помогает создавать сводки информации различной длины и формата. Используйте его вместе с Gemini Nano в Chrome для выполнения выводов на стороне клиента и краткого объяснения сложных или длинных текстов.
При выполнении на стороне клиента вы можете работать с данными локально, что позволяет обеспечить безопасность конфиденциальных данных и обеспечить доступность в масштабе. Однако контекстное окно намного меньше, чем в моделях на стороне сервера, а это означает, что очень большие документы могут быть затруднены при суммировании. Для решения этой проблемы можно использовать технику обобщения резюме .
Что такое краткое изложение резюме?
Чтобы использовать метод обобщения резюме , разделите входной контент по ключевым точкам, а затем суммируйте каждую часть независимо. Вы можете объединить результаты каждой части, а затем суммировать этот объединенный текст в одно итоговое резюме.

Вдумчиво разделите контент
Важно продумать, как вы разделите большой фрагмент текста, поскольку разделение в разных местах может привести к совершенно разным результатам Gemini Nano или других LLM. В идеале тексты следует разбивать при смене темы, например, при появлении нового раздела статьи или абзаца. Важно избегать разделения текста в середине слова или предложения. Это означает, что вы не можете установить количество символов в качестве единственной направляющей для разделения.
Есть много способов сделать это без ручных усилий. В следующем примере мы использовали рекурсивный разделитель текста из LangChain.js , который обеспечивает баланс производительности и качества вывода. Это должно работать для большинства рабочих нагрузок.
При создании нового экземпляра есть два ключевых параметра:
-
chunkSize
— максимальное количество символов, разрешенное в каждом разбиении. -
chunkOverlap
— это количество символов, которые перекрываются между двумя последовательными разбиениями. Это гарантирует, что каждый фрагмент содержит часть контекста предыдущего фрагмента.
Разделите текст с помощью splitText()
, чтобы вернуть массив строк с каждым фрагментом.
В большинстве LLM контекстное окно выражается в виде количества токенов, а не количества символов. В среднем токен содержит 4 символа, поэтому вы можете оценить количество токенов, используемых для ввода, разделив количество символов на 4.
В нашем примере chunkSize
составляет 3000 символов, а это примерно 750 токенов.
Создание сводных данных для каждого разделения
После того как вы настроите разделение контента, вы сможете создавать сводки для каждой части с помощью API Summarizer.
Создайте экземпляр сумматора с помощью функции create()
. Чтобы сохранить как можно больше контекста, мы установили для параметра format
значение plain-text
, для type
— tl;dr
, а для length
— long
.
Затем сгенерируйте сводку для каждого разделения, созданного RecursiveCharacterTextSplitter
, и объедините результаты в новую строку. Мы разделили каждое резюме новой строкой, чтобы четко определить содержание каждой части.
Хотя эта новая строка не имеет значения при однократном выполнении этого цикла, она полезна для определения того, как каждая сводка добавляется к значению токена для окончательной сводки. В большинстве случаев это решение должно работать для среднего и длинного контента.
Рекурсивное обобщение сводок
Если у вас слишком длинный объем текста, длина объединенной сводки может быть больше, чем доступное контекстное окно, что приведет к сбою суммирования. Чтобы решить эту проблему, вы можете рекурсивно суммировать сводки.

Мы по-прежнему собираем начальные разделения, сгенерированные RecursiveCharacterTextSplitter
. Затем в функции recursiveSummarizer()
мы запускаем процесс суммирования на основе длины символов объединенных разбиений. Если длина символов в сводках превышает 3000
, мы объединяем их в fullSummaries
. Если предел не достигнут, сводка сохраняется как partialSummaries
.
После создания всех сводок окончательные частичные сводки добавляются к полной сводке. Если в fullSummaries
есть только одна сводка, дополнительная рекурсия не требуется. Функция возвращает итоговую сводку. Если имеется более одной сводки, функция повторяет и продолжает суммировать частичные сводки.
Мы протестировали это решение с помощью Internet Relay Chat (IRC) RFC , который содержит колоссальные 110 030 символов, включающих 17 560 слов. API Summarizer предоставил следующую сводку:
Интернет-чат (IRC) — это способ онлайн-общения в режиме реального времени с использованием текстовых сообщений. Вы можете общаться в каналах или отправлять личные сообщения, а также использовать команды для управления чатом и взаимодействия с сервером. Это похоже на чат в Интернете, где вы можете набирать текст и мгновенно просматривать сообщения других.
Это довольно эффективно! И это всего лишь 309 символов.
Ограничения
Техника сводных сводок помогает работать в контекстном окне модели размера клиента. Несмотря на множество преимуществ ИИ на стороне клиента , вы можете столкнуться со следующими:
- Менее точные резюме : при рекурсии повторение процесса сводки может быть бесконечным, и каждое резюме находится дальше от исходного текста. Это означает, что модель может сгенерировать окончательное резюме, которое будет слишком поверхностным, чтобы быть полезным.
- Медленная производительность . Для создания каждой сводки требуется время. Опять же, при бесконечно возможном количестве резюме в больших текстах этот подход может занять несколько минут.
У нас есть демо-версия сумматора , и вы можете просмотреть полный исходный код .
Поделитесь своим отзывом
Попробуйте использовать метод сводки сводок с разной длиной входного текста, разными размерами разделения и разной длиной перекрытия, чтобы определить, что лучше всего подходит для ваших случаев использования.
Начните тестирование API Summarizer прямо сейчас, присоединившись к пробной версии Origin и поделитесь своими отзывами. Ваш вклад может напрямую повлиять на то, как мы создаем и реализуем будущие версии этого API, а также всех встроенных API-интерфейсов искусственного интеллекта .
- Чтобы получить отзыв о реализации Chrome, отправьте отчет об ошибке или запросите новую функцию .
- Обсудите дизайн API Summarizer на GitHub, комментируя существующую проблему или открыв новую.
- Примите участие в разработке стандартов, присоединившись к группе сообщества Web Incubator .
- Поговорите с командой Chrome AI о процессе обобщения или о других встроенных вопросах, связанных с искусственным интеллектом.