Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
AgentSession ist der Unterhaltungszustandscontainer, der über Agentendurchläufe hinweg verwendet wird.
Was AgentSession enthält
| Feld | Zweck |
|---|---|
StateBag |
Beliebiger Statuscontainer für diese Sitzung |
C# AgentSession ist eine abstrakte Basisklasse. Konkrete Implementierungen (erstellt über CreateSessionAsync()) können zusätzlichen Zustand hinzufügen, z. B. eine ID für den Speicher des Remotechatverlaufs, wenn der vom Dienst verwaltete Verlauf verwendet wird.
| Feld | Zweck |
|---|---|
session_id |
Lokaler eindeutiger Bezeichner für diese Sitzung |
service_session_id |
Kennung einer Remote-Dienstsitzung, z. B. eine Konversations- oder Antwort-ID, wenn ein dienstseitig verwalteter Verlauf verwendet wird |
state |
Für Kontext-/Verlaufsanbieter freigegebenes änderbares Wörterbuch |
| Feld | Zweck |
|---|---|
agent.Session |
Schlüsselwertstatuscontainer, der an eine Unterhaltung gebunden ist |
Sitzungen bieten typgesteuerten Schlüsselwertspeicher:
type UserPrefs struct {
Theme string `json:"theme"`
Language string `json:"language"`
}
session.Set("user_prefs", UserPrefs{Theme: "dark", Language: "en"})
var prefs UserPrefs
session.Get("user_prefs", &prefs)
session.Delete("user_prefs")
Gültigkeitsbereich der Dienst-Sitzungs-ID
Wenn der vom Dienst verwaltete Verlauf verwendet wird, kann eine Sitzung einen vom Dienst ausgestellten Sitzungsbezeichner enthalten. OpenAI Responses können beispielsweise eine resp_* Response-ID als previous_response_id verwenden, und die OpenAI Conversations API kann eine conv_* Konversations-ID als Konversation verwenden.
OpenAI ordnet diese IDs standardmäßig dem zugrunde liegenden API-Schlüssel oder dem Projekt zu. Dies reicht normalerweise aus, wenn dieser Schlüssel oder Projekt bereits der Anwendungsgrenze entspricht, z. B. einer Einzelbenutzer-App oder einem separaten Schlüssel/Projekt pro Mandant. Das riskobehaftete Hosting-Muster verwendet einen gemeinsamen zugrunde liegenden Schlüssel oder ein Projekt für mehrere Endnutzer, gibt unveränderte serverseitige IDs an Clients zurück und nimmt diese IDs anschließend wieder entgegen, ohne ihre Zugehörigkeit zu prüfen. In gehosteten Apps oder Apps mit mehreren Benutzern, die einen zugrunde liegenden Schlüssel oder ein Projekt wiederverwenden, sollten service_session_id, previous_response_id oder conversation/conversation_id nicht als Autorisierungsgrenzen für Endbenutzer behandelt werden. Speichern Sie serverseitige IDs im vertrauenswürdigen Anwendungsspeicher, ordnen Sie für den Client sichtbare Sitzungs-IDs diesen serverseitigen IDs zu und überprüfen Sie den authentifizierten Benutzer oder Mandanten, bevor Sie eine Konversation wiederaufnehmen.
Integriertes Verwendungsmuster
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);
session = agent.create_session()
first = await agent.run("My name is Alice.", session=session)
second = await agent.run("What is my name?", session=session)
session, err := a.CreateSession(ctx)
if err != nil {
panic(err)
}
resp, _ := a.RunText(ctx, "Hello!", agent.WithSession(session)).Collect()
resp, _ = a.RunText(ctx, "Follow-up question.", agent.WithSession(session)).Collect()
Erstellen einer Sitzung aus einer vorhandenen Service-Gesprächs-ID
Erstellen einer neuen Sitzung aus einer vorhandenen Unterhaltungs-ID variiert je nach Agenttyp. Hier sind einige Beispiele.
Bei der Verwendung von ChatClientAgent
AgentSession session = await chatClientAgent.CreateSessionAsync(conversationId);
Bei Verwendung einer A2AAgent
AgentSession session = await a2aAgent.CreateSessionAsync(contextId, taskId);
Verwenden Sie dies, wenn der unterstützende Dienst bereits über einen Gesprächszustand verfügt.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
Lösen Sie in gehosteten Apps <service-conversation-id> im anwendungseigenen Speicher auf, nachdem der aktuelle Benutzer oder Mandant überprüft wurde. Akzeptieren Sie keine rohen serverseitigen IDs von einem Client, es sei denn, Sie verifizieren zuvor, dass dem Aufrufer die Konversation gehört.
Serialisierung und Wiederherstellung
var serialized = agent.SerializeSession(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
data, err := json.Marshal(session)
if err != nil {
panic(err)
}
// Save to disk, database, etc.
if err := os.WriteFile("session.json", data, 0o644); err != nil {
panic(err)
}
// Later, restore the session.
loaded, err := os.ReadFile("session.json")
if err != nil {
panic(err)
}
var resumedSession agent.Session
if err := json.Unmarshal(loaded, &resumedSession); err != nil {
panic(err)
}
resp, _ := a.RunText(ctx, "Continue from where we left off.", agent.WithSession(&resumedSession)).Collect()
Tipp
Siehe das Beispiel für eine persistente Unterhaltung für ein vollständiges Beispiel.
Von Bedeutung
Sitzungen sind agent-/dienstspezifisch. Das Erneute Verwenden einer Sitzung mit einer anderen Agentkonfiguration oder einem anderen Anbieter kann zu ungültigem Kontext führen. Wenn die serialisierte Sitzung eine dienstseitige Sitzungs-ID enthält, stellen Sie sie nur für den Anwendungsbenutzer oder Mandanten wieder her, der diese ID besitzt.