Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie ziet u hoe u een agentgesprek (AgentThread) kunt behouden om deze op te slaan en later opnieuw te laden.
Wanneer u een agent host in een service of zelfs in een clienttoepassing, wilt u vaak de gespreksstatus behouden voor meerdere aanvragen of sessies. Door AgentThread te behouden, kunt u de gesprekscontext opslaan en later herladen.
Vereiste voorwaarden
Zie de stap Een eenvoudige agent maken en uitvoeren in deze zelfstudie voor vereisten en het installeren van NuGet-pakketten.
Het gesprek behouden en hervatten
Maak een agent en haal een nieuwe thread op die de gespreksstatus vasthoudt.
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();
Voer de agent uit en geef de thread door, zodat deze uitwisseling in AgentThread wordt opgenomen.
// Run the agent and append the exchange to the thread
Console.WriteLine(await agent.RunAsync("Tell me a short pirate joke.", thread));
Roep de Serialize methode op de thread aan om deze te serialiseren naar een JsonElement.
Deze kan vervolgens worden geconverteerd naar een tekenreeks voor opslag en opgeslagen in een database, blobopslag of bestand.
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);
Laad de persistente JSON vanuit de opslag en maak het AgentThread-exemplaar opnieuw. De thread moet worden gedeserialiseerd door een agentexemplaar. Dit moet hetzelfde agenttype zijn dat is gebruikt om de oorspronkelijke thread te maken. Dit komt doordat agents mogelijk hun eigen threadtypen hebben en threads kunnen samenstellen met extra functionaliteit die specifiek is voor dat agenttype.
// 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);
Gebruik de hervatte draad om het gesprek voort te zetten.
// Continue the conversation with resumed thread
Console.WriteLine(await agent.RunAsync("Now tell that joke in the voice of a pirate.", resumedThread));
In deze zelfstudie ziet u hoe u een agentgesprek (AgentThread) kunt behouden om deze op te slaan en later opnieuw te laden.
Wanneer u een agent host in een service of zelfs in een clienttoepassing, wilt u vaak de gespreksstatus behouden voor meerdere aanvragen of sessies. Door AgentThread te behouden, kunt u de gesprekscontext opslaan en later herladen.
Vereiste voorwaarden
Zie de stap Een eenvoudige agent maken en uitvoeren in deze zelfstudie voor vereisten en het installeren van Python-pakketten.
Het gesprek behouden en hervatten
Maak een agent en haal een nieuwe thread op die de gespreksstatus vasthoudt.
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()
Voer de agent uit en geef de thread door, zodat deze uitwisseling in AgentThread wordt opgenomen.
# 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)
Roep de serialize methode op de thread aan om deze te serialiseren naar een woordenlijst.
Deze kan vervolgens worden geconverteerd naar JSON voor opslag en worden opgeslagen in een database, blobopslag of bestand.
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)
Laad de persistente JSON vanuit de opslag en maak het AgentThread-exemplaar opnieuw. De thread moet worden gedeserialiseerd door een agentexemplaar. Dit moet hetzelfde agenttype zijn dat is gebruikt om de oorspronkelijke thread te maken. Dit komt doordat agents mogelijk hun eigen threadtypen hebben en threads kunnen samenstellen met extra functionaliteit die specifiek is voor dat agenttype.
# 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)
Gebruik de hervatte draad om het gesprek voort te zetten.
# 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)