게시일: 2025년 5월 20일
설명 동영상 | 웹 | 확장 프로그램 | Chrome 상태 | 인텐트 |
---|---|---|---|---|
GitHub | View | 실험 의도 |
Prompt API를 사용하면 브라우저에서 Gemini Nano에 자연어 요청을 보낼 수 있습니다.
Prompt API를 사용하는 방법에는 여러 가지가 있습니다. 웹 애플리케이션 또는 웹사이트에서 다음을 만들 수 있습니다.
- AI 기반 검색: 웹페이지의 콘텐츠를 기반으로 질문에 답변합니다.
- 맞춤 뉴스 피드: 카테고리를 사용하여 기사를 동적으로 분류하고 사용자가 해당 콘텐츠를 필터링할 수 있는 피드를 만듭니다.
위의 예는 몇 가지 예시일 뿐입니다. 여러분이 어떤 결과물을 만들어 내실지 기대됩니다.
하드웨어 요구사항 검토
Language Detector API 및 Translator API는 Chrome의 데스크톱에서만 작동합니다.
Prompt API, Summarizer API, Writer API, Rewriter API는 다음 조건이 충족될 때 Chrome에서 작동합니다.
- 운영체제: Windows 10 또는 11, macOS 13 이상 (Ventura 이상), Linux Android, iOS, ChromeOS용 Chrome은 아직 Gemini Nano를 기반으로 하는 Google API에서 지원되지 않습니다.
- 저장용량: Chrome 프로필이 포함된 볼륨에 22GB 이상 있어야 합니다.
- GPU: VRAM이 4GB를 초과해야 합니다.
- 네트워크: 무제한 데이터 또는 무제한 연결
이러한 요구사항은 개발 프로세스와 개발자가 빌드한 기능을 사용하는 사용자에게 적용됩니다.
Prompt API 사용
LanguageModel
네임스페이스에서 사용할 수 있는 함수는 두 가지입니다.
availability()
를 사용하여 모델의 기능과 사용 가능 여부를 확인합니다.create()
를 사용하여 언어 모델 세션을 시작합니다.
모델 다운로드
Prompt API는 Chrome에서 Gemini Nano 모델을 사용합니다. API는 Chrome에 내장되어 있지만 출처에서 API를 처음 사용할 때는 모델이 별도로 다운로드됩니다.
모델을 사용할 준비가 되었는지 확인하려면 비동기 LanguageModel.availability()
함수를 호출합니다. 그러면 다음 응답 중 하나가 반환됩니다.
"unavailable"
은 구현에서 요청된 옵션을 지원하지 않거나 언어 모델 프롬프트를 전혀 지원하지 않는다는 의미입니다."downloadable"
은 구현이 요청된 옵션을 지원하지만 이러한 옵션을 사용하여 세션을 만들기 전에 먼저 무언가 (예: 언어 모델 자체 또는 미세 조정)를 다운로드해야 함을 의미합니다."downloading"
는 구현이 요청된 옵션을 지원하지만 이러한 옵션을 사용하여 세션을 만들기 전에 진행 중인 다운로드 작업을 완료해야 함을 의미합니다."available"
는 구현에서 새 다운로드 없이 요청된 옵션을 지원함을 의미합니다.
모델 다운로드를 트리거하고 언어 모델 세션을 만들려면 비동기 LanguageModel.availability()
함수를 호출합니다. availability()
에 대한 응답이 'downloadable'
인 경우 다운로드 진행 상황을 리슨하는 것이 좋습니다. 이렇게 하면 다운로드하는 데 시간이 걸리는 경우 사용자에게 알릴 수 있습니다.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
모델 기능
params()
함수는 언어 모델의 매개변수를 알려줍니다. 객체에는 다음 필드가 있습니다.
defaultTopK
: 기본 top-K 값입니다(기본값:3
).maxTopK
: 최대 상위 K개 값 (8
)입니다.defaultTemperature
: 기본 온도(1.0
). 온도 값은0.0
과2.0
사이여야 합니다.maxTemperature
: 최대 온도입니다.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}
세션 만들기
Prompt API를 실행할 수 있게 되면 create()
함수로 세션을 만듭니다.
prompt()
또는 promptStreaming()
함수를 사용하여 모델에 프롬프트를 표시할 수 있습니다.
세션 맞춤설정
각 세션은 선택적 옵션 객체를 사용하여 topK
및 temperature
로 맞춤설정할 수 있습니다. 이러한 매개변수의 기본값은 LanguageModel.params()
에서 반환됩니다.
const params = await LanguageModel.params();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(params.defaultTemperature * 1.2, 2.0),
topK: params.defaultTopK,
});
create()
함수의 선택적 옵션 객체는 signal
필드도 가져옵니다. 이를 통해 AbortSignal
를 전달하여 세션을 소멸할 수 있습니다.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
})
초기 프롬프트
초기 프롬프트를 사용하면 언어 모델에 이전 상호작용에 관한 컨텍스트를 제공할 수 있습니다. 예를 들어 사용자가 브라우저를 다시 시작한 후 저장된 세션을 재개할 수 있도록 할 수 있습니다.
const session = await LanguageModel.create({
initialPrompts: [
{ role: 'system', content: 'You are a helpful and friendly assistant.' },
{ role: 'user', content: 'What is the capital of Italy?' },
{ role: 'assistant', content: 'The capital of Italy is Rome.'},
{ role: 'user', content: 'What language is spoken there?' },
{ role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
]
});
세션 제한
특정 언어 모델 세션에는 처리할 수 있는 최대 토큰 수가 있습니다. 세션 객체에서 다음 속성을 사용하여 사용량과 한도 달성 진행 상황을 확인할 수 있습니다.
console.log(`${session.inputUsage}/${session.inputQuota}`);
세션 지속성
각 세션은 대화의 컨텍스트를 추적합니다. 이전 상호작용은 세션의 컨텍스트 창이 가득 찰 때까지 향후 상호작용에 고려됩니다.
const session = await LanguageModel.create({
initialPrompts: [{
role: "system",
content: "You are a friendly, helpful assistant specialized in clothing choices."
}]
});
const result1 = await session.prompt(
"What should I wear today? It is sunny. I am unsure between a t-shirt and a polo."
);
console.log(result1);
const result2 = await session.prompt(
"That sounds great, but oh no, it is actually going to rain! New advice?"
);
console.log(result2);
세션 클론
리소스를 보존하려면 clone()
함수로 기존 세션을 클론하면 됩니다. 대화 컨텍스트는 재설정되지만 초기 프롬프트는 그대로 유지됩니다. clone()
함수는 signal
필드가 있는 선택적 옵션 객체를 사용합니다. 이 옵션 객체를 사용하면 클론된 세션을 소멸하기 위해 AbortSignal
를 전달할 수 있습니다.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
모델 프롬프트
prompt()
또는 promptStreaming()
함수를 사용하여 모델에 프롬프트를 표시할 수 있습니다.
스트리밍되지 않은 출력
짧은 결과가 예상되는 경우 응답이 제공되면 응답을 반환하는 prompt()
함수를 사용할 수 있습니다.
// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
const session = await LanguageModel.create();
// Prompt the model and wait for the whole result to come back.
const result = await session.prompt("Write me a poem!");
console.log(result);
}
스트리밍된 출력
응답이 더 길 것으로 예상되는 경우 모델에서 들어오는 부분 결과를 표시할 수 있는 promptStreaming()
함수를 사용해야 합니다. promptStreaming()
함수는 ReadableStream
를 반환합니다.
const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
await LanguageModel.params();
const available = await LanguageModel.availability();
if (available !== 'unavailable') {
const session = await LanguageModel.create();
// Prompt the model and stream the result:
const stream = session.promptStreaming('Write me an extra-long poem!');
for await (const chunk of stream) {
console.log(chunk);
}
}
프롬프트 실행 중지
prompt()
와 promptStreaming()
모두 프롬프트 실행을 중지할 수 있는 signal
필드가 있는 선택적 두 번째 매개변수를 허용합니다.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt(
'Write me a poem!',
{ signal: controller.signal }
);
세션 종료
더 이상 세션이 필요하지 않으면 destroy()
를 호출하여 리소스를 해제합니다. 세션이 소멸되면 더 이상 사용할 수 없으며 진행 중인 실행이 중단됩니다. 세션을 만드는 데 시간이 걸릴 수 있으므로 모델에 자주 메시지를 표시하려는 경우 세션을 유지하는 것이 좋습니다.
await session.prompt(
"You are a friendly, helpful assistant specialized in clothing choices."
);
session.destroy();
// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
"What should I wear today? It is sunny, and I am unsure between a
t-shirt and a polo."
);
멀티모달 기능
Prompt API는 로컬 실험을 위해 Chrome 138 Canary의 오디오 및 이미지 입력을 지원합니다. API는 텍스트 출력을 반환합니다.
이러한 기능을 통해 다음 작업을 할 수 있습니다.
- 사용자가 채팅 애플리케이션에서 전송된 음성 메시지를 스크립트로 변환할 수 있도록 허용합니다.
- 캡션이나 대체 텍스트에 사용하기 위해 웹사이트에 업로드된 이미지를 설명합니다.
const session = await LanguageModel.create({
// { type: "text" } is not necessary to include explicitly, unless
// you also want to include expected input languages for text.
expectedInputs: [
{ type: "audio" },
{ type: "image" }
]
});
const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");
const response1 = await session.prompt([{
role: "user",
content: [
{ type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
{ type: "image", value: referenceImage },
{ type: "image", value: userDrawnImage }
]
}]);
console.log(response1);
const audioBlob = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBlob }
]
}]);
멀티모달 데모
오디오 입력으로 Prompt API를 사용하는 방법은 Mediarecorder 오디오 프롬프트 데모를, 이미지 입력으로 Prompt API를 사용하는 방법은 캔버스 이미지 프롬프트 데모를 참고하세요.
의견
의견을 보내주시면 이 API의 미래와 Gemini Nano 개선에 반영됩니다. 전용 작업 API (예: 오디오 스크립트 또는 이미지 설명 API)가 생성되어 개발자와 사용자의 요구사항을 충족할 수도 있습니다.
참여 및 의견 공유
보내 주시는 의견은 향후 이 API 버전과 모든 내장 AI API를 빌드하고 구현하는 방식에 직접적인 영향을 미칠 수 있습니다.
- 사전 미리보기 프로그램에 참여하세요.
- Chrome 구현에 관한 의견이 있으면 버그 신고 또는 기능 요청을 제출하세요.
- 기존 문제에 댓글을 달거나 Prompt API GitHub 저장소에서 새 문제를 열어 API 형식에 관한 의견을 공유하세요.
- 웹 인큐베이터 커뮤니티 그룹에 가입하여 표준 개발에 참여하세요.