Dela via


Bevara och återuppta agentkonversationer

Den här handledningen visar hur du lagrar en agentkonversation (AgentThread) i lagring och laddar upp den senare.

När du är värd för en agent i en tjänst eller till och med i ett klientprogram, vill du ofta upprätthålla konversationstillstånd över flera begäranden eller sessioner. Genom att spara AgentThread kan du spara kontexten för konversationen och läsa in den igen senare.

Förutsättningar

Förutsättningar och installation av NuGet-paket finns i steget Skapa och kör en enkel agent i den här självstudien.

Bevara och återuppta konversationen

Skapa en agent och hämta en ny tråd som ska innehålla konversationstillståndet.

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();

Kör agenten genom att vidarebefordra tråden, så att AgentThread inkluderar det här utbytet.

// Run the agent and append the exchange to the thread
Console.WriteLine(await agent.RunAsync("Tell me a short pirate joke.", thread));

Serialize Anropa metoden i tråden för att serialisera den till ett JsonElement. Den kan sedan konverteras till en sträng för lagring och sparas i en databas, bloblagring eller fil.

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);

Läs in den bevarade JSON-filen från lagringen och återskapa AgentThread-instansen från den. Tråden måste deserialiseras med hjälp av en agentinstans. Detta bör vara samma agenttyp som användes för att skapa den ursprungliga tråden. Detta beror på att agenter kan ha sina egna trådtyper och kan konstruera trådar med ytterligare funktioner som är specifika för den agenttypen.

// 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);

Använd den återupptagna tråden för att fortsätta konversationen.

// Continue the conversation with resumed thread
Console.WriteLine(await agent.RunAsync("Now tell that joke in the voice of a pirate.", resumedThread));

Den här handledningen visar hur du lagrar en agentkonversation (AgentThread) i lagring och laddar upp den senare.

När du är värd för en agent i en tjänst eller till och med i ett klientprogram, vill du ofta upprätthålla konversationstillstånd över flera begäranden eller sessioner. Genom att spara AgentThread kan du spara kontexten för konversationen och läsa in den igen senare.

Förutsättningar

Förutsättningar och installation av Python-paket finns i steget Skapa och kör en enkel agent i den här självstudien.

Bevara och återuppta konversationen

Skapa en agent och hämta en ny tråd som ska innehålla konversationstillståndet.

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()

Kör agenten genom att vidarebefordra tråden, så att AgentThread inkluderar det här utbytet.

# 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 Anropa metoden i tråden för att serialisera den till en ordlista. Den kan sedan konverteras till JSON för lagring och sparas i en databas, bloblagring eller fil.

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)

Läs in den bevarade JSON-filen från lagringen och återskapa AgentThread-instansen från den. Tråden måste deserialiseras med hjälp av en agentinstans. Detta bör vara samma agenttyp som användes för att skapa den ursprungliga tråden. Detta beror på att agenter kan ha sina egna trådtyper och kan konstruera trådar med ytterligare funktioner som är specifika för den agenttypen.

# 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)

Använd den återupptagna tråden för att fortsätta konversationen.

# 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)

Nästa steg