Общие сведения о беседах и памяти

Используйте AgentSession для поддержания контекста беседы между вызовами.

Если сеанс использует управляемое службой хранилище, он может содержать непрозрачный идентификатор сеанса на стороне службы. Идентификаторы Responses и Conversations OpenAI по умолчанию привязаны к базовому API-ключу или проекту; если хостируемый агент использует один и тот же ключ или проект для нескольких пользователей, храните эти идентификаторы на стороне сервера и перед возобновлением проверяйте, что аутентифицированный пользователь или арендатор имеет право доступа к ним. Дополнительные сведения см. в разделе "Сеанс".

Основной шаблон использования

Большинство приложений следуют одному и тому же потоку:

  1. Создание сеанса (CreateSessionAsync())
  2. Передайте этот сеанс каждому RunAsync(...)
  3. Повторное восстановление из сериализованного состояния (DeserializeSessionAsync(...))
  4. Продолжайте использовать идентификатор беседы сервиса (зависит от агента, например myChatClientAgent.CreateSessionAsync("existing-id"))
  1. Создание сеанса (create_session())
  2. Передайте этот сеанс каждому run(...)
  3. Восстановление по идентификатору разговора службы (get_session(...)) или из сериализованного состояния
  1. Создание сеанса (CreateSession(...))
  2. Передайте этот сеанс каждому RunText(...) с помощью agent.WithSession(session)
  3. Восстановить из сериализованного состояния с помощью json.Unmarshal(...) в agent.Session

Пакет Go agent предоставляет основные типы для состояния беседы: agent.Session для состояния типа «ключ-значение», связанного с беседой, и agent.ContextProvider для внедрения и сохранения контекста.

// Create and reuse a session
AgentSession session = await agent.CreateSessionAsync();

var first = await agent.RunAsync("My name is Alice.", session);
var second = await agent.RunAsync("What is my name?", session);

// Persist and restore later
var serialized = agent.SerializeSession(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
# Create and reuse a session
session = agent.create_session()

first = await agent.run("My name is Alice.", session=session)
second = await agent.run("What is my name?", session=session)

# Rehydrate by service conversation ID when needed
service_session = agent.get_session(service_session_id="<service-conversation-id>")

# Persist and restore later
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
session, err := a.CreateSession(ctx)
if err != nil {
    panic(err)
}

Используйте сеанс для многоэтапных диалогов

resp, _ := a.RunText(ctx, "My name is Alice.", agent.WithSession(session)).Collect()
resp, _ = a.RunText(ctx, "What is my name?", agent.WithSession(session)).Collect()

Сохранять сеансы

Сеансы можно сериализовать в JSON для хранения и последующего возобновления:

data, err := json.Marshal(session)
if err != nil {
    panic(err)
}
// store data...

// later:
var resumed agent.Session
if err := json.Unmarshal(data, &resumed); err != nil {
    panic(err)
}

resp, err := a.RunText(ctx, "Continue from where we left off.", agent.WithSession(&resumed)).Collect()

Карта руководства

Стр. Фокус
Сессия AgentSession структура и сериализация
Поставщики контекстов Встроенные и пользовательские шаблоны контекста и истории поставщиков.
Сжатие контекста Эффективное управление развитием взаимодействий
Хранение Встроенные режимы хранения и внешние стратегии сохраняемости

Дальнейшие шаги