Freigeben über


Speichern und Fortführen von Agentunterhaltungen

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 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 einen neuen Thread ab, der den Gesprächsstatus speichert.

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

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
Console.WriteLine(await agent.RunAsync("Tell me a short pirate joke.", thread));

Rufen Sie die Serialize Methode im Thread 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 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);

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

Verwenden Sie den fortgesetzten Thread, um die Unterhaltung fortzusetzen.

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

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