Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
AgentSession aracı çalıştırmaları arasında kullanılan konuşma durumu kapsayıcısıdır.
Ne içeriyor AgentSession
| Alan | Purpose |
|---|---|
StateBag |
Bu oturum için rastgele durum kapsayıcısı |
C# AgentSession soyut bir temel sınıftır. Somut uygulamalar (CreateSessionAsync() aracılığıyla oluşturulan) hizmet tarafından yönetilen geçmişin kullanılması durumunda, uzak sohbet geçmişi depolama için bir kimlik gibi ek bir durum ekleyebilir.
| Alan | Purpose |
|---|---|
session_id |
Bu oturum için yerel benzersiz tanımlayıcı |
service_session_id |
Hizmet tarafından yönetilen geçmiş kullanıldığında konuşma veya yanıt kimliği gibi uzak hizmet oturumu tanımlayıcısı |
state |
Bağlam/geçmiş sağlayıcılarıyla paylaşılan değiştirilebilir sözlük |
| Alan | Purpose |
|---|---|
agent.Session |
Konuşmaya bağlı anahtar-değer durum kapsayıcısı |
Oturumlar, türlenmiş anahtar-değer depolama alanı sağlar:
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")
Hizmet oturumu kimliği kapsamlandırması
Hizmet tarafından yönetilen geçmiş kullanıldığında, bir oturum hizmet tarafından verilen bir oturum tanımlayıcısı içerebilir. Örneğin, OpenAI Responses, resp_* olarak bir previous_response_id yanıt kimliği kullanabilir ve OpenAI Conversations API, konuşma için bir conv_* konuşma kimliği kullanabilir.
OpenAI, bu kimlikleri varsayılan olarak ilgili API anahtarı veya proje ile sınırlandırır. Bu genellikle bu anahtar veya proje, tek kullanıcılı uygulama veya kiracı başına ayrı bir anahtar/proje gibi uygulama sınırıyla zaten eşleştiğinde yeterlidir. Riskli olan barındırılan yapı; birden çok son kullanıcı için arka planda tek bir anahtar veya proje kullanmak, ham hizmet tarafı kimliklerini istemcilere olduğu gibi iletmek ve sahipliğini doğrulamadan bu kimlikleri geri kabul etmektir. Tek bir altyapı anahtarını veya projeyi yeniden kullanan barındırılan veya çok kullanıcılı uygulamalarda, service_session_id, previous_response_id veya conversation/conversation_id ögelerini son kullanıcı yetkilendirme sınırları olarak değerlendirmeyin. Hizmet tarafı kimliklerini güvenilen uygulama depolama alanında depolayın, istemci tarafından görünen oturum kimliklerini bu hizmet tarafı kimlikleriyle eşleyin ve konuşmayı sürdürmeden önce kimliği doğrulanmış kullanıcı veya kiracıyı doğrulayın.
Yerleşik kullanım düzeni
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()
Harness Agent ile oturum kullanma
Harness Agent, yukarıda açıklanan aynı AgentSession yaşam döngüsünü kullanır. Tek bir oturumu sırayla yeniden kullanın; böylece sohbet geçmişi ve oturum destekli todos, işletim modu, dosya belleği, araç onayları ve arka plan görevi durumu gibi özellikler bağlı kalır. Bu durumun, işlem yeniden başlatıldığında korunması gerekiyorsa oturumu serileştirin.
HarnessAgent varsayılan olarak InMemoryChatHistoryProvider şeklinde ayarlanır. Geçmişin başka bir depo kullanması gerektiğinde, onu HarnessAgentOptions.ChatHistoryProvider aracılığıyla değiştirin.
AsHarnessAgent(options), new HarnessAgent(chatClient, options) oluşturmanın kısaltmasıdır.
HarnessAgent agent = chatClient.AsHarnessAgent();
AgentSession session = await agent.CreateSessionAsync();
await agent.RunAsync("Plan the migration.", session);
await agent.RunAsync("Continue with the next step.", session);
var serialized = await agent.SerializeSessionAsync(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
Koşum, her model çağrısından sonra yalnızca dış aracı çalıştırıldıktan sonra değil, bir araç çağırma döngüsü içinde yerel sohbet geçmişini kalıcı hale getirir. Bu döngü geçmişini ve varsayılan bağlam sağlayıcılarının durumunu korumak için aynı oturumu geçirmeye devam edin.
create_harness_agent, history_provider öğesini varsayılan olarak InMemoryHistoryProvider() yapar. history’nin başka bir store kullanması gerektiğinde, özel bir HistoryProvider öğesini history_provider= üzerinden iletin.
agent = create_harness_agent(client)
session = agent.create_session()
await agent.run("Plan the migration.", session=session)
await agent.run("Continue with the next step.", session=session)
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
Test düzeneği, her hizmet çağrısı için geçmişin kalıcı olarak saklanmasını gerektirdiğinden, yapılandırılmış geçmiş sağlayıcısı araç döngüsü sırasında her model çağrısını kaydeder. Varsayılan araç onayı ara yazılımı için de bir oturum gereklidir; onay ve bağlam sağlayıcısı durumunu korumak için yeniden kullanabilir ve geri yükleyebilirsiniz.
Harness Agent şu anda Go SDK'sında mevcut değildir. Yukarıda gösterilen normal oturum düzenini kullanın.
Mevcut bir hizmet konuşma kimliğinden oturum oluşturma
Mevcut bir görüşme kimliğinden yeni bir oturum oluşturma, aracı türüne göre farklılık gösterir. Aşağıda bazı örnekler verilmiştir.
Kullanırken ChatClientAgent
AgentSession session = await chatClientAgent.CreateSessionAsync(conversationId);
Kullanırken bir A2AAgent
AgentSession session = await a2aAgent.CreateSessionAsync(contextId, taskId);
Bunu, destek hizmetinin konuşma durumu bilgisine zaten sahip olması durumunda kullanın.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
Barındırılan uygulamalarda, geçerli kullanıcıyı veya kiracıyı kontrol ettikten sonra <service-conversation-id> öğesini uygulamaya ait depolama alanından çözümleyin. Çağrıyı yapan tarafın konuşmanın sahibi olduğunu önce doğrulamadıkça, istemciden ham hizmet tarafı kimliklerini kabul etmekten kaçının.
Serileştirme ve geri yükleme
var serialized = agent.SerializeSession(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
Kendi kendine barındırılan bir uygulamada, AgentSessionStore istek işleme sürecinin bir parçası olarak oturumları bir sürdürme kimliğiyle yükleyip kaydedebilir. Bu, bir oturumu manuel olarak kalıcılaştırmaktan ve bir geçmiş sağlayıcısını yapılandırmaktan farklıdır. Bkz. Kendi kendini barındıran Aracı Çerçevesi uygulamaları.
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
Tam bir örnek için kalıcı olarak saklanan konuşma örneğine bakın.
Önemli
Oturumlar aracıya/hizmete özeldir. Oturumu farklı bir ajan yapılandırması veya sağlayıcıyla yeniden kullanmak, geçersiz bir bağlama neden olabilir. Serileştirilmiş oturum bir hizmet tarafı oturum kimliği içeriyorsa, yalnızca bu kimliğin sahibi olan uygulama kullanıcısı veya kiracı için geri yükleyin.