Prompt API ile oturum yönetimi için en iyi uygulamalar

Yayınlanma tarihi: 27 Ocak 2025

Açıklayıcı Web Uzantılar Chrome Durumu Amaç
GitHub Kaynak denemesi Origin denemesinde Chrome 138 Görünüm Deneme Yapma Amacı

Prompt API'nin temel özelliklerinden biri oturumlardır. Bu özellikler, yapay zeka modelinin söylenenlerin bağlamını kaybetmeden modelle bir veya daha fazla devam eden görüşme yapmanıza olanak tanır. Bu kılavuzda, dil modeliyle oturum yönetimi için en iyi uygulamalar tanıtılmaktadır.

Bir kullanıcının yapay zekayla etkileşimde bulunduğu klasik bir chatbot oluşturuyorsanız bir veya daha fazla paralel oturum için oturum yönetimi yapmak isteyebilirsiniz. Alternatif olarak, bir destek temsilcisinin aynı anda birden fazla müşteriyle ilgilendiği ve çeşitli görüşmeleri takip etmesine yardımcı olmak için yapay zekadan yararlandığı bir müşteri ilişkileri yönetim sistemi kullanıyorsanız.

Oturumları ilk istemle başlatma

İlk istem, oturumun bağlamını başlangıçta belirler. Örneğin, ilk istemi kullanarak modele nasıl yanıt vermesi gerektiğini söyleyebilirsiniz.

const languageModel = await LanguageModel.create({
  initialPrompts: [{
    role: 'system',
    content: '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 erdikten sonra yeni bir oturum başlatmak veya paralel olarak birden fazla bağımsız görüşme yapmak istiyorsanız ana oturumu klonlayabilirsiniz.

Klon, temperature veya topK gibi oturum parametrelerini ve oturum etkileşimi geçmişini devralır. Örneğin, ana oturumu ilk istemle başlattıysanız bu yararlı olur. Bu sayede, uygulamanızın bu işi yalnızca bir kez yapması gerekir. Tüm klonlar, ana oturumdaki ilk istemi devralır.

const languageModel = await LanguageModel.create({
  initialPrompts: [{
    role: 'system',
    content: '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

İlk istemler ile daha iyi sonuçlar elde etmek için modele bir dizi örnek istem ve yanıt sağlayabilirsiniz. Bu teknik, beklentilerinizi karşılayan yanıtlar oluşturmak için genellikle tek görevli istemlerde kullanılır.

Modelle devam eden sohbetleri takip ediyorsanız bu uygulamayı kullanarak oturumu geri yükleyebilirsiniz. Örneğin, tarayıcı yeniden başlatıldıktan sonra kullanıcınızın modeli kaldığı yerden kullanmaya devam etmesine yardımcı olabilirsiniz. Bir yaklaşım, oturum geçmişini yerel depolama alanında takip etmektir.

// 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 LanguageModel.params();
  sessionData = {
    initialPrompts: [],
    topK: defaultTopK,
    temperature: defaultTemperature,
  };
}

// Initialize the session with the (previously stored or new) session data.
const languageModel = await 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);
}

Kullanıcının modeli durdurmasına izin vererek oturum kotasını koruma

Her oturumun, oturumun ilgili alanlarına inputQuota ve inputUsage erişerek görebileceğiniz bir bağlam penceresi vardır.

const { inputQuota, inputUsage } = languageModel;
const inputQuotaLeft = inputQuota - inputUsage;

Bu bağlam penceresi aşıldığında oturum, en eski iletileri takip edemez. Bağlam önemliyse bu durum daha kötü sonuçlara yol açabilir. Kullanıcı, modelin yanıtının yararlı olmadığını düşünürse kotayı korumak için AbortController ile oturumu durdurmasına izin verin.

Hem prompt() hem de promptStreaming() yöntemleri, kullanıcının oturumu durdurmasına olanak tanımak için signal alanına sahip 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);
  }
}

Kullanılmayan oturumları kaldırma

Her oturum bellek tüketir. Birkaç büyük oturum başlattıysanız bu durum sorun yaratabilir. Kaynak kullanılabilirliğini artırmak için kullanılmayan oturumları silin.

Demo

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

Prompt API'nin tüm potansiyelinden yararlanma

Bu teknikler ve en iyi uygulamalarla 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ı birleştirebilirsiniz. Örneğin, kullanıcının geri yüklenen geçmiş bir oturumu klonlamasına izin vererek "ne olurdu?" senaryoları çalıştırmasını sağlayabilirsiniz.

Teşekkür

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