Session

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.

Következő lépések