Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
AgentSession är containern för konversationstillstånd som används mellan agentkörningar.
Vad AgentSession innehåller
| Fält | Avsikt |
|---|---|
StateBag |
Flexibel tillståndsbehållare för sessionen |
C# AgentSession är en abstrakt basklass. Konkreta implementeringar (skapade via CreateSessionAsync()) kan lägga till ytterligare tillstånd, t.ex. ett ID för lagring av fjärrchatthistorik, när tjänsthanterad historik används.
| Fält | Avsikt |
|---|---|
session_id |
Lokal unik identifierare för den här sessionen |
service_session_id |
Identifierare för fjärrtjänstsession, till exempel en konversation eller ett svars-ID, när tjänsthanterad historik används |
state |
Föränderlig ordlista som delas med kontext-/historikprovidrar |
| Fält | Avsikt |
|---|---|
agent.Session |
Nyckelvärdestillståndscontainer kopplad till en konversation |
Sessioner tillhandahåller typad lagring av nyckel/värde-par:
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")
Omfång för tjänstsessions-ID
När tjänsthanterad historik används kan en session innehålla en tjänst utfärdad sessionsidentifierare. Till exempel kan OpenAI-svar använda ett resp_* svars-ID som previous_response_idoch OpenAI-konversations-API:et kan använda ett conv_* konversations-ID som konversation.
OpenAI begränsar som standard dessa ID:n till den underliggande API-nyckeln eller projektet. Detta räcker vanligtvis när nyckeln eller projektet redan matchar programgränsen, till exempel en app med en användare eller en separat nyckel/ett separat projekt per klientorganisation. Det riskfyllda hostade mönstret innebär att man använder en underliggande nyckel eller ett projekt för flera slutanvändare, skickar vidare råa tjänstside-ID:n till klienter och accepterar dessa ID:n tillbaka utan att verifiera ägarskapet. I värdbaserade appar eller appar med flera användare som återanvänder en säkerhetskopieringsnyckel eller ett projekt ska du inte behandla service_session_id, previous_response_ideller conversation/conversation_id som auktoriseringsgränser för slutanvändare. Lagra ID:n på tjänstsidan i betrodd applikationslagring, koppla klientsynliga sessions-ID:n till dessa ID:n och verifiera den autentiserade användaren eller klientorganisationen innan du återupptar en konversation.
Inbyggt användningsmönster
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()
Skapa en session från ett befintligt tjänstkonversations-ID
Skapa en ny session från ett befintligt konversations-ID varierar beroende på agenttyp. Här följer några exempel.
När du använder ChatClientAgent
AgentSession session = await chatClientAgent.CreateSessionAsync(conversationId);
När du använder en A2AAgent
AgentSession session = await a2aAgent.CreateSessionAsync(contextId, taskId);
Använd detta när den stödjande tjänsten redan har konversationstillstånd.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
I värdbaserade appar hämtar du <service-conversation-id> från programmets egen lagring efter att ha kontrollerat den aktuella användaren eller klientorganisationen. Undvik att acceptera obearbetade ID:n på tjänstsidan från en klient om du inte först verifierar att anroparen äger konversationen.
Serialisering och återställning
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()
Tip
Se det bevarade konversationsexemplet för ett fullständigt exempel.
Viktigt!
Sessioner är agent-/tjänstspecifika. Om du återanvänder en session med en annan agentkonfiguration eller leverantör kan det leda till en ogiltig kontext. Om den serialiserade sessionen innehåller ett sessions-ID på tjänstsidan återställer du det endast för programanvändaren eller klientorganisationen som äger det ID:t.