Published: January 27, 2025
| Explainer | الويب | الإضافات | Chrome Status | النيّة بالشراء |
|---|---|---|---|---|
| GitHub | العرض | Intent to Experiment | ||
| GitHub | العرض | Intent to Experiment |
إحدى الميزات الرئيسية في 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، وتقديم تطبيقات أكثر فعالية واستجابة وتركيزًا على المستخدم. يمكنك أيضًا الجمع بين هذه الأساليب، على سبيل المثال، من خلال السماح للمستخدم باستنساخ جلسة سابقة تم استعادتها، حتى يتمكّن من إجراء سيناريوهات "ماذا لو".
الإقرارات
تمت مراجعة هذا الدليل من قِبل Sebastian Benz و Andre Bandarra و François Beaufort و Alexandra Klepper.