أفضل الممارسات لإدارة الجلسات باستخدام Prompt API

تاريخ النشر: 27 يناير 2025

شرح الويب الإضافات حالة Chrome النيّة بالشراء
Github مرحلة التجربة والتقييم في مرحلة التجربة والتقييم Chrome 138 العرض نية إجراء تجربة

إحدى الميزات الرئيسية في Prompt API هي الجلسات. تتيح لك هذه الأدوات إجراء محادثة واحدة أو عدة محادثات مستمرة مع نموذج الذكاء الاصطناعي، بدون أن يفقد النموذج سياق ما قيل. يقدّم هذا الدليل أفضل الممارسات لإدارة الجلسات باستخدام النموذج اللغوي.

قد تحتاج إلى المشاركة في إدارة الجلسات لجلسة واحدة أو أكثر من الجلسات المتوازية إذا كنت بصدد إنشاء برنامج دردشة كلاسيكي، حيث يتفاعل مستخدم واحد مع الذكاء الاصطناعي. أو إذا كان لديك أنظمة إدارة علاقات مع العملاء يتولّى فيها موظف دعم واحد التعامل مع عدة عملاء في الوقت نفسه ويستعين بالذكاء الاصطناعي لمساعدته في تتبُّع المحادثات المختلفة.

بدء الجلسات بطلب أولي

يحدّد طلب أولي سياق الجلسة في البداية. على سبيل المثال، يمكنك استخدام الطلب الأوّلي لتحديد طريقة استجابة النموذج.

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'

نسخ جلسة رئيسية

إذا أردت بدء جلسة جديدة بعد انتهاء جلسة، أو إذا أردت إجراء عدة محادثات مستقلة بالتوازي، يمكنك استنساخ جلسة رئيسية.

يرث الاستنساخ مَعلمات الجلسة، مثل temperature أو topK، وأي سجلّ تفاعلات في الجلسة. يكون ذلك مفيدًا، على سبيل المثال، إذا بدأت الجلسة الرئيسية بطلب أولي. بهذه الطريقة، لن يحتاج تطبيقك إلى تنفيذ هذه العملية إلا مرة واحدة، لأنّ جميع النسخ تستخدم الطلب الأولي من الجلسة الرئيسية.

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

استعادة جلسة سابقة

باستخدام الطلبات الأولية، يمكنك إعداد النموذج بمجموعة من الطلبات والأجوبة النموذجية للحصول على نتائج أفضل. ويُستخدم هذا الأسلوب غالبًا في الطلبات التي تتضمّن أمثلة قليلة، وذلك لإنشاء ردود تتطابق مع توقعاتك.

إذا كنت تتتبّع المحادثات الجارية مع النموذج، يمكنك استخدام هذه الممارسة لاستعادة جلسة. على سبيل المثال، بعد إعادة تشغيل المتصفّح، يمكنك مساعدة المستخدم في مواصلة التفاعل مع النموذج من حيث توقّف. إحدى الطرق هي تتبُّع سجلّ الجلسة في التخزين المحلي.

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

الحفاظ على حصة الجلسة من خلال السماح للمستخدم بإيقاف النموذج

تتضمّن كل جلسة نافذة سياق يمكنك الاطّلاع عليها من خلال الوصول إلى الحقول ذات الصلة بالجلسة inputQuota وinputUsage.

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

وعند تجاوز نافذة السياق هذه، يؤدي ذلك إلى عدم تتبُّع الجلسة لأقدم الرسائل. وقد يؤدي ذلك إلى نتائج أسوأ إذا كان السياق مهمًا. للحفاظ على الحصة، إذا رأى المستخدم أنّ إجابة النموذج غير مفيدة، يجب السماح له بإيقاف الجلسة باستخدام 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

من خلال إدارة جلسات الذكاء الاصطناعي بعناية باستخدام هذه الأساليب وأفضل الممارسات، يمكنك الاستفادة إلى أقصى حد من إمكانات Prompt API، ما يتيح لك تقديم تطبيقات أكثر فعالية واستجابة وتتمحور حول المستخدم. يمكنك أيضًا الجمع بين هذه الأساليب، مثلاً، من خلال السماح للمستخدم باستنساخ جلسة سابقة تم استعادتها، ليتمكّن من تنفيذ سيناريوهات "ماذا لو".

الإقرارات

تمت مراجعة هذا الدليل من قِبل سيباستيان بينز و أندريه باندارا و فرانسوا بوفورت و ألكسندرا كليبر.