بهترین روش ها برای مدیریت جلسه با Prompt API

تاریخ انتشار: 27 ژانویه 2025

توضیح دهنده وب برنامه های افزودنی وضعیت کروم قصد
GitHub تجربیدر EPP پشت پرچم آزمایش مبدا قابل اجرا نیست قابل اجرا نیست

یکی از ویژگی های کلیدی Prompt API جلسات هستند. آنها به شما اجازه می دهند یک یا چند مکالمه مداوم با مدل هوش مصنوعی داشته باشید، بدون اینکه مدل ردیابی متن آنچه گفته شد را از دست بدهد. این راهنما بهترین شیوه ها را برای مدیریت جلسه با مدل زبان معرفی می کند.

اگر در حال ساخت یک ربات چت کلاسیک هستید که در آن یک کاربر با هوش مصنوعی تعامل دارد، ممکن است بخواهید برای یک یا چند جلسه موازی در مدیریت جلسه شرکت کنید. یا اگر یک سیستم مدیریت ارتباط با مشتری دارید که در آن یک نماینده پشتیبانی با چندین مشتری به طور موازی سروکار دارد و از هوش مصنوعی برای کمک به عامل پشتیبانی برای پیگیری مکالمات مختلف استفاده می کند.

یک جلسه را با یک دستور سیستم راه اندازی کنید

یک دستور سیستم، زمینه جلسه را در ابتدا تنظیم می کند. به عنوان مثال، می‌توانید از سیستم فرمان استفاده کنید تا به مدل بگویید که چگونه باید پاسخ دهد.

// 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'

یک جلسه اصلی را شبیه سازی کنید

اگر می خواهید بعد از پایان یک جلسه، یک جلسه جدید شروع کنید، یا اگر می خواهید چندین مکالمه مستقل به صورت موازی داشته باشید، می توانید یک جلسه اصلی را شبیه سازی کنید.

کلون پارامترهای جلسه مانند temperature یا topK و هر گونه سابقه تعامل جلسه را به ارث می برد. برای مثال، اگر جلسه اصلی را با یک اعلان سیستم مقداردهی کنید، مفید است. به این ترتیب، برنامه شما فقط یک بار باید این کار را انجام دهد—همه کلون ها درخواست سیستم را از جلسه اصلی به ارث می برند.

// 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.');

یک جلسه گذشته را بازیابی کنید

با اعلان های اولیه ، می توانید مدل را با مجموعه ای از اعلان ها و پاسخ های مثال، برای ایجاد نتایج بهتر، پر کنید. این اغلب در اعلان‌های n-shot استفاده می‌شود تا پاسخ‌هایی ایجاد کند که منعکس کننده انتظارات شما باشد.

اگر مکالمات در حال انجام با مدل را پیگیری می کنید، می توانید از این تمرین برای بازیابی یک جلسه استفاده کنید. به عنوان مثال، پس از راه‌اندازی مجدد مرورگر، می‌توانید به کاربر خود کمک کنید تا از همان جایی که کار را متوقف کرده است، با مدل ارتباط برقرار کند. یکی از روش ها، پیگیری تاریخچه جلسه در حافظه محلی است.

// 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);
}

با اجازه دادن به کاربر برای توقف مدل، سهمیه جلسه را حفظ کنید

هر جلسه دارای یک پنجره زمینه است که می توانید با دسترسی به فیلدهای مربوط به جلسه maxTokens ، tokensLeft و tokensSoFar را مشاهده کنید.

const { maxTokens, tokensLeft, tokensSoFar } = languageModel;

وقتی از این پنجره زمینه فراتر می رود، باعث می شود که جلسه قدیمی ترین پیام ها را از دست بدهد، که می تواند نامطلوب باشد زیرا این زمینه ممکن است مهم بوده باشد. برای حفظ سهمیه، اگر کاربر پس از ارسال درخواست مشاهده کرد که پاسخی مفید نیست، به او اجازه دهید با استفاده از AbortController از پاسخگویی مدل زبان جلوگیری کند.

هر دو متد prompt() و promptStreaming() یک پارامتر دوم اختیاری با یک فیلد signal را می پذیرند تا به کاربر اجازه دهد جلسه را متوقف کند.

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);
  }
}

نسخه ی نمایشی

مدیریت جلسه هوش مصنوعی را در نسخه نمایشی مدیریت جلسه هوش مصنوعی مشاهده کنید. چندین مکالمه موازی با Prompt API ایجاد کنید، برگه را مجدداً بارگیری کنید یا حتی مرورگر خود را مجدداً راه اندازی کنید و از همان جایی که متوقف کردید ادامه دهید. کد منبع را در GitHub ببینید.

نتیجه گیری

با مدیریت متفکرانه جلسات هوش مصنوعی با این تکنیک ها و بهترین شیوه ها، می توانید پتانسیل کامل Prompt API را باز کنید و برنامه های کارآمدتر، پاسخگو و کاربر محور را ارائه دهید. همچنین می‌توانید این رویکردها را ترکیب کنید، برای مثال، با اجازه دادن به کاربر که یک جلسه گذشته بازیابی شده را شبیه‌سازی کند، تا بتواند سناریوهای «چه می‌شود» را اجرا کند.

قدردانی ها

این راهنما توسط سباستین بنز ، آندره باندارا ، فرانسوا بوفور و الکساندرا کلپر بررسی شده است.