Freigeben über


Speichern und Fortführen von Agentunterhaltungen

Dieses Tutorial zeigt, wie man eine Agentensitzung (AgentSession) speichert und später wieder lädt.

Beim Hosten eines Agents in einem Dienst oder sogar in einer Clientanwendung möchten Sie häufig den Gesprächsstatus über mehrere Anfragen oder Sitzungen hinweg aufrechterhalten. Durch Speichern des AgentSession Unterhaltungskontexts können Sie den Unterhaltungskontext speichern und später erneut laden.

Voraussetzungen

Die erforderlichen Komponenten und die Installation von NuGet-Paketen finden Sie im Schritt Erstellen und Ausführen eines einfachen Agents in diesem Lernprogramm.

Beibehalten und Fortsetzen der Unterhaltung

Erstellen Sie einen Agenten und rufen Sie eine neue Sitzung ab, die den Gesprächszustand enthält.

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")
     .AsAIAgent(instructions: "You are a helpful assistant.", name: "Assistant");

AgentSession session = await agent.GetNewSessionAsync();

Führen Sie den Agent aus, und übergeben Sie die Sitzung, sodass dieser AgentSession Austausch eingeschlossen wird.

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

Rufen Sie die Serialize Methode für die Sitzung auf, um sie in ein JsonElement zu serialisieren. Sie kann dann in eine Zeichenfolge für den Speicher konvertiert und in einer Datenbank, einem BLOB-Speicher oder einer Datei gespeichert werden.

using System.IO;
using System.Text.Json;

// Serialize the session state
string serializedJson = session.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_session.json");
await File.WriteAllTextAsync(filePath, serializedJson);

Laden Sie den permanenten JSON-Code aus dem Speicher, und erstellen Sie die AgentSession-Instanz daraus neu. Die Sitzung muss mithilfe einer Agentinstanz deserialisiert werden. Dies sollte derselbe Agenttyp sein, der zum Erstellen der ursprünglichen Sitzung verwendet wurde. Dies liegt daran, dass Agents möglicherweise über eigene Sitzungstypen verfügen und Sitzungen mit zusätzlichen Funktionen erstellen können, die für diesen Agenttyp spezifisch sind.

// Read persisted JSON
string loadedJson = await File.ReadAllTextAsync(filePath);
JsonElement reloaded = JsonSerializer.Deserialize<JsonElement>(loadedJson, JsonSerializerOptions.Web);

// Deserialize the session into an AgentSession tied to the same agent type
AgentSession resumedSession = await agent.DeserializeSessionAsync(reloaded, JsonSerializerOptions.Web);

Verwenden Sie die fortgesetzte Sitzung, um die Unterhaltung fortzusetzen.

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

In dieser Anleitung wird gezeigt, wie man eine Agent-Unterhaltung (AgentThread) speichern und später erneut laden kann.

Beim Hosten eines Agents in einem Dienst oder sogar in einer Clientanwendung möchten Sie häufig den Gesprächsstatus über mehrere Anfragen oder Sitzungen hinweg aufrechterhalten. Durch Speichern des AgentThread Unterhaltungskontexts können Sie den Unterhaltungskontext speichern und später erneut laden.

Voraussetzungen

Die erforderlichen Komponenten und die Installation von Python-Paketen finden Sie im Abschnitt zum Erstellen und Ausführen eines einfachen Agent-Schritts in diesem Lernprogramm.

Beibehalten und Fortsetzen der Unterhaltung

Erstellen Sie einen Agenten, und rufen Sie einen neuen Thread ab, der den Gesprächsstatus speichert.

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

Führen Sie den Agent aus, und übergeben Sie den Thread, sodass dieser AgentThread Austausch eingeschlossen wird.

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

Rufen Sie die serialize Methode im Thread auf, um sie in ein Wörterbuch zu serialisieren. Sie kann dann für den Speicher in JSON konvertiert und in einer Datenbank, einem BLOB-Speicher oder einer Datei gespeichert werden.

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)

Laden Sie den permanenten JSON-Code aus dem Speicher, und erstellen Sie die AgentThread-Instanz daraus neu. Der Thread muss mithilfe einer Agentinstanz deserialisiert werden. Dies sollte derselbe Agenttyp sein, der zum Erstellen des ursprünglichen Threads verwendet wurde. Dies liegt daran, dass Agents möglicherweise über eigene Threadtypen verfügen und Threads mit zusätzlichen Funktionen erstellen können, die für diesen Agenttyp spezifisch sind.

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

Verwenden Sie den fortgesetzten Thread, um die Unterhaltung fortzusetzen.

# 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ächste Schritte