Omówienie konwersacji i pamięci

Użyj AgentSession do zachowywania kontekstu konwersacji między wywołaniami.

Gdy sesja używa magazynu zarządzanego przez usługę, może zawierać nieprzezroczysty identyfikator sesji po stronie usługi. Identyfikatory Responses i Conversations w OpenAI są domyślnie powiązane z używanym kluczem API lub projektem; jeśli hostowany agent używa tego samego klucza lub projektu dla wielu użytkowników końcowych, przechowuj te identyfikatory po stronie serwera i przed wznowieniem zweryfikuj uwierzytelnionego użytkownika lub dzierżawcę. Aby uzyskać szczegółowe informacje, zobacz Sesja.

Wzorzec użycia rdzeni

Większość aplikacji postępuje zgodnie z tym samym przepływem:

  1. Tworzenie sesji (CreateSessionAsync())
  2. Przekaż tę sesję każdemu RunAsync(...)
  3. Ponowne wypełnianie ze stanu serializowanego (DeserializeSessionAsync(...))
  4. Kontynuuj z identyfikatorem konwersacji serwisowej (różni się w zależności od agenta, np. myChatClientAgent.CreateSessionAsync("existing-id"))
  1. Tworzenie sesji (create_session())
  2. Przekaż tę sesję każdemu run(...)
  3. Ponowne wypełnianie według identyfikatora konwersacji usługi (get_session(...)) lub ze stanu serializowanego
  1. Tworzenie sesji (CreateSession(...))
  2. Przekaż tę sesję każdemu RunText(...) za pomocą agent.WithSession(session)
  3. Ponowne wypełnianie ze stanu serializowanego z json.Unmarshal(...) do agent.Session

Pakiet Go agent udostępnia podstawowe typy opisujące stan konwersacji: agent.Session dla stanu w postaci par klucz-wartość powiązanego z konwersacją oraz agent.ContextProvider do wstrzykiwania kontekstu i utrwalania.

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

Użyj sesji do wieloturowych rozmów

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

Utrwalanie sesji

Sesje można serializować do formatu JSON w celu przechowywania, a następnie wznawiać:

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

Mapa przewodnika

Strona Ukierunkowanie
Sesja AgentSession struktura i serializacja
Dostawcy kontekstu Wbudowane i niestandardowe wzorce dostarczyciela kontekstu i historii
Kompaktowanie kontekstu Efektywne zarządzanie rozwojem konwersacji
Przechowywanie Wbudowane tryby przechowywania i strategie trwałości zewnętrznej

Dalsze kroki