Opublikowano: 27 stycznia 2025 r.
| Wyjaśnienie | Sieć | Rozszerzenia | Stan Chrome | Intencja |
|---|---|---|---|---|
| GitHub | Wyświetl | Intencja przeprowadzenia eksperymentu | ||
| GitHub | Wyświetl | Intencja przeprowadzenia eksperymentu |
Jedną z kluczowych funkcji interfejsu Prompt API są sesje. Umożliwiają one prowadzenie jednej lub kilku ciągłych rozmów z modelem AI bez utraty kontekstu. W tym przewodniku przedstawiamy sprawdzone metody zarządzania sesjami za pomocą modelu językowego.
Zarządzanie sesjami może być przydatne w przypadku tworzenia klasycznego chatbota, w którym użytkownik wchodzi w interakcję z AI. Może się też przydać w systemach zarządzania relacjami z klientami, w których agent obsługi klienta obsługuje równolegle wielu klientów i korzysta z AI, aby śledzić różne rozmowy.
Inicjowanie sesji za pomocą początkowego prompta
Początkowy prompt ustawia kontekst sesji na początku. Możesz na przykład użyć początkowego prompta, aby poinformować model, jak ma reagować.
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'
Klonowanie sesji głównej
Jeśli chcesz rozpocząć nową sesję po zakończeniu sesji lub prowadzić równolegle kilka niezależnych rozmów, możesz sklonować sesję główną.
Klon dziedziczy potencjalne prompty początkowe i systemowe oraz historię interakcji w sesji. Jest to przydatne, jeśli na przykład zainicjujesz sesję główną za pomocą początkowego prompta. W ten sposób aplikacja musi wykonać tę czynność tylko raz – wszystkie klony dziedziczą początkowy prompt z sesji głównej.
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.');
Przywracanie poprzedniej sesji
Dzięki początkowym promptom możesz przygotować model za pomocą zestawu przykładowych promptów i odpowiedzi, aby generować lepsze wyniki. Jest to często używane w promptowaniu n-shot, aby tworzyć odpowiedzi, które odzwierciedlają Twoje oczekiwania.
Jeśli śledzisz bieżące rozmowy z modelem, możesz użyć tej metody, aby przywrócić sesję. Na przykład po ponownym uruchomieniu przeglądarki możesz pomóc użytkownikowi w kontynuowaniu interakcji z modelem od miejsca, w którym ją przerwał. Jednym ze sposobów jest śledzenie historii sesji w pamięci lokalnej.
// 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);
}
Zachowywanie limitu sesji przez umożliwienie użytkownikowi zatrzymania modelu
Każda sesja ma okno kontekstu, które możesz zobaczyć, uzyskując dostęp do odpowiednich pól sesji contextWindow i contextUsage.
const { contextWindow, contextUsage } = languageModel;
const contextWindowLeft = contextWindow - contextUsage;
Gdy to okno kontekstu zostanie przekroczone, sesja przestanie śledzić najstarsze wiadomości. Jeśli kontekst był ważny, może to prowadzić do gorszych wyników.
Aby zachować limit, jeśli użytkownik uzna, że odpowiedź modelu jest nieprzydatna, pozwól mu zatrzymać sesję za pomocą AbortController.
Zarówno metoda prompt() , jak i promptStreaming() akceptują opcjonalny drugi parametr z polem signal, aby umożliwić użytkownikowi zatrzymanie sesji.
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);
}
}
Usuwanie nieużywanych sesji
Każda sesja zużywa pamięć. Jeśli uruchomisz kilka dużych sesji, może to stanowić problem. Aby zwiększyć dostępność zasobów,zniszcz nieużywane sesje.
Prezentacja
Zobacz zarządzanie sesjami AI w działaniu w prezentacji zarządzania sesjami AI. Utwórz kilka równoległych rozmów za pomocą interfejsu Prompt API, przeładuj kartę lub nawet uruchom ponownie przeglądarkę i kontynuuj od miejsca, w którym skończyłeś(-aś). Zobacz kod źródłowy na GitHubie.
Wykorzystaj pełny potencjał interfejsu Prompt API
Dzięki przemyślanemu zarządzaniu sesjami AI za pomocą tych technik i sprawdzonych metod możesz wykorzystać pełny potencjał interfejsu Prompt API, tworząc wydajniejsze, bardziej responsywne i zorientowane na użytkownika aplikacje. Możesz też łączyć te podejścia, np. umożliwiając użytkownikowi sklonowanie przywróconej poprzedniej sesji, aby mógł przeprowadzić scenariusze „co by było, gdyby”.
Podziękowania
Ten przewodnik został sprawdzony przez Sebastiana Benza, Andre Bandarrę, François Beauforta i Alexandrę Klepper.