Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo conservar una conversación del agente (AgentThread) en el almacenamiento y volver a cargarla más adelante.
Al hospedar un agente en un servicio o incluso en una aplicación cliente, a menudo se desea mantener el estado conversacional en varias solicitudes o sesiones. Al conservar AgentThread, puede guardar el contexto de conversación y volver a cargarlo más adelante.
Prerrequisitos
Para conocer los requisitos previos e instalar paquetes NuGet, consulte el paso Creación y ejecución de un agente sencillo en este tutorial.
Persistencia y reanudación de la conversación
Cree un agente y obtenga un nuevo hilo que mantenga el estado de la conversació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();
Ejecute el agente, pasando en el subproceso, para que AgentThread incluya este intercambio.
// Run the agent and append the exchange to the thread
Console.WriteLine(await agent.RunAsync("Tell me a short pirate joke.", thread));
Llame al método Serialize en el subproceso para serializarlo en un JsonElement.
Después, se puede convertir en una cadena para el almacenamiento y guardarla en una base de datos, almacenamiento de blobs o archivo.
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);
Cargue el JSON persistente desde el almacenamiento y vuelva a crear la instancia de AgentThread a partir de él. El subproceso debe deserializarse mediante una instancia del agente. Debe ser el mismo tipo de agente que se usó para crear el hilo original. Esto se debe a que los agentes pueden tener sus propios tipos de subprocesos y pueden construir subprocesos con funcionalidad adicional específica de ese tipo de agente.
// 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);
Usa el hilo reanudado para continuar la conversación.
// Continue the conversation with resumed thread
Console.WriteLine(await agent.RunAsync("Now tell that joke in the voice of a pirate.", resumedThread));
En este tutorial se muestra cómo conservar una conversación del agente (AgentThread) en el almacenamiento y volver a cargarla más adelante.
Al hospedar un agente en un servicio o incluso en una aplicación cliente, a menudo se desea mantener el estado conversacional en varias solicitudes o sesiones. Al conservar AgentThread, puede guardar el contexto de conversación y volver a cargarlo más adelante.
Prerrequisitos
Para conocer los requisitos previos e instalar paquetes de Python, consulte el paso Creación y ejecución de un agente sencillo en este tutorial.
Persistencia y reanudación de la conversación
Cree un agente y obtenga un nuevo hilo que mantenga el estado de la conversació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()
Ejecute el agente, pasando en el subproceso, para que AgentThread incluya este intercambio.
# 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)
Llame al método serialize en el subproceso para serializarlo en un diccionario.
Después, se puede convertir en JSON para el almacenamiento y guardarlo en una base de datos, blob storage o archivo.
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)
Cargue el JSON persistente desde el almacenamiento y vuelva a crear la instancia de AgentThread a partir de él. El subproceso debe deserializarse mediante una instancia del agente. Debe ser el mismo tipo de agente que se usó para crear el hilo original. Esto se debe a que los agentes pueden tener sus propios tipos de subprocesos y pueden construir subprocesos con funcionalidad adicional específica de ese tipo de agente.
# 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)
Usa el hilo reanudado para continuar la conversació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)