내장된 AI로 요약

게시일: 2024년 11월 11일

사용자에게 긴 기사, 복잡한 문서 또는 활발한 채팅 대화를 간결하고 유용한 요약으로 요약할 수 있는 기능을 제공할 수 있다고 가정해 보세요.

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

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

가용성

오리진 트라이얼 가입

Summarizer API를 사용하려면 다음 단계를 따르세요.

  1. Google의 생성형 AI 금지된 사용 정책을 확인합니다.
  2. Summarizer API 오리진 트라이얼로 이동합니다.
  3. 등록을 클릭하고 양식을 작성합니다.
    • 웹 출처 필드에 출처 또는 확장 프로그램 ID chrome-extension://YOUR_EXTENSION_ID를 입력합니다.
  4. 제출하려면 등록을 클릭합니다.
  5. 제공된 토큰을 복사하여 무료 체험을 사용 설정하려는 출처 또는 확장 프로그램의 파일에 있는 모든 웹페이지에 추가합니다.
  6. Summarizer API 사용을 시작합니다.

출처 체험을 시작하는 방법을 자세히 알아보세요.

출처 무료 체험 기간 중 제한사항

Summarizer API는 모델 품질이 영어 콘텐츠에서만 철저하게 테스트되었으므로 원본 체험판 기간에는 영어 텍스트 요약만 지원합니다. 품질 및 안전을 위해 추가 언어를 테스트하고 API가 광범위하게 제공되면 이 제한을 해제할 예정입니다.

localhost에 지원 추가

오리진 트라이얼 중에 localhost의 Summarizer API에 액세스하려면 Chrome Canary가 있어야 합니다. 그런 다음 다음 단계를 따르세요.

  1. chrome://flags/#optimization-guide-on-device-model 페이지로 이동합니다.
  2. Enabled BypassPerfRequirement를 선택합니다. 이렇게 하면 성능 검사와 VRAM 요구사항이 건너뛰어지므로 Gemini Nano가 기기에 다운로드되지 않을 수 있습니다.
  3. chrome://flags/#summarization-api-for-gemini-nano 페이지로 이동합니다.
  4. 사용 설정됨을 선택합니다.
  5. 다시 실행을 클릭하거나 Chrome을 다시 시작합니다.

Summarizer API 사용

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

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

모델 다운로드

Summarizer API는 고품질 요약을 생성하도록 학습된 강력한 AI 모델을 사용합니다. API는 Chrome에 내장되어 있지만 웹사이트에서 API를 처음 사용할 때는 모델이 별도로 다운로드됩니다.

모델을 사용할 준비가 되었는지 확인하려면 비동기 ai.summarizer.capabilities() 함수를 호출합니다. 다음 세 가지 값을 사용할 수 있는 available 필드가 있는 AISummarizerCapabilities 객체를 반환합니다.

  • no: 현재 브라우저에서 Summarizer API를 지원하지만 현재는 사용할 수 없습니다. 모델을 다운로드할 디스크 공간이 부족한 등 여러 가지 이유로 이러한 문제가 발생할 수 있습니다.
  • readily: 현재 브라우저는 Summarizer API를 지원하며 즉시 사용할 수 있습니다.
  • after-download: 현재 브라우저는 Summarizer API를 지원하지만 먼저 모델을 다운로드해야 합니다.

모델 다운로드를 트리거하고 요약 생성기를 만들려면 비동기 ai.summarizer.create() 함수를 호출합니다. capabilities()에 대한 응답이 after-download인 경우 다운로드 진행 상황을 리슨하는 것이 좋습니다. 이렇게 하면 다운로드하는 데 시간이 걸리는 경우 사용자에게 알릴 수 있습니다.

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

API 함수

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

  • sharedContext: 요약 도구에 도움이 될 수 있는 추가 공유 컨텍스트입니다.
  • type: 요약 유형입니다. 허용되는 값은 key-points(기본값), tl;dr, teaser, headline입니다.
  • format: 요약 형식입니다. 허용되는 값은 markdown(기본값) 및 plain-text입니다.
  • length: 요약의 길이입니다. 허용되는 값은 short, medium (기본값), long입니다. 이러한 길이의 의미는 요청된 type에 따라 다릅니다. 예를 들어 Chrome 구현에서 짧은 요약은 글머리 기호 3개로 구성되며 짧은 요약은 문장 1개입니다. 긴 요약은 글머리 기호 7개로 구성되며 긴 요약은 단락입니다.

다음 예는 요약 도구를 초기화하는 방법을 보여줍니다.

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

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

요약 도구 실행

요약 도구를 실행하는 방법에는 스트리밍과 비스트리밍의 두 가지가 있습니다.

비스트리밍 요약

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

스트리밍이 아닌 요약을 가져오려면 요약 도구의 비동기 summarize() 함수를 호출합니다. 함수의 첫 번째 인수는 요약하려는 텍스트입니다. 두 번째 인수(선택사항)는 context 필드가 있는 객체입니다. 이 필드를 사용하면 요약을 개선하는 데 도움이 되는 배경 세부정보를 추가할 수 있습니다.

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

스트리밍 요약

스트리밍 요약은 실시간으로 결과를 제공합니다. 입력이 추가되고 조정되면 출력이 지속적으로 업데이트됩니다.

스트리밍 요약을 가져오려면 요약 도구의 summarizeStreaming() 함수를 호출합니다. 그런 다음 스트림에서 사용 가능한 텍스트 세그먼트를 반복합니다.

let result = '';
let previousChunk = '';
for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

summarizeStreaming()는 응답 세그먼트가 서로 연속적으로 빌드되는 ReadableStream를 반환합니다. 즉, 각 응답에는 다음 세그먼트뿐만 아니라 그때까지 생성된 전체 요약이 포함되며 이는 의도한 동작이 아닙니다.

세그먼트가 단일 긴 스트림의 연속적인 부분인 플랫폼의 다른 스트리밍 API와 조화를 이루도록 할 계획입니다. 현재 의도한 동작을 실행하려면 다음을 구현하면 됩니다.

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

데모

Summarizer API 플레이그라운드에서 Summarizer API를 사용해 볼 수 있습니다.

표준화 작업

Google은 교차 브라우저 호환성을 보장하기 위해 Summarizer API를 표준화하기 위해 노력하고 있습니다.

Google의 API 제안서는 커뮤니티의 지원을 받아 추가 논의를 위해 W3C 웹 인큐베이터 커뮤니티 그룹으로 이동했습니다. Chrome팀은 W3C 기술 아키텍처 그룹에 의견을 요청하고 MozillaWebKit에 표준 관련 입장을 요청했습니다.

참여 및 의견 공유

지금 오리진 트라이얼에 참여하여 Summarizer API 테스트를 시작하고 의견을 공유해 주세요. 보내 주시는 의견은 향후 이 API 버전과 모든 내장 AI API를 빌드하고 구현하는 방식에 직접적인 영향을 미칠 수 있습니다.