Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
AgentSession az ügynökfuttatások során használt beszélgetési állapottároló.
Mit AgentSession tartalmaz?
| szakterület | Cél |
|---|---|
StateBag |
Tetszőleges állapottároló ehhez a munkamenethez |
A C# AgentSession egy absztrakt alaposztály. A konkrét implementációk (létrehozva CreateSessionAsync()) további állapotot is hozzáadhatnak, például egy azonosítót a távoli chat előzmények tárolásához, amikor a szolgáltatás által kezelt előzményeket használják.
| szakterület | Cél |
|---|---|
session_id |
A munkamenet helyi egyedi azonosítója |
service_session_id |
Szolgáltatás által felügyelt előzmények használata esetén a távoli szolgáltatás munkamenet-azonosítója (például beszélgetés vagy válaszazonosító) |
state |
Környezet- és előzményszolgáltatókkal megosztott módosítható szótár |
| szakterület | Cél |
|---|---|
agent.Session |
Beszélgetéshez kötött kulcs-érték alapú állapottároló |
A munkamenetek gépelt kulcs-érték tárolót biztosítanak:
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")
Szolgáltatás munkamenet-azonosító hatókörének meghatározása
Szolgáltatás által felügyelt előzmények használata esetén a munkamenetek tartalmazhatnak szolgáltatás által kibocsátott munkamenet-azonosítót. Például az OpenAI Responses egy resp_* válaszazonosítót használhat previous_response_idként, az OpenAI Conversations API pedig egy conv_* beszélgetésazonosítót használhat beszélgetésként.
Az OpenAI alapértelmezés szerint a háttér API-kulcsra vagy projektre irányítja ezeket az azonosítókat. Ez általában akkor elegendő, ha ez a kulcs vagy projekt már megfelel az alkalmazás határának, például egy egyfelhasználós alkalmazásnak vagy bérlőnként egy külön kulcsnak/projektnek. A kockázatos üzemeltetett minta egy háttérkulcsot vagy projektet használ több végfelhasználó számára, nyers szolgáltatásoldali azonosítókat ad vissza az ügyfeleknek, és a tulajdonjog ellenőrzése nélkül fogadja vissza ezeket az azonosítókat. Az üzemeltetett vagy többfelhasználós alkalmazásokban, amelyek ugyanazt a háttérkulcsot vagy projektet használják, ne tekintse service_session_id, previous_response_id vagy conversation/conversation_id végfelhasználói hitelesítési határnak. A szolgáltatásoldali azonosítókat megbízható alkalmazástárolóban tárolhatja, leképezheti az ügyfél által látható munkamenet-azonosítókat ezekre a szolgáltatásoldali azonosítókra, és a beszélgetés folytatása előtt ellenőrizze a hitelesített felhasználót vagy bérlőt.
Beépített használati minta
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()
Munkamenet létrehozása meglévő szolgáltatásbeszélgetés-azonosítóból
Új munkamenet létrehozása meglévő beszélgetési azonosítóból ügynöktípustól függően változik. Íme néhány példa.
"ChatClientAgent használatakor"
AgentSession session = await chatClientAgent.CreateSessionAsync(conversationId);
Amikor egy A2AAgent
AgentSession session = await a2aAgent.CreateSessionAsync(contextId, taskId);
Ezt akkor használja, ha a háttérszolgáltatás már rendelkezik beszélgetési állapottal.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
Hosztolt alkalmazásokban az aktuális felhasználó vagy bérlő ellenőrzése után oldja fel a(z) <service-conversation-id> elemet az alkalmazás tulajdonában lévő tárolóból. Ne fogadjon el nyers szolgáltatásoldali azonosítókat az ügyféltől, kivéve, ha először ellenőrzi, hogy a hívóé-e a beszélgetés.
Szerializálás és visszaállítás
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
A teljes példáért tekintse meg a fenntartott beszélgetési mintát .
Fontos
A munkamenetek ügynök-/szolgáltatásspecifikusak. Ha egy munkamenetet egy másik ügynökkonfigurációval vagy szolgáltatóval újrahasznál, az érvénytelen környezethez vezethet. Ha a szerializált munkamenet szolgáltatásoldali munkamenet-azonosítót tartalmaz, csak az adott azonosítóval rendelkező alkalmazásfelhasználó vagy bérlő számára állítsa vissza.