تاريخ النشر: 27 يناير 2025
| شرح | الويب | الإضافات | حالة Chrome | النيّة بالشراء |
|---|---|---|---|---|
| Github | العرض | نية إجراء تجربة |
من الميزات الرئيسية في 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'
استنساخ جلسة رئيسية
إذا أردت بدء جلسة جديدة بعد انتهاء جلسة، أو إذا أردت إجراء عدة محادثات مستقلة بالتوازي، يمكنك استنساخ جلسة رئيسية.
يرث الاستنساخ الطلبات الأولية وطلبات النظام المحتملة وأي سجلّ تفاعلات في الجلسة. يكون ذلك مفيدًا، على سبيل المثال، إذا بدأت الجلسة الرئيسية بطلب أولي. بهذه الطريقة، لن يحتاج تطبيقك إلى تنفيذ هذه العملية إلا مرة واحدة، لأنّ جميع النسخ تستخدم الطلب الأوّلي من الجلسة الرئيسية.
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) {
sessionData = {
initialPrompts: [],
};
}
// 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);
}
الحفاظ على حصة الجلسة من خلال السماح للمستخدم بإيقاف النموذج
تتضمّن كل جلسة قدرة استيعاب يمكنك الاطّلاع عليها من خلال الوصول إلى الحقول ذات الصلة contextWindow وcontextUsage في الجلسة.
const { contextWindow, contextUsage } = languageModel;
const contextWindowLeft = contextWindow - contextUsage;
وعند تجاوز قدرة الاستيعاب هذه، تفقد الجلسة القدرة على تتبُّع أقدم الرسائل. وقد يؤدي ذلك إلى نتائج أسوأ إذا كان السياق مهمًا.
للحفاظ على الحصة، إذا رأى المستخدم أنّ إجابة النموذج غير مفيدة،
يجب السماح له بإيقاف الجلسة باستخدام 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، ما يتيح لك تقديم تطبيقات أكثر فعالية واستجابة وتراعي احتياجات المستخدمين. يمكنك أيضًا الجمع بين هذه الأساليب، مثلاً، من خلال السماح للمستخدم باستنساخ جلسة سابقة تم استعادتها، حتى يتمكّن من تنفيذ سيناريوهات "ماذا لو".
الإقرارات
تمت مراجعة هذا الدليل من قِبل سيباستيان بينز و أندريه باندارا و فرانسوا بوفورت و ألكسندرا كليبر.