내장된 AI로 요약

게시: 2024년 11월 11일, 최종 업데이트: 2025년 7월 30일

Browser Support

  • Chrome: 138.
  • Edge: 138.
  • Firefox: not supported.
  • Safari: not supported.

Source

사용자는 긴 기사, 복잡한 문서 또는 활발한 채팅 대화를 간결하고 통찰력 있는 요약으로 압축할 수 있습니다.

Summarizer API를 사용하면 문장, 단락, 글머리기호 목록 등 다양한 길이와 형식으로 여러 유형의 요약을 생성할 수 있습니다. 이 API는 다음과 같은 시나리오에서 유용하다고 생각합니다.

  • 기사 또는 채팅 대화의 주요 사항을 요약합니다.
  • 기사의 제목과 헤드라인을 제안합니다.
  • 긴 텍스트의 간결하고 유익한 요약을 만듭니다.
  • 서평을 기반으로 책의 티저를 생성합니다.

시작하기

Summarizer API는 Chrome 138 안정화 버전에서 사용할 수 있습니다.

기능 감지를 실행하여 브라우저가 Summarizer API를 지원하는지 확인합니다.

if ('Summarizer' in self) {
  // The Summarizer API is supported.
}

하드웨어 요구사항 검토

Chrome에서 이러한 API를 사용하여 기능을 운영하는 개발자와 사용자에게는 다음과 같은 요구사항이 있습니다. 브라우저마다 운영 요구사항이 다를 수 있습니다.

언어 감지기번역기 API는 데스크톱의 Chrome에서 작동합니다. 이러한 API는 휴대기기에서 작동하지 않습니다.

Prompt API, Summarizer API, Writer API, Rewriter API, Proofreader API는 다음 조건을 충족하는 경우 Chrome에서 작동합니다.

  • 운영체제: Windows 10 또는 11, macOS 13+ (Ventura 이상), Linux 또는 Chromebook Plus 기기의 ChromeOS (플랫폼 16389.0.0 이상) Gemini Nano를 사용하는 API는 아직 Android용 Chrome, iOS, Chromebook Plus가 아닌 기기의 ChromeOS용 Chrome을 지원하지 않습니다.
  • 저장용량: Chrome 프로필이 포함된 볼륨에 최소 22GB의 여유 공간
  • GPU 또는 CPU: 기본 제공 모델은 GPU 또는 CPU로 실행할 수 있습니다.
    • GPU: VRAM이 4GB보다 엄격하게 많음
    • CPU: RAM 16GB 이상, CPU 코어 4개 이상
    • 참고: 오디오 입력이 있는 Prompt API에는 GPU가 필요합니다.
  • 네트워크: 무제한 데이터 또는 데이터 전송량 제한이 없는 연결

Gemini Nano의 정확한 크기는 브라우저가 모델을 업데이트할 때 다를 수 있습니다. 현재 크기를 확인하려면 chrome://on-device-internals를 방문하세요.

모델 다운로드

Summarizer API는 고품질 요약을 생성하도록 학습된 모델을 사용합니다. API는 Chrome에 기본 제공되며, Gemini Nano는 웹사이트에서 이 API를 처음 사용할 때 다운로드되는 모델입니다.

모델을 사용할 준비가 되었는지 확인하려면 비동기 Summarizer.availability() 함수를 호출합니다. availability()에 대한 응답이 downloadable인 경우 다운로드 진행 상황을 수신 대기하여 사용자에게 진행 상황을 알립니다. 시간이 걸릴 수 있기 때문입니다.

const availability = await Summarizer.availability();

모델 다운로드를 트리거하고 요약기를 만들려면 사용자 활성화를 확인한 후 비동기 Summarizer.create() 함수를 호출합니다.

// Proceed to request batch or streaming summarization
const summarizer = await Summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

API 함수

create() 함수를 사용하면 필요에 맞게 새 요약기 객체를 구성할 수 있습니다. 다음 매개변수가 있는 선택적 options 객체를 사용합니다.

  • sharedContext: 요약기에 도움이 될 수 있는 추가 공유 컨텍스트입니다.
  • type: 요약 유형입니다. 허용되는 값은 key-points(기본값), tldr, teaser, headline입니다. 자세한 내용은 다음 표를 참조하세요.
  • format: 요약 형식입니다. 허용되는 값은 markdown(기본값) 및 plain-text입니다.
  • length: 요약 길이입니다. 허용되는 값은 short (기본값), medium, long입니다. 이러한 길이의 의미는 요청된 type에 따라 다릅니다. 예를 들어 Chrome의 구현에서 짧은 주요 사항 요약은 글머리기호 3개로 구성되고 짧은 요약은 문장 1개입니다.
  • preference: 개발자가 빠른 실행과 포괄적인 기능 중 어느 것을 우선시하는지 나타내는 메커니즘입니다.
    • auto: 브라우저는 실행 속도와 요약 기능을 균형 있게 조정하며 환경, 시스템 제약조건 또는 컨텍스트에 따라 내부 처리를 동적으로 조정할 수 있습니다.
    • speed: 브라우저는 지연 시간이 짧고 실행 속도가 빠른 것을 우선시해야 합니다. 이 접근 방식은 성능을 우선시하므로 요약 기능이 제한되어 미묘한 추출이 줄어들거나 소스 텍스트의 합성이 더 간단해질 수 있습니다.
    • capability: 브라우저는 요약의 포괄성과 일관성, 요약 유형 및 기타 구성 가능한 옵션 측면에서 더 많은 유연성을 제공하는 모델을 우선시해야 합니다. 이 접근 방식은 미묘한 컨텍스트를 정확하게 캡처하고 매우 세련된 요약을 생성하는 데 중점을 두므로 지연 시간이 길어지고 실행 속도가 느려질 수 있습니다.

매개변수는 설정된 후에는 변경할 수 없습니다. 매개변수를 수정해야 하는 경우 새 요약기 객체를 만듭니다.

다음 표에서는 다양한 유형의 요약과 해당 길이를 보여줍니다. 길이는 가능한 최대값을 나타냅니다. 결과가 더 짧을 수 있기 때문입니다.

유형 의미 길이
"tldr" 요약은 짧고 요점을 파악하여 바쁜 독자에게 적합한 입력에 대한 간략한 개요를 제공해야 합니다.
짧은 동영상 문장 1개
매체 문장 3개
long 문장 5개
"teaser" 요약은 입력의 가장 흥미로운 부분에 중점을 두어 독자가 더 많이 읽도록 유도해야 합니다.
짧은 동영상 문장 1개
매체 문장 3개
long 문장 5개
"key-points" 요약은 입력에서 가장 중요한 사항을 추출하여 글머리기호 목록으로 표시해야 합니다.
짧은 동영상 글머리기호 3개
매체 글머리기호 5개
long 글머리기호 7개
"headline" 요약은 기사 헤드라인 형식으로 단일 문장으로 입력의 주요 사항을 효과적으로 포함해야 합니다.
짧은 동영상 단어 12개
매체 단어 17개
long 단어 22개

예를 들어 요약기를 초기화하여 마크다운으로 중간 길이의 주요 사항을 출력할 수 있습니다.

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
};

const availability = await Summarizer.availability();
if (availability === 'unavailable') {
  // The Summarizer API isn't usable.
  return;
}

// Check for user activation before creating the summarizer
if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

예상 언어 할당

Summarizer API는 여러 언어를 지원합니다. 세션을 만들 때 예상되는 입력, 출력, 컨텍스트 언어를 설정합니다. 이렇게 하면 브라우저가 특정 언어 조합을 지원할 수 없는 경우 요청을 거부할 수 있습니다.

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja', 'es'],
  outputLanguage: 'es',
  expectedContextLanguages: ['en'],
  sharedContext: 'These are requests to summarize articles from a multilanguage newspaper. The users expect a response in Spanish.',
});

요약기를 실행하는 방법에는 스트리밍과 일괄 처리 (요청 기반 출력)의 두 가지가 있습니다.

일괄 요약

일괄 요약을 사용하면 모델이 입력을 전체적으로 처리한 후 출력을 생성합니다.

일괄 요약을 가져오려면 summarize() 함수를 호출합니다. 첫 번째 인수는 요약할 텍스트입니다. 두 번째 선택적 인수는 context 필드가 있는 객체입니다. 이 필드를 사용하면 요약을 개선할 수 있는 배경 세부정보를 추가할 수 있습니다.

const longText = document.querySelector('article').innerHTML;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});

스트림 요약

스트리밍 요약은 결과를 실시간으로 제공합니다. 입력이 추가되고 조정됨에 따라 출력이 지속적으로 업데이트됩니다. 스트리밍 요약을 가져오려면 summarize() 대신 summarizeStreaming()을 호출합니다.

const longText = document.querySelector('article').innerHTML;
const stream = summarizer.summarizeStreaming(longText, {
  context: 'This article is intended for junior developers.',
});
for await (const chunk of stream) {
  console.log(chunk);
}

데모

Summarizer API Playground에서 Summarizer API를 사용해 볼 수 있습니다.

권한 정책, iframe, 웹 워커

기본적으로 Summarizer API는 최상위 창과 동일한 출처 iframe에서만 사용할 수 있습니다. 권한 정책 allow="" 속성을 사용하여 API에 대한 액세스 권한을 교차 출처 iframe 에 위임할 수 있습니다.

<!--
  The hosting site at https://main.example.com can grant a cross-origin iframe
  at https://cross-origin.example.com/ access to the Summarizer API by
  setting the `allow="summarizer"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="summarizer"></iframe>

현재 Summarizer API는 웹 워커에서 사용할 수 없습니다. 이는 권한 정책 상태를 확인하기 위해 각 워커에 대한 책임 있는 문서를 설정하는 것이 복잡하기 때문입니다.

의견 공유

Summarizer API로 빌드하는 내용을 확인하고 싶습니다. X, YouTube, and LinkedIn에서 웹사이트와 웹 애플리케이션을 공유해 주세요.

Chrome의 구현에 관한 의견이 있으면 버그 신고 또는 기능 요청을 제출하세요.