게시일: 2025년 5월 20일
설명 | 웹 | 확장 프로그램 | Chrome 상태 | 인텐트 |
---|---|---|---|---|
GitHub | View | 실험 의도 |
Writer API를 사용하면 지정된 쓰기 작업에 부합하는 새 콘텐츠를 만들 수 있습니다. Writer API와 Rewriter API는 Writing Assistance API 제안의 일부입니다.
이러한 파트너 API는 사용자가 만든 콘텐츠를 개선하는 데 도움이 됩니다.
사용 사례
초기 아이디어와 선택적 컨텍스트를 기반으로 새 콘텐츠를 작성합니다. 이 정보는 다음 용도로 사용될 수 있습니다.
- 사용자가 리뷰, 블로그 게시물, 이메일 등 모든 종류의 콘텐츠를 작성하도록 지원합니다.
- 사용자가 더 나은 지원 요청을 작성할 수 있도록 지원합니다.
- 특정 기술을 더 잘 포착하기 위해 일련의 작업 샘플에 대한 소개를 작성합니다.
사용 사례가 누락되었나요? 사전 체험 프로그램에 참여하여 의견을 공유하세요.
시작하기
Chrome 137~142에서 실행되는 Writer API 오리진 트라이얼에 참여하세요.
하드웨어 요구사항 검토
Chrome에서 이러한 API를 사용하여 기능을 작동하는 개발자와 사용자에게는 다음 요구사항이 적용됩니다. 다른 브라우저에는 다른 운영 요구사항이 있을 수 있습니다.
Language Detector API와 Translator API는 데스크톱의 Chrome에서 작동합니다. 이러한 API는 모바일 기기에서 작동하지 않습니다. 다음 조건을 충족하는 경우 Chrome에서 Prompt API, Summarizer API, Writer API, Rewriter API가 작동합니다.
- 운영체제: Windows 10 또는 11, macOS 13 이상 (Ventura 이상), Linux Android, iOS, ChromeOS용 Chrome은 아직 Gemini Nano를 사용하는 API에서 지원되지 않습니다.
- 저장용량: Chrome 프로필이 포함된 볼륨에 22GB 이상
- GPU: VRAM이 4GB보다 커야 합니다.
- 네트워크: 무제한 데이터 또는 무제한 연결
Gemini Nano의 정확한 크기는 약간 다를 수 있습니다. 현재 크기를 확인하려면 chrome://on-device-internals
로 이동하여 모델 상태를 확인하세요.
나열된 파일 경로를 열어 모델 크기를 확인합니다.
오리진 트라이얼 신청
Writer API는 Rewriter API와 함께 공동 오리진 트라이얼에서 사용할 수 있습니다. 이러한 API를 사용하려면 다음 단계를 따르세요.
- Google 생성형 AI에 관한 금지된 사용 정책을 확인합니다.
- Writer API 오리진 트라이얼로 이동합니다.
- 등록을 클릭하고 양식을 작성합니다. 웹 출처 필드에 출처 또는 확장 프로그램 ID(
chrome-extension://YOUR_EXTENSION_ID
)를 입력합니다. - 제출하려면 등록을 클릭합니다.
- 제공된 토큰을 복사하여 원본의 모든 참여 웹페이지에 추가하거나 확장 프로그램 매니페스트에 포함합니다.
- Writer 및 Rewriter API를 사용하기 시작합니다.
오리진 트라이얼을 시작하는 방법을 자세히 알아보세요.
localhost 지원 추가
오리진 트라이얼 중에 localhost에서 Writer 및 Rewriter API에 액세스하려면 Chrome을 최신 버전으로 업데이트해야 합니다. 그런 다음 아래 단계를 따르세요.
chrome://flags/#writer-api-for-gemini-nano
페이지로 이동합니다.- 사용 설정됨을 선택합니다.
- 다시 시작을 클릭하거나 Chrome을 다시 시작합니다.
Writer API 사용
먼저 기능 감지를 실행하여 브라우저가 이러한 API를 지원하는지 확인합니다.
if ('Writer' in self) {
// The Writer API is supported.
}
Writer API와 기타 모든 내장 AI API는 브라우저에 통합되어 있습니다. Gemini Nano는 웹사이트에서 기본 제공 AI API를 처음 사용할 때 별도로 다운로드됩니다. 실제로 사용자가 이미 기본 제공 API와 상호작용한 경우 모델을 브라우저에 다운로드한 것입니다.
모델을 사용할 준비가 되었는지 확인하려면 비동기 Writer.availability()
함수를 호출합니다. 다음 네 가지 값을 사용할 수 있는 문자열을 반환합니다.
unavailable
: 브라우저가 Writer API를 지원하지만 현재는 사용할 수 없습니다. 모델을 다운로드할 수 있는 사용 가능한 디스크 공간이 부족한 등 여러 가지 이유가 있을 수 있습니다.available
: 브라우저가 Writer API를 지원하며 바로 사용할 수 있습니다.downloadable
: 브라우저가 Writer API를 지원하지만 먼저 모델을 다운로드해야 합니다.downloading
: 브라우저가 Writer API를 지원하며 현재 모델을 다운로드하고 있습니다.
모델 다운로드를 트리거하고 작성기를 시작하려면 Writer.create()
함수를 호출하세요. availability()
에 대한 대답이 downloadable
인 경우 다운로드 진행률을 수신 대기하고 사용자에게 알립니다. 다운로드에 시간이 걸릴 수 있기 때문입니다.
const writer = await Writer.create({
monitor(m) {
m.addEventListener("downloadprogress", e => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
}
});
API 함수
create()
함수를 사용하면 새 작성기 객체를 구성할 수 있습니다. 다음 매개변수가 있는 선택적 options
객체를 사용합니다.
tone
: 글의 어조는 콘텐츠의 스타일, 캐릭터 또는 태도를 나타낼 수 있습니다. 값은formal
,neutral
(기본값) 또는casual
로 설정할 수 있습니다.format
: 출력 형식입니다. 허용되는 값은markdown
(기본값) 및plain-text
입니다.length
: 출력의 길이입니다. 허용되는 값은short
,medium
(기본값),long
입니다.sharedContext
: 여러 출력을 작성할 때 공유 컨텍스트를 사용하면 모델이 사용자의 기대에 더 부합하는 콘텐츠를 만들 수 있습니다.
다음 예에서는 writer
객체를 시작하는 방법을 보여줍니다.
const options = {
sharedContext: 'This is an email to acquaintances about an upcoming event.',
tone: 'casual',
format: 'plain-text',
length: 'medium',
};
const available = await Writer.availability();
let writer;
if (available === 'unavailable') {
// The Writer API isn't usable.
return;
}
if (available === 'available') {
// The Writer API can be used immediately .
writer = await Writer.create(options);
} else {
// The Writer can be used after the model is downloaded.
const writer = await Writer.create({
...options,
monitor(m) {
m.addEventListener("downloadprogress", e => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
}
});
}
글 작성
모델에서 글을 출력하는 방법에는 스트리밍과 비스트리밍 두 가지가 있습니다.
비스트리밍 출력
비스트리밍 쓰기를 사용하면 모델이 입력을 전체적으로 처리한 다음 출력을 생성합니다.
스트리밍되지 않는 출력을 가져오려면 비동기 write()
함수를 호출하세요. 작성하려는 콘텐츠에 대한 프롬프트를 포함해야 합니다. 선택사항인 context
를 추가하여 모델에 배경 정보를 제공할 수 있습니다. 이렇게 하면 모델이 출력에 대한 기대치를 더 잘 충족할 수 있습니다.
// Non-streaming
const writer = await Writer.create();
const result = await writer.write(
"An inquiry to my bank about how to enable wire transfers on my account.", {
context: "I'm a longstanding customer",
},
);
스트림 쓰기 출력
스트리밍은 결과를 실시간으로 제공합니다. 입력이 추가되고 조정되면 출력이 지속적으로 업데이트됩니다.
스트리밍 작성기를 가져오려면 writeStreaming()
함수를 호출하고 스트림에서 사용 가능한 텍스트 세그먼트를 반복합니다. 선택사항인 context
를 추가하여 모델에 배경 정보를 제공할 수 있습니다. 이렇게 하면 모델이 출력에 대한 기대치를 더 잘 충족할 수 있습니다.
// Streaming
const writer = await Writer.create();
const stream = writer.writeStreaming(
"An inquiry to my bank about how to enable wire transfers on my account.", {
context: "I'm a longstanding customer",
},
);
for await (const chunk of stream) {
composeTextbox.append(chunk);
}
여러 작업의 컨텍스트 공유
writer
를 사용하여 여러 콘텐츠를 생성할 수 있습니다. 이 경우 sharedContext
를 추가하는 것이 유용합니다. 예를 들어 검토자가 댓글에서 더 나은 의견을 제공할 수 있도록 지원할 수 있습니다.
// Shared context and per writing task context
const writer = await Writer.create({
sharedContext: "This is for publishing on [popular website name], a business and employment-focused social media platform."
});
const stream = writer.writeStreaming(
"Write a blog post about how I love all this work on gen AI at Google!" +
"Mention that there's 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."}
);
for await (const chunk of stream) {
composeTextbox.append(chunk);
}
작성자 재사용
동일한 작성자를 사용하여 여러 콘텐츠를 만들 수 있습니다.
// Reuse a writer
const writer = await Writer.create({ tone: "formal" });
const reviews = await Promise.all(
Array.from(
document.querySelectorAll("#reviews > .review"),
(reviewEl) => writer.write(reviewEl.textContent)
),
);
작성자 중지
쓰기 프로세스를 종료하려면 컨트롤러를 중단하고 작성기를 삭제합니다.
// Aborting a writer
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const writer = await Writer.create({ signal: controller.signal });
await writer.write(reviewEl.textContent, { signal: controller.signal });
// Destroying a writer
writer.destroy();
데모
참여 및 의견 공유
Writer 및 Rewriter API는 현재 활발히 논의되고 있으며 향후 변경될 수 있습니다. 이 API를 사용해 보고 의견이 있으면 알려주세요.
- 설명 읽기, 질문하기, 토론에 참여하기
- Chrome 상태에서 Chrome 구현을 검토하세요.
- 사전 체험 프로그램에 참여하여 새로운 API를 미리 살펴보고 메일링 리스트에 액세스하세요.
- Chrome 구현에 관한 의견이 있으면 Chromium 버그를 신고하세요.
브라우저에서 Gemini Nano 및 기타 전문가 모델을 비롯한 모델을 사용하는 모든 기본 제공 AI API를 살펴봅니다.