Ngày phát hành: 27 tháng 1 năm 2025
Video giải thích | Web | Phần mở rộng | Trạng thái của Chrome | Intent |
---|---|---|---|---|
GitHub | Không áp dụng | Không áp dụng |
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ữ.
Bạn nên tham gia quản lý phiên cho một hoặc nhiều phiên song song nếu đang xây dựng một chatbot kiểu cũ, trong đó một người dùng tương tác với AI. Hoặc nếu bạn có hệ thống quản lý 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
Lời nhắc của hệ thống thiết lập ngữ cảnh của 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 muốn bắt đầu một phiên mới sau khi phiên hiện tại kết thúc hoặc nếu muốn có nhiều cuộc trò chuyện độc lập song song, bạn có thể sao chép một phiên chính.
Bản sao kế thừa các tham số phiên, chẳng hạn như temperature
hoặc topK
và mọi
hoạt động tương tác trong phiên. Điều này hữu ích nếu bạn khởi chạy phiên chính bằng lời nhắc của 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 – tất cả bản sao sẽ kế thừa lời nhắc của hệ thống 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
Với câu lệnh ban đầu, bạn có thể chuẩn bị cho mô hình bằng một tập hợp câu lệnh và câu trả lời mẫu để tạo ra kết quả tốt hơn. Phương pháp này thường được dùng trong câu lệnh nhiều lần để tạo ra các câu trả lời phản ánh mong đợi của bạ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ể sử dụng phương pháp này để khôi phục một phiên. Ví dụ: sau khi trình duyệt khởi động lại, bạn có thể giúp người dùng tiếp tục tương tác với mô hình từ nơi họ đã dừng lại. Một phương pháp là theo dõi nhật ký phiên trong bộ nhớ cục bộ.
// 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
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 với trường signal
để cho phép người dùng dừng phiên.
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ư 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".
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.