تاریخ انتشار: 27 ژانویه 2025
Prompt API یکی از APIهای هوش مصنوعی داخلی است که تیم Chrome در حال بررسی است. میتوانید با پیوستن به برنامه پیشنمایش اولیه، آن را به صورت محلی با برنامههای خود آزمایش کنید، یا با ثبتنام در نسخه آزمایشی اولیه Prompt API برای برنامههای افزودنی Chrome، در حال تولید در برنامههای افزودنی Chrome خود باشید. یکی از ویژگی های کلیدی 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 prompting است، یعنی برای پر کردن مدل با مجموعه ای از n نمونه دستور و پاسخ، بنابراین پاسخ های آن به درخواست های واقعی دقیق تر است. اگر مکالمات در حال انجام با مدل را پیگیری کنید، می توانید از مفهوم درخواست های اولیه برای بازیابی یک جلسه، به عنوان مثال، پس از راه اندازی مجدد مرورگر، "سوء استفاده" کنید، بنابراین کاربر می تواند از همان جایی که کار را متوقف کرده است، به مدل ادامه دهد. قطعه کد زیر نشان می دهد که چگونه می توانید به این موضوع نزدیک شوید، با این فرض که سابقه جلسه را در localStorage پیگیری می کنید.
// 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 را باز کنید و برنامه های کارآمدتر، پاسخگو و کاربر محور را ارائه دهید. همچنین میتوانید این رویکردها را ترکیب کنید، برای مثال، با اجازه دادن به کاربر که یک جلسه گذشته بازیابی شده را شبیهسازی کند، تا بتواند سناریوهای «چه میشود» را اجرا کند. تشویق مبارک!
قدردانی
این راهنما توسط سباستین بنز ، آندره باندارا ، فرانسوا بوفور و الکساندرا کلپر بررسی شده است.