Prompt API ile yapay zeka oturumu yönetimi için en iyi uygulamalar

Yayınlanma tarihi: 27 Ocak 2025

Prompt API, Chrome ekibinin keşfettiği yerleşik yapay zeka API'lerinden biridir. Erken önizleme programına katılarak yerel olarak uygulamalarınızla veya Chrome uzantıları için Prompt API kaynak deneme sürümüne kaydolarak Chrome uzantılarınızda üretim sürümünde test edebilirsiniz. İstem API'sinin önemli özelliklerinden biri oturumlardır. Bu özellikler, yapay zeka modeliyle devam eden bir veya daha fazla görüşme yapmanıza olanak tanır. Bu sırada model, söylenenlerin bağlamını kaybetmez. Bu kılavuzda, dil modeliyle oturum yönetimiyle ilgili en iyi uygulamalar tanıtılmaktadır.

Bir veya daha fazla paralel oturum için oturum yönetimi kullanım alanlarına örnek olarak, bir kullanıcının yapay zeka ile etkileşim kurduğu klasik chatbot'lar veya bir müşteri temsilcisinin birden fazla müşteriyle paralel olarak ilgilendiği ve çeşitli sohbetleri takip etmesine yardımcı olmak için yapay zekadan yararlandığı müşteri ilişkileri yönetimi sistemleri verilebilir.

Sistem istemiyle oturum başlatma

Dikkat etmeniz gereken ilk kavram sistem istemidir. Bir oturumun genel bağlamını oturumun başında ayarlar. Örneğin, sisteme nasıl yanıt vermesi gerektiğini bildirmek için sistem isteminden yararlanabilirsiniz.

// Make this work in web apps and in extensions.
const aiNamespace = self.ai || chrome.aiOriginTrial || chrome.ai;
const languageModel = await aiNamespace.languageModel.create({
  systemPrompt: 'You are a helpful assistant and you speak like a pirate.',
});
console.log(await languageModel.prompt('Tell me a joke.'));
// 'Avast ye, matey! What do you call a lazy pirate?\n\nA **sail-bum!**\n\nAhoy there, me hearties!  Want to hear another one? \n'

Ana oturumu klonlama

Bir oturum sona erdiğinde yeni bir oturum başlatmak istediğiniz veya farklı oturumlarda paralel olarak bağımsız görüşmeler yapmak istediğiniz bir uygulamanız varsa ana oturumu klonlama kavramından yararlanabilirsiniz. Klon, orijinalden temperature veya topK gibi oturum parametrelerinin yanı sıra olası oturum etkileşim geçmişini devralır. Örneğin, ana oturumu bir sistem istemiyle başlattıysanız bu seçenek yararlı olur. Bu sayede, uygulamanızın bu işlemi yalnızca bir kez yapması gerekir ve tüm kopyalar ana oturumu devralır.

// Make this work in web apps and in extensions.
const aiNamespace = self.ai || chrome.aiOriginTrial || chrome.ai;
const languageModel = await aiNamespace.languageModel.create({
  systemPrompt: 'You are a helpful assistant and you speak like a pirate.',
});

// The original session `languageModel` remains unchanged, and
// the two clones can be interacted with independently from each other.
const firstClonedLanguageModel = await languageModel.clone();
const secondClonedLanguageModel = await languageModel.clone();
// Interact with the sessions independently.
await firstClonedLanguageModel.prompt('Tell me a joke about parrots.');
await secondClonedLanguageModel.prompt('Tell me a joke about treasure troves.');
// Each session keeps its own context.
// The first session's context is jokes about parrots.
await firstClonedLanguageModel.prompt('Tell me another.');
// The second session's context is jokes about treasure troves.
await secondClonedLanguageModel.prompt('Tell me another.');

Geçmiş bir oturumu geri yükleme

Öğrenmeniz gereken üçüncü kavram, ilk istemler kavramıdır. Orijinal amacı, n istemli istem için kullanmaktır. Yani modeli n örnek istem ve yanıtla hazırlamak için kullanılır. Böylece gerçek istemlere verdiği yanıtlar daha doğru olur. Modelle devam eden sohbetleri takip ederseniz, örneğin tarayıcı yeniden başlatıldıktan sonra oturumu geri yüklemek için ilk istemler kavramını "kötüye kullanabilir" ve böylece kullanıcının modelde kaldığı yerden devam etmesini sağlayabilirsiniz. Aşağıdaki kod snippet'inde, localStorage'ta oturum geçmişini takip ettiğiniz varsayılarak bu konuya nasıl yaklaşabileceğiniz gösterilmektedir.

// Make this work in web apps and in extensions.
const aiNamespace = self.ai || chrome.aiOriginTrial || chrome.ai;

// Restore the session from localStorage, or initialize a new session.
// The UUID is hardcoded here, but would come from a
// session picker in your user interface.
const uuid = '7e62c0e0-6518-4658-bc38-e7a43217df87';

function getSessionData(uuid) {
  try {
    const storedSession = localStorage.getItem(uuid);
    return storedSession ? JSON.parse(storedSession) : false;
  } catch {
    return false;
  }
}

let sessionData = getSessionData(uuid);

// Initialize a new session.
if (!sessionData) {
  // Get the current default parameters so they can be restored as they were,
  // even if the default values change in the future.
  const { defaultTopK, defaultTemperature } =
    await aiNamespace.languageModel.capabilities();
  sessionData = {
    systemPrompt: '',
    initialPrompts: [],
    topK: defaultTopK,
    temperature: defaultTemperature,
  };
}

// Initialize the session with the (previously stored or new) session data.
const languageModel = await aiNamespace.languageModel.create(sessionData);

// Keep track of the ongoing conversion and store it in localStorage.
const prompt = 'Tell me a joke';
try {
  const stream = languageModel.promptStreaming(prompt);
  let result = '';
  // You can already work with each `chunk`, but then store
  // the final `result` in history.
  for await (const chunk of stream) {
    // In practice, you'd render the chunk.
    console.log(chunk);
    result = chunk;
  }

  sessionData.initialPrompts.push(
    { role: 'user', content: prompt },
    { role: 'assistant', content: result },
  );

  // To avoid growing localStorage infinitely, make sure to delete
  // no longer used sessions from time to time.
  localStorage.setItem(uuid, JSON.stringify(sessionData));
} catch (err) {
  console.error(err.name, err.message);
}

Yanıtı yararlı olmadığında kullanıcının modeli durdurmasına izin vererek oturum kotasını koruma

Her oturumun, oturumun ilgili alanlarına (maxTokens, tokensLeft ve tokensSoFar) erişerek görebileceğiniz bir bağlam penceresi vardır.

const { maxTokens, tokensLeft, tokensSoFar } = languageModel;

Bu bağlam aralığı aşıldığında oturum en eski iletilerin izini kaybeder. Bu bağlam önemli olabileceğinden bu durum istenmeyebilir. Kotayı korumak için, kullanıcı bir istem gönderdikten sonra cevabın yararlı olmayacağını görürse AbortController kullanarak dil modelinin yanıt vermesini durdurmasına izin verin. Hem prompt() hem de promptStreaming() yöntemleri, kullanıcının oturumun yanıt vermesini durdurmasına olanak tanıyan bir signal alanı içeren isteğe bağlı ikinci bir parametreyi kabul eder.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

try {
  const stream = languageModel.promptStreaming('Write me a poem!', {
    signal: controller.signal,
  });
  for await (const chunk of stream) {
    console.log(chunk);
  }
} catch (err) {
  // Ignore `AbortError` errors.
  if (err.name !== 'AbortError') {
    console.error(err.name, err.message);
  }
}

Demo

Yapay zeka oturumu yönetimi demosunda yapay zeka oturumu yönetiminin işleyiş şeklini görebilirsiniz. Prompt API ile birden fazla paralel sohbet oluşturun, sekmeyi yeniden yükleyin veya hatta tarayıcınızı yeniden başlatın ve kaldığınız yerden devam edin. GitHub'daki kaynak kodu inceleyin.

Sonuçlar

Bu teknikleri ve en iyi uygulamaları kullanarak yapay zeka oturumlarını dikkatli bir şekilde yöneterek Prompt API'nin tüm potansiyelinden yararlanabilir, daha verimli, duyarlı ve kullanıcı odaklı uygulamalar sunabilirsiniz. Bu yaklaşımları da birleştirebilirsiniz. Örneğin, kullanıcının geri yüklenen geçmiş bir oturumu klonlamasına izin vererek "ne olurdu?" senaryoları çalıştırabilir. Başarılı istemler yazmanız dileğiyle.

Teşekkür ederiz

Bu kılavuz, Sebastian Benz, Andre Bandarra, François Beaufort ve Alexandra Klepper tarafından incelendi.