요약 도구

웹 기능: 요약 도구

Summarizer API를 사용하면 웹 개발자가 Chrome의 Gemini Nano 또는 Edge의 Phi를 사용하여 브라우저 내에서 바로 로컬 AI 기반 텍스트 요약을 제공할 수 있습니다. 이 API는 핵심 사항, 헤드라인, 요약 등 다양한 형식을 지원하며, 사용자 개인 정보 보호를 위해 완전히 기기 내에서 작동합니다.


시작하기

Summarizer API는 Chrome 및 Edge 138부터 사용할 수 있습니다. Gemini Nano 또는 Phi의 일회성 모델 다운로드가 필요합니다.

하드웨어 및 소프트웨어 요구사항

  • OS: Windows 10/11, macOS 13 이상, Linux 또는 ChromeOS (Chromebook Plus)
  • 저장용량: 프로필 볼륨에 22GB의 여유 공간이 있어야 합니다.
  • RAM/CPU: 16GB 이상의 RAM 및 4개 이상의 CPU 코어
  • VRAM: 4GB 이상 (GPU를 사용하는 경우)

모델 다운로드 및 사용 가능 여부

모델이 준비되었는지, 다운로드가 필요한지, 사용할 수 없는지 확인합니다.

필수 옵션 전달: 동일한 구성 옵션 객체를 Summarizer.availability(options) 및 Summarizer.create(options)에 모두 전달해야 합니다. 지원 중단된 window.ai.summarizer API 노출 영역을 사용하지 마세요.

필수 진행 상황 모니터링: Summarizer.create()에 monitor(m) 콜백을 제공하고 downloadprogress 이벤트의 리스너를 추가하여 모델 다운로드 진행 상황을 모니터링해야 합니다(MUST).

사용자 동작 요구사항: availability가 'downloadable' 또는 'downloading'인 경우 Summarizer.create()를 통해 실제 다운로드를 트리거하려면 사용자 동작 (예: 사용자 클릭)이 필요합니다. NotAllowedError을 방지하려면 페이지 로드 시 무조건 호출하는 대신 이벤트 리스너 내에 생성 호출을 배치해야 합니다.

const options = {
  type: 'key-points',
  format: 'plain-text',
  length: 'medium'
};

const availability = await Summarizer.availability(options);

if (availability === 'available') {
  const summarizer = await Summarizer.create(options);
  // Ready to use immediately
} else if (availability === 'downloadable') {
  // A user gesture is strictly required to start the download
  document.getElementById('start-download-btn').addEventListener('click', async () => {
    const summarizer = await Summarizer.create({
      ...options,
      monitor(m) {
        m.addEventListener('downloadprogress', (e) => {
          console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
        });
      },
    });
  });
}

API 함수 및 구성

Summarizer.create(options)를 통해 요약 도구를 만들 때 출력을 맞춤설정할 수 있습니다.

매개변수 옵션 설명
type key-points, tldr, teaser, headline 요약 전략을 정의합니다.
format markdown, plain-text 출력 문법 스타일입니다.
length short, medium, long 목표 길이 (예: 1문장과 5문장)
preference auto, speed, capability 지연 시간과 품질의 균형을 맞춥니다.

구성 예

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

if (navigator.userActivation.isActive) {
  const summarizer = await Summarizer.create(options);
}

언어 지원

브라우저가 특정 요약 요청을 처리할 수 있도록 예상 언어를 지정할 수 있습니다.

const summarizer = await Summarizer.create({
  type: 'key-points',
  expectedInputLanguages: ['en', 'ja'],
  outputLanguage: 'es',
});

요약 방법

1. 일괄 요약

전체 텍스트를 한 번에 처리하고 결과를 반환합니다.

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

2. 스트림 요약

모델이 결과를 생성하는 대로 실시간으로 반환하여 더 반응성이 뛰어난 UI를 제공합니다.

const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
  console.log(chunk);
}

보안 및 권한

  • 데이터 개인 정보 보호: Google에 데이터가 전송되지 않으며 로컬 기기에서 처리가 이루어집니다.
  • 교차 출처: 권한 정책을 사용하여 iframe에 액세스 권한을 부여할 수 있습니다.

    <iframe src="https://example.com/" allow="summarizer"></iframe>
    
  • 웹 작업자: 현재 지원되지 않습니다.

대체 전략

사용 가능 여부를 초기화하거나 쿼리하기 전에 브라우저가 Summarizer API를 지원하는지 확인합니다.

if ('Summarizer' in self) {
  // The Summarizer API is supported.
} else {
  // Execute fallback strategy
}

Summarizer API가 지원되지 않거나 사용 가능 여부 확인에서 'unavailable'를 반환하는 경우 정상적으로 대체해야 합니다.

권장 옵션:

  1. 원격 API 대체: 사용자가 요약을 계속 받을 수 있도록 정제 요청을 서버 엔드포인트 또는 원격 API (예: Vertex AI Gemini API)로 전달합니다.
  2. 단계적 성능 저하: UI에서 요약 컨트롤을 시각적으로 사용 중지하거나 친근한 메시지 (예: "Local summarization is currently unsupported in this browser")를 표시하면서 버튼을 숨깁니다. 상호작용으로 인해 처리되지 않은 일반적인 런타임 예외가 트리거되지 않도록 합니다.
  3. 폴리필 대체: built-in-ai-task-apis-polyfills 또는 prompt-api-polyfill와 같은 커뮤니티에서 유지관리하는 폴리필을 사용하여 클라우드의 모델이 있는 원격 서비스 또는 로컬 모델을 사용한 기기 내 추론을 사용하여 API 노출 영역을 에뮬레이션할 수 있습니다.

개인 정보 보호 및 비용 영향: 이러한 폴리필은 원격 서버 (예: 클라우드를 통한 Gemini API)에 대한 요청을 프록시할 수 있습니다. 이렇게 하면 네이티브 내장 AI API의 기기 내 개인 정보 보호 보장이 완전히 무효화되고 서버 측 API 사용 비용이 발생합니다.