Ngày phát hành: 27 tháng 1 năm 2025
Prompt API là một trong những API AI tích hợp sẵn mà nhóm Chrome đang khám phá. Bạn có thể kiểm thử API này trên máy bằng các ứng dụng của mình bằng cách tham gia chương trình xem trước sớm hoặc trong môi trường phát hành chính thức trong Tiện ích Chrome bằng cách đăng ký bản dùng thử theo nguyên gốc Prompt API cho Tiện ích Chrome. Một tính năng chính của Prompt API là phiên. Các mô hình này cho phép bạn có một hoặc nhiều cuộc trò chuyện đang diễn ra với mô hình AI mà không làm mô hình mất dấu bối cảnh của những gì đã nói. Hướng dẫn này giới thiệu các phương pháp hay nhất để quản lý phiên bằng mô hình ngôn ngữ.
Ví dụ: các trường hợp sử dụng để quản lý phiên cho một hoặc nhiều phiên song song là các chatbot cổ điển, trong đó một người dùng tương tác với AI hoặc hệ thống quản lý mối quan hệ khách hàng, trong đó một nhân viên hỗ trợ xử lý song song nhiều khách hàng và sử dụng AI để giúp nhân viên hỗ trợ theo dõi nhiều cuộc trò chuyện.
Khởi chạy một phiên bằng lời nhắc của hệ thống
Khái niệm đầu tiên cần lưu ý là lời nhắc của hệ thống. Phương thức này thiết lập ngữ cảnh tổng thể của một phiên khi bắt đầu. Ví dụ: bạn có thể sử dụng lời nhắc của hệ thống để cho mô hình biết cách phản hồi.
// 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'
Sao chép phiên chính
Nếu có một ứng dụng mà khi một phiên kết thúc, bạn muốn bắt đầu một phiên mới, hoặc nếu có một ứng dụng mà bạn muốn có các cuộc trò chuyện độc lập trong nhiều phiên song song, thì bạn có thể tận dụng khái niệm sao chép phiên chính. Bản sao kế thừa các thông số phiên như temperature
hoặc topK
từ bản gốc, cũng như nhật ký tương tác phiên tiềm năng.
Điều này hữu ích trong những trường hợp chẳng hạn như khi bạn đã khởi chạy phiên chính bằng lời nhắc hệ thống. Bằng cách này, ứng dụng của bạn chỉ cần thực hiện công việc này một lần và tất cả các bản sao sẽ kế thừa từ phiên chính.
// 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.');
Khôi phục phiên trước
Khái niệm thứ ba cần tìm hiểu là khái niệm về câu lệnh ban đầu. Mục đích ban đầu của mô hình này là sử dụng cho tính năng nhắc n lần, tức là để khởi động mô hình bằng một tập hợp các câu lệnh và câu trả lời mẫu n, nhờ đó, câu trả lời của mô hình đối với các câu lệnh thực tế sẽ chính xác hơn. Nếu theo dõi các cuộc trò chuyện đang diễn ra với mô hình, bạn có thể "lạm dụng" khái niệm lời nhắc ban đầu để khôi phục phiên, ví dụ: sau khi khởi động lại trình duyệt, để người dùng có thể tiếp tục với mô hình mà họ đã dừng lại. Đoạn mã sau đây cho thấy cách bạn có thể tiếp cận vấn đề này, giả sử bạn theo dõi nhật ký phiên trong 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);
}
Duy trì hạn mức phiên bằng cách cho phép người dùng dừng mô hình khi câu trả lời của mô hình không hữu ích
Mỗi phiên có một cửa sổ ngữ cảnh mà bạn có thể xem bằng cách truy cập vào các trường liên quan của phiên maxTokens
, tokensLeft
và tokensSoFar
.
const { maxTokens, tokensLeft, tokensSoFar } = languageModel;
Khi vượt quá cửa sổ ngữ cảnh này, phiên sẽ mất dấu các thông báo cũ nhất. Điều này có thể không mong muốn vì ngữ cảnh này có thể quan trọng. Để duy trì hạn mức, nếu sau khi gửi lời nhắc, người dùng thấy rằng câu trả lời sẽ không hữu ích, hãy cho phép họ dừng mô hình ngôn ngữ trả lời bằng cách sử dụng AbortController
. Cả phương thức prompt()
và promptStreaming()
đều chấp nhận tham số thứ hai không bắt buộc có trường signal
, cho phép người dùng dừng phiên trả lời.
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);
}
}
Bản minh hoạ
Xem cách quản lý phiên AI trong bản minh hoạ quản lý phiên AI. Tạo nhiều cuộc trò chuyện song song bằng Prompt API, tải lại thẻ hoặc thậm chí khởi động lại trình duyệt và tiếp tục từ nơi bạn đã dừng lại. Xem mã nguồn trên GitHub.
Kết luận
Bằng cách quản lý cẩn thận các phiên AI bằng các kỹ thuật và phương pháp hay nhất này, bạn có thể khai thác tối đa tiềm năng của Prompt API, mang lại các ứng dụng hiệu quả hơn, phản hồi nhanh hơn và tập trung vào người dùng. Bạn cũng có thể kết hợp các phương pháp này, chẳng hạn như bằng cách cho phép người dùng sao chép một phiên trước đó đã khôi phục để họ có thể chạy các tình huống "nếu". Chúc bạn sử dụng tính năng nhắc nhở vui vẻ!
Lời cảm ơn
Hướng dẫn này đã được Sebastian Benz, Andre Bandarra, François Beaufort và Alexandra Klepper xem xét.