Ngày xuất bản: 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 | Xem | Ý định thử nghiệm |
Một tính năng chính của Prompt API là phiên. Các phiên 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ấ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 có thể muốn tham gia quản lý phiên cho một hoặc nhiều phiên song song nếu đang tạo một chatbot truyền thống, 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ý 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 các phiên bằng một câu lệnh ban đầu
Câu lệnh ban đầu thiết lập bối cảnh của phiên ngay từ đầu. Ví dụ: bạn có thể dùng câu lệnh ban đầu để cho mô hình biết cách phản hồi.
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'
Sao chép một phiên chính
Nếu muốn bắt đầu một phiên mới sau khi một phiên 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 sẽ kế thừa các thông số phiên, chẳng hạn như temperature
hoặc topK
, và mọi nhật ký tương tác trong phiên. Điều này hữu ích nếu, chẳng hạn như bạn đã khởi tạo phiên chính bằng một câu lệnh ban đầu. 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ả các bản sao đều kế thừa lời nhắc ban đầu từ phiên chính.
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.');
Khôi phục một phiên trước đó
Với câu lệnh ban đầu, bạn có thể cung cấp cho mô hình một bộ câu lệnh và câu trả lời mẫu để tạo ra kết quả tốt hơn. Điều này thường được dùng trong câu lệnh n-shot để tạo ra những câu trả lời phản ánh kỳ vọng 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 cách tiếp cận là theo dõi nhật ký phiên trong bộ nhớ cục bộ.
// 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 LanguageModel.params();
sessionData = {
initialPrompts: [],
topK: defaultTopK,
temperature: defaultTemperature,
};
}
// 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);
}
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 đều 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 inputQuota
và inputUsage
của phiên.
const { inputQuota, inputUsage } = languageModel;
const inputQuotaLeft = inputQuota - inputUsage;
Khi vượt quá cửa sổ ngữ cảnh này, phiên sẽ không theo dõi được các thông báo cũ nhất. Điều này có thể dẫn đến kết quả kém hơn nếu bối cảnh là yếu tố quan trọng.
Để bảo toàn hạn mức, nếu người dùng xác định câu trả lời của mô hình không hữu ích, hãy cho phép họ dừng phiên bằ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.
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);
}
}
Xoá các phiên không dùng đến
Mỗi phiên đều tiêu tốn bộ nhớ. Nếu bạn đã bắt đầu một số phiên lớn, thì điều này có thể trở thành vấn đề. Xoá các phiên không dùng đến để tăng khả năng sử dụng tài nguyên.
Bản minh hoạ
Xem cách quản lý phiên AI hoạt động 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.
Khai thác tối đa tiềm năng của Prompt API
Bằng cách quản lý các phiên AI một cách chu đáo bằng những 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 đến những ứng dụng hiệu quả, phản hồi nhanh và lấy người dùng làm trung tâm. 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 kịch bản "điều gì sẽ xảy ra".
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.