Rewriter API

게시일: 2025년 10월 22일

설명하듯이 확장 프로그램 Chrome 상태 의도
GitHub 개발자 체험판개발자 트라이얼 개발자 체험판개발자 트라이얼 View 실험 의도

Rewriter API를 사용하면 텍스트를 수정하고 재구성할 수 있습니다. 이 API와 Writer APIWriting Assistance APIs 제안의 일부입니다.

이러한 API를 사용하면 사용자가 만든 콘텐츠를 개선할 수 있습니다.

사용 사례

텍스트를 길게 또는 짧게 만들거나 어조를 변경하여 기존 텍스트를 개선합니다. 예를 들어 다음 작업을 할 수 있습니다.

  • 짧은 이메일을 더 정중하고 격식 있는 어조로 다시 작성합니다.
  • 다른 고객이 의견을 이해하거나 유해성을 삭제할 수 있도록 고객 리뷰에 수정사항을 제안합니다.
  • 특정 잠재고객의 기대치를 충족하도록 콘텐츠 형식을 지정합니다.

사용 사례가 누락되었나요? 사전 체험판 프로그램에 참여하여 의견을 공유하세요.

시작하기

Rewriter API 오리진 트라이얼에 참여하세요. Chrome 137~148에서 실행됩니다.

하드웨어 요구사항 검토

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

Language DetectorTranslator API 는 데스크톱의 Chrome에서 작동합니다. 이러한 API는 휴대기기에서 작동하지 않습니다.

Prompt API, Summarizer API, Writer API, Rewriter API, Proofreader API는 다음 조건이 충족될 때 Chrome에서 작동합니다.

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

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

오리진 트라이얼 가입

Rewriter API는 Writer API와 함께 오리진 트라이얼에서 사용할 수 있습니다. 이러한 API를 사용하려면 다음 단계를 따르세요.

  1. Google의 생성형 AI에 관한 금지된 사용 정책을 확인합니다.
  2. Rewriter API 오리진 트라이얼로 이동합니다.
  3. 등록 을 클릭하고 양식을 작성합니다. 웹 오리진 필드에 오리진 또는 확장 프로그램 ID(chrome-extension://YOUR_EXTENSION_ID)를 제공합니다.
  4. 제출하려면 등록 을 클릭합니다.
  5. 제공된 토큰을 복사하여 오리진의 모든 참여 웹페이지에 추가하거나 확장 프로그램 매니페스트에 포함합니다.
  6. Rewriter API 사용을 시작합니다.

오리진 트라이얼을 시작하는 방법을 자세히 알아보세요.

localhost에 지원 추가

localhost에서 Rewriter API에 액세스하려면 Chrome 플래그를 사용하세요.

  1. chrome://flags/#optimization-guide-on-device-model사용 설정됨 으로 설정합니다.
  2. 다음 플래그를 사용 설정됨 또는 다국어 사용 설정됨으로 설정합니다.
    • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input
    • chrome://flags/#writer-api-for-gemini-nano
  3. 다시 시작 을 클릭하거나 Chrome을 다시 시작합니다.

Rewriter API 사용

먼저 기능 감지를 실행하여 브라우저에서 이러한 API를 지원하는지 확인합니다.

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

Rewriter API와 다른 모든 기본 제공 AI API는 브라우저에 통합되어 있습니다. Gemini Nano는 웹사이트에서 기본 제공 AI API를 처음 사용할 때 별도로 다운로드됩니다. 실제로 사용자가 기본 제공 API와 이미 상호작용한 경우 모델을 브라우저에 다운로드한 것입니다.

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

const availability = await Rewriter.availability();

모델 다운로드를 트리거하고 수정 도구를 시작하려면 사용자 활성화 를 확인하고 Rewriter.create() 함수를 호출합니다.

const rewriter = await Rewriter.create({
  monitor(m) {
    m.addEventListener("downloadprogress", e => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  }
});

API 함수

create() 함수를 사용하면 새 수정 도구 객체를 구성할 수 있습니다. 다음 매개변수가 있는 선택적 options 객체를 가져옵니다.

  • tone: 글의 어조 는 콘텐츠의 스타일, 특성 또는 태도를 나타낼 수 있습니다. 값은 more-formal, as-is (기본값) 또는 more-casual로 설정할 수 있습니다.
  • format: 출력 형식 지정으로, 허용되는 값은 as-is (기본값), markdown, plain-text입니다.
  • length: 출력 길이로, 허용되는 값은 shorter, as-is (기본값), longer입니다.
  • sharedContext: 여러 콘텐츠를 다시 작성할 때 공유 컨텍스트를 사용하면 모델이 기대치에 더 부합하는 콘텐츠를 만들 수 있습니다.

다음 예에서는 rewriter 객체를 시작하는 방법을 보여줍니다.

const options = {
  sharedContext: 'This is an email to acquaintances about an upcoming event.',
  tone: 'more-casual',
  format: 'plain-text',
  length: 'shorter',
};

const available = await Rewriter.availability();
let rewriter;
if (available === 'unavailable') {
  // The Rewriter API isn't usable.
  return;
}
if (available === 'available') {
  // The Rewriter API can be used immediately .
  rewriter = await Rewriter.create(options);
} else {
  // The Rewriter can be used after the model is downloaded.
  rewriter = await Rewriter.create(options);
  rewriter.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
}

예상 언어 할당

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

const rewriter = await Rewriter.create({
  tone: "more-formal",
  expectedInputLanguages: ["en", "ja", "es"],
  expectedContextLanguages: ["en", "ja", "es"],
  outputLanguage: "es",
  sharedContext: "These are requests to rewrite messages to teachers in a
    Spanish language program, by students who may speak Spanish, Japanese, or
    English. Staff expect questions to be written in Spanish."
});

다시 작성 시작

모델에서 콘텐츠를 출력하는 방법에는 요청 기반 출력과 스트리밍의 두 가지가 있습니다.

요청 기반 출력

요청 기반 출력 (또는 '비스트리밍')의 경우 모델은 전체 입력이 생성될 때까지 기다리고, 해당 입력을 전체적으로 처리한 다음 출력을 생성합니다.

요청 기반 출력을 가져오려면 비동기 rewrite() 함수를 호출합니다. 다시 작성하려는 초기 텍스트를 포함해야 합니다. 선택적 context를 추가하여 모델 배경 정보를 제공할 수 있습니다. 이렇게 하면 모델이 출력에 대한 기대치를 더 잘 충족할 수 있습니다.

// Request-based
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});
const result = await rewriter.rewrite(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible."
});

스트림 다시 작성 출력

스트리밍은 결과를 실시간으로 제공합니다. 입력이 추가되고 조정됨에 따라 출력이 계속 업데이트됩니다.

스트리밍 수정 도구를 가져오려면 rewriteStreaming() 함수를 호출하고 스트림에서 사용 가능한 텍스트 세그먼트를 반복합니다. 선택적 context를 추가하여 모델 배경 정보를 제공할 수 있습니다. 이렇게 하면 모델이 출력에 대한 기대치를 더 잘 충족할 수 있습니다.

const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const stream = rewriter.rewriteStreaming(reviewEl.textContent, {
  context: "Avoid any toxic language and be as constructive as possible.",
  tone: "more-casual",
});

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

여러 작업의 컨텍스트 공유

rewriter를 사용하여 여러 콘텐츠를 생성할 수 있습니다. 이 경우 sharedContext를 추가하는 것이 유용합니다. 예를 들어 검토자가 댓글에 더 나은 의견을 제공하도록 지원할 수 있습니다.

// Shared context and per writing task context
const rewriter = await Rewriter.create({
  sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});

const stream = rewriter.rewriteStreaming(
  "Love all this work on generative AI at Google! So much to learn and so many new things I can do!",
  {
    context: "The request comes from someone working at a startup providing an e-commerce CMS solution.",
    tone: "more-casual",
  }
);

for await (const chunk of stream) {
  composeTextbox.append(chunk);
}

수정 도구 재사용

동일한 수정 도구를 사용하여 여러 콘텐츠를 수정할 수 있습니다. 작성자가 생산적이고 유용한 의견을 제공할 수 있도록 의견 또는 댓글 도구에 수정 도구를 추가하는 경우 특히 유용할 수 있습니다.

// Reusing a rewriter
const rewriter = await Rewriter.create({
  sharedContext: "A review for the Flux Capacitor 3000 from TimeMachines Inc."
});

const rewrittenReviews = await Promise.all(
  Array.from(
    document.querySelectorAll("#reviews > .review"),
    (reviewEl) => rewriter.rewrite(reviewEl.textContent, {
      context: "Avoid any toxic language and be as constructive as possible.",
      tone: "more-casual",
    })
  ),
);

수정 도구 중지

다시 작성 프로세스를 종료하려면 컨트롤러를 중단하고 rewriter를 삭제합니다.

// Stop a rewriter
const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const rewriter = await Rewriter.create({ signal: controller.signal });
await rewriter.rewrite(reviewEl.textContent, { signal: controller.signal });

// Destroy a rewriter
rewriter.destroy();

데모

권한 정책, iframe, 웹 워커

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

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

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

참여 및 의견 공유

Writer 및 Rewriter API는 현재 활발히 논의되고 있으며 향후 변경될 수 있습니다. 이 API를 사용해 보고 의견이 있다면 언제든지 알려주세요.

브라우저에서 모델을 사용하는 모든 기본 제공 AI API를 살펴보세요. Gemini Nano 및 기타 전문가 모델을 비롯하여