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.
Bu öğretici, bir aracı konuşmasının (AgentThread) depolamada nasıl kalıcı hale getirilip daha sonra yeniden yükleneceğini göstermektedir.
Bir aracıyı bir hizmette, hatta bir istemci uygulamasında barındırırken, genellikle birden çok istek veya oturumda konuşma durumunu korumak istersiniz. kalıcı olarak AgentThreadkonuşma bağlamını kaydedebilir ve daha sonra yeniden yükleyebilirsiniz.
Önkoşullar
Önkoşullar ve NuGet paketlerini yükleme için bu öğreticideki Basit bir aracı oluşturma ve çalıştırma adımına bakın.
Konuşmayı kalıcı hale alma ve sürdürme
Bir aracı oluşturun ve konuşma durumunu tutacak yeni bir iş parçacığı alın.
using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using OpenAI;
AIAgent agent = new AzureOpenAIClient(
new Uri("https://<myresource>.openai.azure.com"),
new AzureCliCredential())
.GetChatClient("gpt-4o-mini")
.CreateAIAgent(instructions: "You are a helpful assistant.", name: "Assistant");
AgentThread thread = agent.GetNewThread();
İş parçacığını geçirerek aracıyı çalıştırın, böylece AgentThread bu değişimi içerir.
// Run the agent and append the exchange to the thread
Console.WriteLine(await agent.RunAsync("Tell me a short pirate joke.", thread));
İş parçacığı üzerinde Serialize yöntemini çağırarak onu bir JsonElement'e seri hale getirin.
Daha sonra depolama için bir dizeye dönüştürülebilir ve bir veritabanına, blob depolamaya veya dosyaya kaydedilebilir.
using System.IO;
using System.Text.Json;
// Serialize the thread state
string serializedJson = thread.Serialize(JsonSerializerOptions.Web).GetRawText();
// Example: save to a local file (replace with DB or blob storage in production)
string filePath = Path.Combine(Path.GetTempPath(), "agent_thread.json");
await File.WriteAllTextAsync(filePath, serializedJson);
Kalıcı JSON'u depolama alanından yükleyin ve agentthread örneğini yeniden oluşturun. İş parçacığı bir aracı örneği kullanılarak seri durumdan çıkarılmalıdır. Bu, özgün iş parçacığını oluşturmak için kullanılan ajan tipiyle aynı olmalıdır. Bunun nedeni, aracıların kendi iş parçacığı türlerine sahip olması ve bu aracı türüne özgü ek işlevlere sahip iş parçacıkları oluşturmasıdır.
// Read persisted JSON
string loadedJson = await File.ReadAllTextAsync(filePath);
JsonElement reloaded = JsonSerializer.Deserialize<JsonElement>(loadedJson, JsonSerializerOptions.Web);
// Deserialize the thread into an AgentThread tied to the same agent type
AgentThread resumedThread = agent.DeserializeThread(reloaded, JsonSerializerOptions.Web);
Konuşmaya devam etmek için sürdürülen yazışmayı kullanın.
// Continue the conversation with resumed thread
Console.WriteLine(await agent.RunAsync("Now tell that joke in the voice of a pirate.", resumedThread));
Bu öğretici, bir aracı konuşmasının (AgentThread) depolamada nasıl kalıcı hale getirilip daha sonra yeniden yükleneceğini göstermektedir.
Bir aracıyı bir hizmette, hatta bir istemci uygulamasında barındırırken, genellikle birden çok istek veya oturumda konuşma durumunu korumak istersiniz. kalıcı olarak AgentThreadkonuşma bağlamını kaydedebilir ve daha sonra yeniden yükleyebilirsiniz.
Önkoşullar
Önkoşullar ve Python paketlerini yükleme için bu öğreticideki Basit bir aracı oluşturma ve çalıştırma adımına bakın.
Konuşmayı kalıcı hale alma ve sürdürme
Bir aracı oluşturun ve konuşma durumunu tutacak yeni bir iş parçacığı alın.
from azure.identity import AzureCliCredential
from agent_framework import ChatAgent
from agent_framework.azure import AzureOpenAIChatClient
agent = ChatAgent(
chat_client=AzureOpenAIChatClient(
endpoint="https://<myresource>.openai.azure.com",
credential=AzureCliCredential(),
ai_model_id="gpt-4o-mini"
),
name="Assistant",
instructions="You are a helpful assistant."
)
thread = agent.get_new_thread()
İş parçacığını geçirerek aracıyı çalıştırın, böylece AgentThread bu değişimi içerir.
# Run the agent and append the exchange to the thread
response = await agent.run("Tell me a short pirate joke.", thread=thread)
print(response.text)
serialize metodunu sözlük olarak serileştirmek için iş parçacığındaki metodunu çağırın.
Daha sonra depolama için JSON'a dönüştürülebilir ve bir veritabanına, blob depolama alanına veya dosyaya kaydedilebilir.
import json
import tempfile
import os
# Serialize the thread state
serialized_thread = await thread.serialize()
serialized_json = json.dumps(serialized_thread)
# Example: save to a local file (replace with DB or blob storage in production)
temp_dir = tempfile.gettempdir()
file_path = os.path.join(temp_dir, "agent_thread.json")
with open(file_path, "w") as f:
f.write(serialized_json)
Kalıcı JSON'u depolama alanından yükleyin ve agentthread örneğini yeniden oluşturun. İş parçacığı bir aracı örneği kullanılarak seri durumdan çıkarılmalıdır. Bu, özgün iş parçacığını oluşturmak için kullanılan ajan tipiyle aynı olmalıdır. Bunun nedeni, aracıların kendi iş parçacığı türlerine sahip olması ve bu aracı türüne özgü ek işlevlere sahip iş parçacıkları oluşturmasıdır.
# Read persisted JSON
with open(file_path, "r") as f:
loaded_json = f.read()
reloaded_data = json.loads(loaded_json)
# Deserialize the thread into an AgentThread tied to the same agent type
resumed_thread = await agent.deserialize_thread(reloaded_data)
Konuşmaya devam etmek için sürdürülen yazışmayı kullanın.
# Continue the conversation with resumed thread
response = await agent.run("Now tell that joke in the voice of a pirate.", thread=resumed_thread)
print(response.text)