Panoramica delle conversazioni e della memoria

Usare AgentSession per mantenere il contesto della conversazione tra le chiamate.

Quando una sessione utilizza l'archiviazione gestita dal servizio, può contenere un ID di sessione opaco lato servizio. Per impostazione predefinita, gli ID di Responses e Conversations di OpenAI sono associati alla chiave API o al progetto sottostante; se un agente ospitato usa la stessa chiave o lo stesso progetto per più utenti finali, memorizza tali ID lato server e verifica l’utente o il tenant autenticato prima di riprendere la conversazione. Per informazioni dettagliate, vedere Sessione.

Modello di utilizzo principale

La maggior parte delle applicazioni segue lo stesso flusso:

  1. Creare una sessione (CreateSessionAsync())
  2. Passare quella sessione a ciascun RunAsync(...)
  3. Riattivare dallo stato serializzato (DeserializeSessionAsync(...))
  4. Continuare con un ID della conversazione del servizio (varia a seconda dell'agente, ad esempio myChatClientAgent.CreateSessionAsync("existing-id"))
  1. Creare una sessione (create_session())
  2. Passare quella sessione a ciascun run(...)
  3. Ripristinare tramite l'ID di conversazione del servizio (get_session(...)) o dallo stato serializzato
  1. Creare una sessione (CreateSession(...))
  2. Passa quella sessione a ciascun RunText(...) con agent.WithSession(session)
  3. Ripristinare a partire dallo stato serializzato con json.Unmarshal(...) in agent.Session

Il pacchetto Go agent fornisce i tipi di base per lo stato della conversazione: agent.Session per lo stato chiave-valore associato a una conversazione e agent.ContextProvider per l'inserimento e la persistenza del contesto.

// 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)
}

Usare una sessione per conversazioni a più turni

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

Mantieni attive le sessioni

Le sessioni possono essere serializzate in JSON per l'archiviazione e successivamente riprese:

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()

Mappa della guida

Pagina Concentrazione (or Messa a fuoco)
Sessione AgentSession struttura e serializzazione
Provider di contesto Modelli di provider predefiniti e personalizzati di contesto/cronologia
Compattazione del contesto Gestire in modo efficiente la crescita delle conversazioni
Spazio di archiviazione Modalità di archiviazione predefinite e strategie di persistenza esterne

Passaggi successivi