Yayınlanma tarihi: 20 Mayıs 2025, Son güncelleme tarihi: 21 Eylül 2025
Açıklayıcı | Web | Uzantılar | Chrome Durumu | Amaç |
---|---|---|---|---|
GitHub | Görünüm | Deneme Yapma Amacı |
Prompt API ile tarayıcıda Gemini Nano'ya doğal dil istekleri gönderebilirsiniz.
İstem API'sini birçok farklı ş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 etme ve kullanıcı tarafından tanımlanan konulara göre içeriği otomatik olarak bulanıklaştırma veya gizleme
- Takvim etkinliği oluşturma Web sayfalarından etkinlik ayrıntılarını otomatik olarak ayıklayan bir Chrome uzantısı geliştirin. Böylece kullanıcılar, yalnızca birkaç adımda takvim girişleri oluşturabilir.
- Sorunsuz kişi ayıklama. Web sitelerinden iletişim bilgilerini ayıklayan bir uzantı oluşturarak kullanıcıların işletmelerle iletişim kurmasını veya iletişim listelerine ayrıntı eklemesini kolaylaştırın.
Bunlar sadece birkaç olasılık. Neler oluşturacağınızı görmek için sabırsızlanıyoruz.
Donanım gereksinimlerini inceleyin
Geliştiriciler ve Chrome'da bu API'leri kullanarak özellikleri çalıştıran kullanıcılar için aşağıdaki şartlar geçerlidir. Diğer tarayıcıların farklı işletim gereksinimleri olabilir.
Dil Algılayıcı ve Çeviri API'leri masaüstündeki Chrome'da çalışır. Bu API'ler mobil cihazlarda çalışmaz. İstem API'si, Özetleyici API'si, Yazıcı API'si, Yeniden Yazıcı API'si ve Redaksiyon API'si, aşağıdaki koşullar karşılandığında Chrome'da çalışır:
- İşletim sistemi: Windows 10 veya 11; macOS 13+ (Ventura ve sonraki sürümler); Linux; ya da Chromebook Plus cihazlarda ChromeOS (Platform 16389.0.0 ve sonraki sürümler). Android, iOS ve Chromebook Plus olmayan cihazlarda ChromeOS için Gemini Nano'yu kullanan API'ler henüz desteklenmemektedir.
- Depolama: Chrome profilinizi içeren birimde en az 22 GB boş alan olmalıdır.
- GPU: Kesinlikle 4 GB'tan fazla VRAM.
- Ağ: Sınırsız veri veya ölçülmeyen bağlantı.
Tarayıcı modeli güncellediğinden 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'a yerleşik olsa da model, bir kaynak API'yi ilk kez kullandığında ayrı olarak indirilir. Bu API'yi kullanmadan önce Google'ın Üretken Yapay Zeka Yasaklanan Kullanım Politikası'nı kabul edin.
Modelin kullanıma hazır olup olmadığını belirlemek için LanguageModel.availability()
numaralı telefonu arayın.
const availability = await LanguageModel.availability();
Modelin indirilebilmesi için tıklama, dokunma veya tuşa basma gibi bir kullanıcı etkileşimi olması gerekir.
Yanıt downloadable
veya downloading
ise model ve API'ler kullanılabilir ancak özellikleri kullanabilmeniz için önce indirilmesi gerekir. İndirmeye izin verilmesi için kullanıcının sayfayla etkileşim kurması (ör. tıklama, dokunma veya tuşa basma) gerekir.
Modeli indirip örneklemek için create()
işlevini çağırın.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
availability()
yanıtı downloading
ise indirme işleminin ilerleme durumunu dinleyin ve indirme işlemi zaman alabileceği için kullanıcıyı bilgilendirin.
Model parametreleri
params()
işlevi, dil modelinin parametreleri hakkında bilgi verir. Nesnede aşağıdaki alanlar bulunur:
defaultTopK
: Varsayılan üst K değeri.maxTopK
: Maksimum üst K değeri.defaultTemperature
: Varsayılan sıcaklık.maxTemperature
: Maksimum sıcaklık.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
Oturum oluşturma
Prompt API çalıştırılabildiğinde create()
işleviyle bir oturum oluşturursunuz.
Her oturum, isteğe bağlı bir seçenekler nesnesi kullanılarak topK
ve temperature
ile özelleştirilebilir. Bu parametrelerin varsayılan değerleri LanguageModel.params()
tarafından döndürülür.
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()
işlevinin isteğe bağlı seçenekler nesnesi, oturumu sonlandırmak için AbortSignal
iletmenize olanak tanıyan bir signal
alanı da alır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
İlk istemlerle bağlam ekleme
İlk istemlerle, dil modeline önceki etkileşimlerle ilgili bağlam sağlayabilirsiniz. Örneğin, kullanıcının tarayıcı yeniden başlatıldıktan sonra depolanmış bir oturuma devam etmesine 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ıtları önekle sınırlama
Modelin önceki yanıtlarını ayrıntılandırmak için önceki rollerin yanı sıra "assistant"
rolü de 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 bölümünü önceden doldurmak isteyebilirsiniz. Bu, dil modelini belirli bir yanıt biçimini kullanmaya yönlendirmek için faydalı olabilir. Bunu yapmak için sondaki "assistant"
-role 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
modaliteleri ve dilleri ayarlayın.
type
: Yöntem bekleniyor.expectedInputs
için bu değertext
,image
veyaaudio
olabilir.expectedOutputs
için istem API'si yalnızcatext
'ye izin verir.
languages
: Beklenen dili veya dilleri ayarlamak için kullanılan dizi. İstem API'si"en"
,"ja"
ve"es"
değerlerini kabul eder. Başka diller için destek geliştirme aşamasındadır.expectedInputs
için sistem istemi dilini ve beklenen bir veya daha fazla kullanıcı istemi dilini ayarlayın.- Bir veya daha fazla
expectedOutputs
dil 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, bir sohbet uygulamasında gönderilen sesli mesajları yazıya dökmesine izin verin.
- Altyazı veya alternatif metin olarak kullanılmak üzere web sitenize yüklenen bir resmi açıklayın.
Ses girişiyle Prompt API'yi kullanmak için Mediarecorder Audio Prompt demosuna, görüntü girişiyle Prompt API'yi kullanmak için ise Canvas Image Prompt demosuna göz atın.
İletileri ekleme
Çıkarım, özellikle çok formatlı girişlerle istem oluştururken biraz zaman alabilir. Oturumu doldurmak için önceden belirlenmiş istemleri önceden göndermek yararlı olabilir. Böylece model, işlemeye önceden 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 söz, istem doğrulandıktan, işlendikten ve oturuma eklendikten sonra yerine getirilir. İstem eklenemezse söz reddedilir.
JSON şeması iletme
Değer olarak bir JSON şeması iletmek için responseConstraint
alanını prompt()
veya promptStreaming()
yöntemine ekleyin. Ardından, Prompt API ile yapılandırılmış çıkış 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, giriş kotasının bir kısmını kullanır. responseConstraint
seçeneğini session.measureInputUsage()
'ye ileterek giriş kotasının ne kadarının kullanılacağını ölçebilirsiniz.
omitResponseConstraintInput
seçeneğiyle bu davranışı önleyebilirsiniz. Bu durumda 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
Modele prompt()
veya promptStreaming()
işlevleriyle istem girebilirsiniz.
Yayınlanmayan çıkış
Kısa bir sonuç bekliyorsanız yanıtı kullanılabilir olduğunda 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 { 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);
}
Yayınlanan çıkış
Daha uzun bir yanıt bekliyorsanız promptStreaming()
işlevini kullanmanız gerekir. Bu işlev, modelden gelen kısmi sonuçları göstermenize olanak tanır. promptStreaming()
işlevi ReadableStream
değerini döndürür.
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);
}
}
İstemleri durdurma
Hem prompt()
hem de promptStreaming()
, signal
alanıyla isteğe bağlı ikinci bir parametreyi kabul eder. Bu parametre, istemleri çalıştırmayı durdurmanıza olanak tanır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
Oturum yönetimi
Her oturumda görüşmenin bağlamı takip edilir. Oturumun bağlam penceresi dolana kadar önceki etkileşimler, 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 yolunda ne kadar ilerlediğinizi aşağıdaki yöntemlerle kontrol edebilirsiniz:
console.log(`${session.inputUsage}/${session.inputQuota}`);
Oturum yönetimi hakkında daha fazla bilgi edinin.
Oturum klonlama
Kaynakları korumak için clone()
işlevini kullanarak mevcut bir oturumu klonlayabilirsiniz. Sohbet bağlamı sıfırlanır ancak ilk istem değişmez. clone()
işlevi, signal
alanına sahip isteğe bağlı bir seçenekler nesnesi alır. Bu alan, klonlanmış oturumu yok etmek için AbortSignal
iletmenize olanak tanır.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Oturumu sonlandırma
Bir oturuma artık ihtiyacınız yoksa kaynakları serbest bırakmak için destroy()
numaralı telefonu arayın. Bir oturum yok edildiğinde artık kullanılamaz ve devam eden yürütmeler iptal edilir. Oturum oluşturmak biraz zaman alabileceğinden, modele sık sık istem göndermeyi planlıyorsanız oturumu açık tutmak isteyebilirsiniz.
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 etmektedir. Bu API'yi oluştururken en iyi performans için oturum yönetimi ile ilgili en iyi uygulamalarımıza göz atın.
İzin politikası, iframe'ler ve Web Workers
Prompt API varsayılan olarak yalnızca üst düzey pencerelerde ve aynı kaynaklı iFrame'lerde kullanılabilir. API'ye erişim, Permission Policy allow=""
özelliği kullanılarak kaynaklar arası 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 için her çalışanla ilgili sorumlu bir belge oluşturmanın karmaşıklığı nedeniyle Prompt API şu anda Web Workers'da kullanılamamaktadır.
Katılın ve geri bildirim paylaşın
Geri bildiriminiz, bu API'nin ve tüm yerleşik yapay zeka API'lerinin gelecekteki sürümlerinin nasıl oluşturulacağını ve uygulanacağını 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.