작은 컨텍스트 창에서 클라이언트 측 요약 확장

André Cipriani Bandarra
André Cipriani Bandarra
Alexandra Klepper
Alexandra Klepper

게시: 2025년 3월 12일, 최종 업데이트: 2025년 5월 28일

설명 확장 프로그램 Chrome 상태 의도
MDN Chrome 138 Chrome 138 View 배송 의도

요약 도구 API를 사용하면 다양한 길이와 형식으로 정보의 요약을 생성할 수 있습니다. Chrome의 Gemini Nano 또는 브라우저에 내장된 다른 언어 모델과 함께 사용하면 길거나 복잡한 텍스트를 간결하게 설명할 수 있습니다.

클라이언트 측에서 실행하면 로컬에서 데이터를 처리할 수 있으므로 민감한 정보를 안전하게 유지하고 대규모로 가용성을 제공할 수 있습니다. 하지만 컨텍스트 윈도우가 서버 측 모델보다 훨씬 작기 때문에 매우 큰 문서를 요약하기 어려울 수 있습니다. 이 문제를 해결하려면 요약의 요약 기법을 사용하면 됩니다.

요약의 요약이란 무엇인가요?

요약의 요약 기법을 사용하려면 입력 콘텐츠를 주요 지점에서 분할한 다음 각 부분을 독립적으로 요약합니다. 각 부분의 출력을 연결한 다음 이 연결된 텍스트를 하나의 최종 요약으로 요약할 수 있습니다.

예를 들어 문서가 세 부분으로 분할된 경우 각 부분이 요약됩니다. 이러한 세 가지 요약이 합쳐지고 최종 결과를 위해 다시 요약됩니다.

콘텐츠를 신중하게 분할하세요.

다양한 전략이 LLM에서 서로 다른 출력으로 이어질 수 있으므로 큰 텍스트를 어떻게 분할할지 고려하는 것이 중요합니다. 이상적으로는 기사의 새 섹션이나 단락과 같이 주제가 변경될 때 텍스트를 분할해야 합니다. 단어나 문장의 중간에서 텍스트를 분할하면 안 됩니다. 즉, 문자 수만으로는 분할 가이드라인으로 사용할 수 없습니다.

이 작업을 수행하는 방법은 여러 가지가 있습니다. 다음 예에서는 성능과 출력 품질의 균형을 맞추는 LangChain.jsRecursive Text Splitter를 사용했습니다. 이 방법은 대부분의 워크로드에서 작동합니다.

새 인스턴스를 만들 때 두 가지 주요 매개변수가 있습니다.

  • chunkSize은 각 분할에서 허용되는 최대 문자 수입니다.
  • chunkOverlap는 연속된 두 분할 사이에 중복되는 문자 수입니다. 이렇게 하면 각 청크에 이전 청크의 컨텍스트가 일부 포함됩니다.

splitText()로 텍스트를 분할하여 각 청크가 포함된 문자열 배열을 반환합니다.

대부분의 LLM은 컨텍스트 윈도우가 문자 수가 아닌 토큰 수로 표현됩니다. 토큰에는 평균적으로 4개의 문자가 포함됩니다. 예에서 chunkSize은 3, 000자이며 이는 약 750개의 토큰에 해당합니다.

토큰 사용 가능 여부 확인

입력에 사용할 수 있는 토큰 수를 확인하려면 measureInputUsage() 메서드와 inputQuota 속성을 사용하세요. 이 경우 모든 텍스트를 처리하기 위해 요약기가 몇 번 실행될지 알 수 없으므로 구현은 무제한입니다.

각 스플릿의 요약 생성

콘텐츠가 분할되는 방식을 설정한 후 요약기 API를 사용하여 각 부분의 요약을 생성할 수 있습니다.

create() 함수를 사용하여 요약 도구의 인스턴스를 만듭니다. 컨텍스트를 최대한 많이 유지하기 위해 format 매개변수를 plain-text로, typetldr로, lengthlong로 설정했습니다.

그런 다음 RecursiveCharacterTextSplitter로 만든 각 분할의 요약을 생성하고 결과를 새 문자열로 연결합니다. 각 부분의 요약을 명확하게 식별하기 위해 각 요약을 새 줄로 구분했습니다.

이 새로운 줄은 이 루프를 한 번만 실행할 때는 중요하지 않지만 각 요약이 최종 요약의 토큰 값에 어떻게 추가되는지 확인하는 데 유용합니다. 대부분의 경우 이 솔루션은 중간 길이 및 긴 콘텐츠에 적합합니다.

요약의 재귀적 요약

텍스트가 지나치게 긴 경우 연결된 요약의 길이가 사용 가능한 컨텍스트 윈도우보다 커서 요약이 실패할 수 있습니다. 이 문제를 해결하려면 요약을 재귀적으로 요약하면 됩니다.

요약의 요약이 여전히 너무 길다면 이 과정을 반복할 수 있습니다. 이론적으로 적절한 길이가 될 때까지 이 과정을 무한정 반복할 수 있습니다.

Google은 여전히 RecursiveCharacterTextSplitter에서 생성된 초기 분할을 수집합니다. 그런 다음 recursiveSummarizer() 함수에서 연결된 분할의 문자 길이에 따라 요약 프로세스를 반복합니다. 요약의 문자 길이가 3000를 초과하면 fullSummaries로 연결합니다. 한도에 도달하지 않으면 요약이 partialSummaries로 저장됩니다.

모든 요약이 생성되면 최종 부분 요약이 전체 요약에 추가됩니다. fullSummaries에 요약이 하나만 있는 경우 추가 재귀가 필요하지 않습니다. 이 함수는 최종 요약을 반환합니다. 요약이 두 개 이상 있으면 함수가 반복되어 부분 요약을 계속 요약합니다.

이 솔루션은 단어 17,560개를 포함하는 110,030자의 인터넷 중계 채팅 (IRC) RFC로 테스트했습니다. 요약 도구 API는 다음과 같은 요약을 제공했습니다.

인터넷 중계 채팅 (IRC)은 문자 메시지를 사용하여 온라인에서 실시간으로 소통하는 방법입니다. 채팅을 하거나 비공개 메시지를 보낼 수 있으며, 명령어를 사용하여 채팅을 관리하고 서버와 상호작용할 수 있습니다. 인터넷상의 채팅방과 비슷하며, 메시지를 입력하면 다른 사용자의 메시지를 즉시 확인할 수 있습니다.

상당히 효과적입니다. 309자��에 안 됩니다.

제한사항

요약의 요약 기법은 클라이언트 측 모델의 컨텍스트 윈도우 내에서 작동하는 데 도움이 됩니다. 클라이언트 측 AI에는 많은 이점이 있지만 다음과 같은 문제가 발생할 수 있습니다.

  • 정확도가 낮은 요약: 재귀를 사용하면 요약 프로세스 반복이 무한할 수 있으며 각 요약이 원본 텍스트에서 멀어집니다. 즉, 모델이 유용하기에는 너무 얕은 최종 요약을 생성할 수 있습니다.
  • 성능 저하: 각 요약을 생성하는 데 시간이 걸립니다. 다시 말하지만 텍스트가 길면 요약이 무한대로 많아질 수 있으므로 이 접근 방식을 사용하면 완료하는 데 몇 분이 걸릴 수 있습니다.

요약 도구 데모가 제공되며 전체 소스 코드를 확인할 수 있습니다.

의견 공유

요약 도구 API를 사용하여 입력 텍스트의 길이, 분할 크기, 중복 길이를 다양하게 지정하여 요약의 요약 기법을 사용해 보세요.