Опубликовано: 27 января 2025 г.
| Пояснительная записка | Веб | Расширения | Статус Chrome | Намерение |
|---|---|---|---|---|
| GitHub | Вид | Намерение провести эксперимент |
Одна из ключевых особенностей API Prompt — это сессии. Они позволяют вести один или несколько непрерывных диалогов с моделью ИИ, не теряя при этом контекст сказанного. В этом руководстве представлены лучшие практики управления сессиями с языковой моделью.
Возможно, вам потребуется управление сессиями для одной или нескольких параллельных сессий, если вы создаёте классический чат-бот, где один пользователь взаимодействует с ИИ. Или, если у вас есть система управления взаимоотношениями с клиентами, где один агент поддержки обрабатывает несколько клиентов одновременно и использует ИИ для отслеживания различных диалогов.
Инициализируйте сессии с помощью начального запроса.
Начальная подсказка задает контекст сессии в начале. Например, вы можете использовать начальную подсказку, чтобы указать модели, как она должна реагировать.
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'
Клонировать основную сессию
Если вы хотите начать новую сессию после завершения предыдущей или хотите вести несколько независимых бесед параллельно, вы можете клонировать основную сессию.
Клон наследует потенциальные начальные и системные подсказки, а также историю взаимодействия в рамках сессии. Это полезно, например, если вы инициализировали основную сессию с помощью начальной подсказки. Таким образом, вашему приложению нужно будет выполнить эту работу только один раз — все клоны наследуют начальную подсказку от основной сессии.
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.');
Восстановить предыдущую сессию
С помощью начальных подсказок вы можете подготовить модель, используя набор примеров подсказок и ответов, чтобы получить лучшие результаты. Это часто используется в методе n-shot prompting для создания ответов, которые соответствуют вашим ожиданиям.
Если вы отслеживаете текущие диалоги с моделью, вы можете использовать этот метод для восстановления сессии. Например, после перезапуска браузера вы можете помочь пользователю продолжить взаимодействие с моделью с того места, где он остановился. Один из подходов — хранить историю сессий в локальном хранилище.
// 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);
}
Сохраните квоту сессии, позволив пользователю остановить модель.
Каждая сессия имеет контекстное окно, которое можно просмотреть, получив доступ к соответствующим полям сессии: inputQuota и inputUsage .
const { inputQuota, inputUsage } = languageModel;
const inputQuotaLeft = inputQuota - inputUsage;
Если это контекстное окно превышено, сессия теряет отслеживание самых старых сообщений. Это может привести к ухудшению результатов, если контекст был важен. Для сохранения квоты, если пользователь считает ответ модели бесполезным, позвольте ему остановить сессию с помощью 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);
}
}
Удалить неиспользуемые сессии
Каждая сессия потребляет память. Если вы запустили несколько больших сессий, это может стать проблемой. Завершите неиспользуемые сессии , чтобы увеличить доступность ресурсов.
Демо
Посмотрите, как работает управление сессиями с помощью ИИ, в демонстрации управления сессиями с помощью ИИ . Создавайте несколько параллельных диалогов с помощью API Prompt, перезагружайте вкладку или даже перезапускайте браузер и продолжайте с того места, где остановились. Исходный код доступен на GitHub .
Раскройте весь потенциал API Prompt.
Благодаря продуманному управлению сессиями ИИ с использованием этих методов и передовых практик, вы можете раскрыть весь потенциал API Prompt, создавая более эффективные, отзывчивые и ориентированные на пользователя приложения. Вы также можете комбинировать эти подходы, например, позволяя пользователю клонировать восстановленную прошлую сессию, чтобы он мог воспроизводить сценарии «что если».
Благодарности
Данное руководство было проверено Себастьяном Бенцем , Андре Бандаррой , Франсуа Бофором и Александрой Клеппер .