Масштабируйте суммирование на стороне клиента в небольших контекстных окнах

Опубликовано: 12 марта 2025 г., Последнее обновление: 28 мая 2025 г.

Объяснитель Веб Расширения Статус Хрома Намерение
МДН За флагом Chrome 138 бета За флагом Chrome 138 бета Вид Намерение отправить

API Summarizer помогает вам генерировать сводки информации различной длины и формата. Используйте его с Gemini Nano в Chrome или другими языковыми моделями, встроенными в браузеры, чтобы кратко объяснить длинный или сложный текст.

При выполнении на стороне клиента вы можете работать с данными локально, что позволяет вам сохранять конфиденциальные данные в безопасности и может предложить доступность в масштабе. Однако контекстное окно намного меньше, чем в моделях на стороне сервера, что означает, что очень большие документы могут быть сложными для суммирования. Чтобы решить эту проблему, вы можете использовать метод суммирования сумм .

Что такое резюме резюме?

Чтобы использовать метод резюме резюме , разделите входное содержимое по ключевым точкам, затем суммируйте каждую часть независимо. Вы можете объединить выходные данные из каждой части, затем суммировать этот объединенный текст в одно окончательное резюме.

Например, если документ разделен на три части, каждая часть суммируется. Эти три резюме объединяются и суммируются снова для получения конечного результата.

Продуманно разделите свой контент

Важно продумать, как вы будете разбивать большой фрагмент текста, поскольку разные стратегии могут привести к разным результатам в разных LLM. В идеале текст следует разбивать при смене темы, например, в новом разделе статьи или в абзаце. Важно избегать разбиения текста в середине слова или предложения, что означает, что вы не можете использовать количество символов в качестве единственного руководства по разбиению.

Есть много способов сделать это. В следующем примере мы использовали Recursive Text Splitter из LangChain.js , который обеспечивает баланс между производительностью и качеством вывода. Это должно работать для большинства рабочих нагрузок.

При создании нового экземпляра есть два ключевых параметра:

  • chunkSize — максимальное количество символов, разрешенное в каждом фрагменте.
  • chunkOverlap — это количество символов, которые должны перекрываться между двумя последовательными разделами. Это гарантирует, что каждый фрагмент будет иметь часть контекста из предыдущего фрагмента.

Разделите текст с помощью splitText() чтобы получить массив строк для каждого фрагмента.

Большинство LLM имеют свое контекстное окно, выраженное как количество токенов, а не количество символов. В среднем токен содержит 4 символа. В нашем примере chunkSize составляет 3000 символов, что составляет примерно 750 токенов.

Определить доступность токенов

Чтобы определить, сколько токенов доступно для использования для ввода, используйте метод measureInputUsage() и свойство inputQuota . В этом случае реализация безгранична, так как вы не можете знать, сколько раз будет запущен summaryer для обработки всего текста.

Сгенерировать сводки для каждого разделения

После настройки способа разделения контента вы можете создавать сводки для каждой части с помощью API Summarizer.

Создайте экземпляр summaryer с помощью функции create() . Чтобы сохранить как можно больше контекста, мы установили параметр format на plain-text , type на tldr и length на long .

Затем сгенерируйте сводку для каждого разделения, созданного RecursiveCharacterTextSplitter , и объедините результаты в новую строку. Мы разделили каждую сводку новой строкой, чтобы четко идентифицировать сводку для каждой части.

Хотя эта новая строка не имеет значения при выполнении этого цикла только один раз, она полезна для определения того, как каждое резюме добавляется к значению токена для окончательного резюме. В большинстве случаев это решение должно работать для среднего и длинного контента.

Рекурсивное резюме резюме

Если у вас очень длинный текст, длина объединенного резюме может быть больше доступного контекстного окна, что приведет к сбою в резюмировании. Чтобы решить эту проблему, вы можете рекурсивно суммировать резюме.

Если ваше резюме резюме все еще слишком длинное, вы можете повторить процесс. Теоретически вы можете повторять процесс бесконечно, пока не получите подходящую длину.

Мы по-прежнему собираем начальные разделения, сгенерированные RecursiveCharacterTextSplitter . Затем в функции recursiveSummarizer() мы зацикливаем процесс суммирования на основе длины символов объединенных разделений. Если длина символов сумм превышает 3000 , то мы объединяем в fullSummaries . Если предел не достигнут, суммирование сохраняется как partialSummaries .

После того, как все сводки сгенерированы, окончательные частичные сводки добавляются к полной сводке. Если в fullSummaries только 1 сводка, дополнительная рекурсия не требуется. Функция возвращает окончательную сводку. Если присутствует более одной сводки, функция повторяется и продолжает суммировать частичные сводки.

Мы протестировали это решение с помощью Internet Relay Chat (IRC) RFC , который содержит колоссальные 110 030 символов, включающих 17 560 слов. API Summarizer предоставил следующую сводку:

Internet Relay Chat (IRC) — это способ общения в режиме реального времени с помощью текстовых сообщений. Вы можете общаться в каналах или отправлять личные сообщения, а также использовать команды для управления чатом и взаимодействия с сервером. Это похоже на чат в Интернете, где вы можете печатать и мгновенно видеть сообщения других.

Это довольно эффективно! И всего 309 символов.

Ограничения

Методика резюме резюме помогает вам работать в окне контекста модели размера клиента. Хотя у клиентского ИИ есть много преимуществ , вы можете столкнуться со следующим:

  • Менее точные резюме : При рекурсии повторение процесса резюме может быть бесконечным, и каждое резюме находится дальше от исходного текста. Это означает, что модель может сгенерировать окончательное резюме, которое будет слишком поверхностным, чтобы быть полезным.
  • Более медленная производительность : для создания каждого резюме требуется время. Опять же, при бесконечном возможном количестве резюме в больших текстах, этот подход может занять несколько минут.

У нас есть демо-версия Summaging , и вы можете просмотреть полный исходный код .

Поделитесь своим отзывом

Попробуйте использовать метод резюме резюме с различной длиной входного текста, различными размерами разбиения и различной длиной перекрытия с помощью API Summarizer .