Yayınlanma tarihi: 20 Mayıs 2025, Son güncelleme tarihi: 21 Ekim 2026
| Açıklayıcı | Web | Uzantılar | Chrome Durumu | Amaç |
|---|---|---|---|---|
| GitHub | Görünüm | Gönderim Amacı | ||
| GitHub | Görünüm | Deneme niyeti |
Prompt API ile Chrome'daki temel modele doğal dilde istekler gönderebilirsiniz.
Prompt API'yi birçok şekilde kullanabilirsiniz. Örneğin, şunları oluşturabilirsiniz:
- Yapay zeka destekli arama: Web sayfasının içeriğine göre soruları yanıtlayın.
- Kişiselleştirilmiş haber feed'leri: Makaleleri kategorilere göre dinamik olarak sınıflandıran bir feed oluşturun ve kullanıcıların bu içeriği filtrelemesine olanak tanıyın.
- Özel içerik filtreleri. Haber makalelerini analiz edin ve kullanıcı tarafından tanımlanan konulara göre içeriği otomatik olarak bulanıklaştırın veya gizleyin.
- Takvim etkinliği oluşturma. Web sayfalarından etkinlik ayrıntılarını otomatik olarak çıkaran bir Chrome uzantısı geliştirerek kullanıcıların yalnızca birkaç adımda takvim girişi oluşturmasını sağlayın.
- Sorunsuz kişi ayıklama. Web sitelerinden iletişim bilgilerini çıkaran bir uzantı oluşturarak kullanıcıların bir işletmeyle iletişime geçmesini veya kişi listelerine ayrıntı eklemesini kolaylaştırın.
Bunlar, yapabileceklerinizden yalnızca birkaçı. Neler üreteceğinizi görmek için sabırsızlanıyoruz.
Donanım gereksinimlerini inceleme
Chrome'da bu API'leri kullanan özellikleri çalıştıran geliştiriciler ve kullanıcılar için aşağıdaki şartlar geçerlidir. Diğer tarayıcıların farklı çalışma koşulları olabilir.
Language Detector ve Translator API'leri, masaüstünde Chrome'da çalışır. Bu API'ler mobil cihazlarda çalışmaz.
Prompt API, Summarizer API, Writer API, Rewriter API ve Proofreader API, aşağıdaki koşullar karşılandığında Chrome'da çalışır:
- İşletim sistemi: Windows 10 veya 11; macOS 13 ve sonraki sürümler (Ventura ve sonraki sürümler); Linux; veya Chromebook Plus cihazlarda ChromeOS (Platform 16389.0.0 ve sonraki sürümler). Android, iOS ve ChromeOS için Chrome, Chromebook Plus olmayan cihazlarda henüz temel modelleri kullanan API'ler tarafından desteklenmemektedir.
- Depolama alanı: Chrome profilinizi içeren birimde en az 22 GB boş alan olmalıdır.
- GPU veya CPU: Yerleşik modeller GPU veya CPU ile çalışabilir.
- GPU: Kesinlikle 4 GB'tan fazla VRAM.
- CPU: 16 GB veya daha fazla RAM ve 4 veya daha fazla CPU çekirdeği.
- Not: Ses girişli Prompt API için GPU gerekir.
- Ağ: Sınırsız veri veya sınırsız bağlantı.
Tarayıcı modeli güncelledikçe Gemini Nano'nun tam boyutu değişebilir. Mevcut boyutu belirlemek için chrome://on-device-internals adresini ziyaret edin.
Prompt API'yi kullanma
Prompt API, Chrome'da Gemini Nano modelini kullanır. API, Chrome'da yerleşik olarak bulunur ancak model, bir kaynak API'yi ilk kez kullandığında ayrı olarak indirilir.
Modelin kullanıma hazır olup olmadığını belirlemek için LanguageModel.availability() yöntemini çağırın.
const availability = await LanguageModel.availability({
// The same options in `prompt()` or `promptStreaming()`
});
İndirme işlemini tetiklemek ve dil modelini örneklendirmek için kullanıcı etkinliğini kontrol edin. Ardından create() işlevini çağırın.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
availability() için yanıt downloading ise indirme işleminin ilerleme durumunu dinleyin ve indirme işlemi zaman alabileceğinden kullanıcıyı bilgilendirin.
Oturum oluşturma
Prompt API çalıştırılabildiğinde create() işleviyle bir oturum oluşturursunuz.
const session = await LanguageModel.create();
create() işlevinin isteğe bağlı seçenekler nesnesi, oturumu sonlandırmak için bir AbortSignal iletmenize olanak tanıyan bir signal alanı alır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
Örnekleme parametreleri
Örneklemeyi kontrol ederek modelin yanıtlarının ne kadar tahmin edilebilir (deterministik) veya yaratıcı (çeşitli) olacağını ayarlayabilirsiniz. Örnekleme parametrelerinin kullanılabilirliği, web platformu ile Chrome uzantıları arasında farklılık gösterir:
- Web: Çıktı tahmin edilebilirliğini ayarlamak için ham sayılar yerine açıklayıcı enum değerleri kullanan
samplingModeseçeneğini kullanın. - Chrome Uzantıları: Eski sayısal parametreler (
topK,temperature) veLanguageModel.params()yöntemi desteklenir.
Web örnekleme modu
samplingMode seçeneğini LanguageModel.create() (veya LanguageModel.availability()) komutuna iletin.
Desteklenen samplingMode enum değerleri şunlardır:
"most-predictable": En yüksek belirlenebilirlik ve öngörülebilirlik."predictable": Minimum varyasyonla daha öngörülebilir çıkış."slightly-predictable": Biraz tahmin edilebilir çıkış."balanced": Tahmin edilebilirlik ile yaratıcılık arasında denge (tipik varsayılan davranış)."slightly-creative": Biraz çeşitli ve yaratıcı çıkış."creative": Yaratıcı ve çeşitli çıktılar."most-creative": Maksimum değişkenlik ve yaratıcılık.
// Available on the web with the Sampling Parameters Origin Trial enabled
const session = await LanguageModel.create({
samplingMode: 'creative',
});
// The configured sampling mode is exposed on the session instance
console.log(session.samplingMode);
// "creative"
Chrome uzantıları için örnekleme parametreleri
Chrome uzantılarında Prompt API kullanılırken her oturum, seçenekler nesnesi kullanılarak topK ve temperature ile özelleştirilebilir.
Statik LanguageModel.params() işlevi, dil modelinin varsayılan ve maksimum parametre sınırları hakkında bilgi verir:
defaultTopK: Varsayılan top-K değeri.maxTopK: Maksimum üst K değeri.defaultTemperature: Varsayılan sıcaklık.maxTemperature: Maksimum sıcaklık.
// Only available in Chrome Extensions
const params = await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
// Initializing a new session in extensions must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.min(params.defaultTemperature * 1.2, params.maxTemperature),
topK: params.defaultTopK,
});
console.log(slightlyHighTemperatureSession.temperature);
console.log(slightlyHighTemperatureSession.topK);
İlk istemlerle bağlam ekleme
İlk istemlerle, dil modeline önceki etkileşimler hakkında bağlam sağlayabilirsiniz. Örneğin, kullanıcının tarayıcıyı yeniden başlattıktan sonra kayıtlı bir oturumu devam ettirmesine izin verebilirsiniz.
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. [...]',
},
],
});
Yanıtlara önekle kısıtlama getirme
Modelin önceki yanıtlarını ayrıntılı olarak açıklamak için önceki rollere ek olarak "assistant" rolü ekleyebilirsiniz. Örneğin:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
Bazı durumlarda, yeni bir yanıt istemek yerine "assistant" rolü yanıt mesajının bir kısmını önceden doldurmak isteyebilirsiniz. Bu, dil modelini belirli bir yanıt biçimini kullanmaya yönlendirmek için yararlı olabilir. Bunu yapmak için sondaki "assistant" rolü mesajına prefix: true ekleyin. Örneğin:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
Beklenen giriş ve çıkışı ekleme
Prompt API, çok formatlı özelliklere sahiptir ve birden fazla dili destekler. Oturumunuzu oluştururken expectedInputs ve expectedOutputs modalitelerini ve dillerini ayarlayın.
type: Modalite bekleniyor.expectedInputsiçin bu değertext,imageveyaaudioolabilir.expectedOutputsiçin Prompt API yalnızcatextdeğerine izin verir.
languages: Beklenen dili veya dilleri ayarlamak için kullanılan dizi. Prompt API;"en","ja","es","de"ve"fr"parametrelerini kabul eder. Daha fazla dil için destek geliştirme aşamasındadır.expectedInputsiçin sistem istemi dilini ve beklenen bir veya daha fazla kullanıcı istemi dilini ayarlayın.- Bir veya daha fazla
expectedOutputsdili ayarlayın.
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
Model, desteklenmeyen bir giriş veya çıkışla karşılaşırsa "NotSupportedError" DOMException hatası alabilirsiniz.
Çok formatlı özellikler
Bu özelliklerle şunları yapabilirsiniz:
- Kullanıcıların, sohbet uygulamasında gönderilen sesli mesajları metne dönüştürmesine izin verin.
- Web sitenize yüklenen bir resmi, başlık veya alternatif metinde kullanılmak üzere açıklayın.
Prompt API'yi ses girişiyle kullanmak için Mediarecorder Audio Prompt demosuna, Prompt API'yi resim girişiyle kullanmak için ise Canvas Image Prompt demosuna göz atın.
Prompt API aşağıdaki giriş türlerini destekler:
- Ses:
- Görsel:
HTMLImageElementSVGImageElementHTMLVideoElement(mevcut video konumundaki video karesini kullanır)HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
Bu snippet, önce iki görseli (bir resim Blob ve bir HTMLCanvasElement) işleyen ve yapay zekanın bunları karşılaştırmasını sağlayan, ardından kullanıcının ses kaydıyla (AudioBuffer olarak) yanıt vermesine olanak tanıyan çok formatlı bir oturumu gösterir.
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en"] },
{ type: "audio" },
{ type: "image" },
],
expectedOutputs: [{ type: "text", languages: ["en"] }],
});
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 audioBuffer = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBuffer },
],
},
]);
console.log(response2);
Mesaj ekleme
Çıkarım işlemi, özellikle çok formatlı girişlerle istemde bulunurken biraz zaman alabilir. Oturumu doldurmak için önceden belirlenmiş istemleri önceden göndermek yararlı olabilir. Böylece model, işlemeye erken başlayabilir.
initialPrompts, oturum oluşturma sırasında faydalı olsa da append() yöntemi, oturum oluşturulduktan sonra ek bağlamsal istemler sağlamak için prompt() veya promptStreaming() yöntemlerine ek olarak kullanılabilir.
Örneğin:
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a skilled analyst who correlates patterns across multiple images.',
},
],
expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
await session.append([
{
role: 'user',
content: [
{
type: 'text',
value: `Here's one image. Notes: ${fileNotesInput.value}`,
},
{ type: 'image', value: fileUpload.files[0] },
],
},
]);
};
analyzeButton.onclick = async (e) => {
analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
append() tarafından döndürülen promise, istem doğrulanıp işlendikten ve oturuma eklendikten sonra yerine getirilir. İstem eklenemezse vaat reddedilir.
JSON şeması iletme
Değer olarak bir JSON şeması iletmek için prompt() veya promptStreaming() yöntemine responseConstraint alanını ekleyin. Ardından Prompt API ile yapılandırılmış çıkış özelliğini kullanabilirsiniz.
Aşağıdaki örnekte JSON şeması, modelin belirli bir mesajın çömlekçilikle ilgili olup olmadığını sınıflandırmak için true veya false ile yanıt vermesini sağlar.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
Uygulamanız, modele gönderilen mesajın bir parçası olarak JSON şeması veya normal ifade içerebilir. Bu işlem, bağlam penceresinin bir kısmını kullanır. session.measureContextUsage() için responseConstraint seçeneğini kullanarak bağlam penceresinin ne kadarını kullanacağını ölçebilirsiniz.
omitResponseConstraintInput seçeneğiyle bu davranışı önleyebilirsiniz. Bu yöntemi kullanırsanız isteme bazı talimatlar eklemenizi öneririz:
const result = await session.prompt(`
Summarize this feedback into a rating between 0-5. Only output a JSON
object { rating }, with a single property whose value is a number:
The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });
Modele istem girme
Modeli prompt() veya promptStreaming() işlevleriyle istemleyebilirsiniz.
İsteğe dayalı çıkış
Kısa bir sonuç bekliyorsanız yanıt hazır olduğunda yanıtı döndüren prompt() işlevini kullanabilirsiniz.
// 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 available = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
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);
}
Akış çıkışı
Daha uzun bir yanıt bekliyorsanız modelden gelen kısmi sonuçları göstermenize olanak tanıyan promptStreaming() işlevini kullanmanız gerekir. promptStreaming() işlevi, ReadableStream döndürür.
const available = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
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);
}
}
İstemleri durdurma
Hem prompt() hem de promptStreaming(), istemleri çalıştırmayı durdurmanıza olanak tanıyan signal alanına sahip isteğe bağlı ikinci bir parametreyi kabul eder.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
Oturum yönetimi
Her oturum, görüşmenin bağlamını takip eder. Önceki etkileşimler, oturumun bağlam penceresi dolana kadar gelecekteki etkileşimler için dikkate alınır.
Her oturumun işleyebileceği maksimum jeton sayısı vardır. Bu sınıra ulaşma durumunuzu aşağıdaki yöntemlerle kontrol edebilirsiniz:
console.log(`${session.contextUsage}/${session.contextWindow}`);
Bağlam penceresinin taşmasına neden olan bir istem göndermek mümkündür. Bu gibi durumlarda, yeni istemi işlemek için yeterli jeton kullanılabilir olana kadar dil modeliyle yapılan sohbetin ilk kısımları, her seferinde bir istem ve yanıt çifti olacak şekilde kaldırılır. Sistem istemi bunun istisnasıdır ve hiçbir zaman kaldırılmaz.
Bu tür taşmalar, oturumda contextoverflow etkinliği dinlenerek tespit edilebilir:
session.addEventListener("contextoverflow", () => {
console.log("We've gone past the context window, and some inputs will be dropped!");
});
Yeni istemi işlemek için görüşme geçmişinden yeterli sayıda jeton kaldırılamıyorsa prompt() veya promptStreaming() çağrısı QuotaExceededError istisnasıyla başarısız olur ve hiçbir şey kaldırılmaz. QuotaExceededError aşağıdaki özelliklere sahiptir:
requested: Girişin kaç jetondan oluştuğucontextWindow: Kaç jetonun kullanılabilir olduğu
Oturum yönetimi hakkında daha fazla bilgi edinin.
Oturum kopyalama
Kaynakları korumak için clone() işleviyle mevcut bir oturumu kopyalayabilirsiniz. Bu işlem, bağlamın ve ilk istemin korunduğu bir sohbet kopyası oluşturur.
clone() işlevi, signal alanı içeren isteğe bağlı bir seçenekler nesnesi alır. Bu nesne, klonlanmış oturumu yok etmek için bir AbortSignal iletmenize olanak tanır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Oturumu sonlandırma
Artık bir oturuma ihtiyacınız yoksa kaynakları serbest bırakmak için destroy() yöntemini çağırın. İmha edilen oturumlar artık kullanılamaz ve devam eden yürütme işlemleri iptal edilir. Modeli sık sık istemde bulunmayı planlıyorsanız oturumu açık tutmak isteyebilirsiniz. Oturum oluşturmak biraz zaman alabilir.
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 choosing between a t-shirt
and a polo."
);
Demolar
Prompt API'nin birçok kullanım alanını keşfetmek için birden fazla demo oluşturduk. Aşağıdaki demolar web uygulamalarıdır:
Chrome uzantılarında Prompt API'yi test etmek için demo uzantısını yükleyin. Uzantı kaynak kodu GitHub'da mevcuttur.
Performans stratejisi
Web için Prompt API'nin geliştirme süreci devam ediyor. Bu API'yi oluştururken optimum performans için oturum yönetimi ile ilgili en iyi uygulamalarımıza göz atın.
İzin Politikası, iframe'ler ve Web Worker'lar
Prompt API, varsayılan olarak yalnızca üst düzey pencerelerde ve bunların aynı kökenli iframe'lerinde kullanılabilir. API'ye erişim, Permission Policy allow="" özelliği kullanılarak çapraz kaynak iframe'lere devredilebilir:
<!--
The hosting site at https://main.example.com can grant a cross-origin iframe
at https://cross-origin.example.com/ access to the Prompt API by
setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>
İzin politikası durumunu kontrol etmek amacıyla her çalışan için sorumlu bir belge oluşturmanın karmaşıklığı nedeniyle Prompt API şu anda Web Worker'larda kullanılamamaktadır.
Katılma ve geri bildirim paylaşma
Geri bildiriminiz, bu API'nin ve tüm yerleşik yapay zeka API'lerinin gelecekteki sürümlerini nasıl oluşturup uygulayacağımızı doğrudan etkileyebilir.
- Chrome'un uygulamasıyla ilgili geri bildirim için hata raporu veya özellik isteği gönderin.
- Mevcut bir soruna yorum yaparak veya Prompt API GitHub deposunda yeni bir sorun açarak API şekliyle ilgili geri bildiriminizi paylaşın.
- Erken erişim programına katılın.