Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernschritt erfahren Sie, wie Sie eine strukturierte Ausgabe mit einem Agenten erzeugen, der auf dem Azure OpenAI Chat Completion-Service basiert.
Von Bedeutung
Nicht alle Agenttypen unterstützen strukturierte Ausgabe. Dieser Schritt verwendet eine ChatClientAgent, die strukturierte Ausgabe unterstützt.
Voraussetzungen
Die erforderlichen Komponenten und die Installation von NuGet-Paketen finden Sie im Schritt Erstellen und Ausführen eines einfachen Agents in diesem Lernprogramm.
Erstellen eines Agents mit strukturierter Ausgabe
Dies ChatClientAgent basiert auf jeder IChatClient Implementierung.
Der ChatClientAgent nutzt die Unterstützung für strukturierte Ausgaben, die vom zugrunde liegenden Chatclient bereitgestellt wird.
Beim Erstellen des Agents haben Sie die Möglichkeit, die Standardinstanz ChatOptions bereitzustellen, die für den zugrunde liegenden Chatclient verwendet werden soll.
Mit dieser ChatOptions Instanz können Sie eine bevorzugte ChatResponseFormatInstanz auswählen.
Es stehen verschiedene Optionen zur ResponseFormat Verfügung:
- Eine integrierte ChatResponseFormat.Text Eigenschaft: Die Antwort wird im Klartext sein.
- Eine integrierte Eigenschaft: Die Antwort ist ein JSON-Objekt ChatResponseFormat.Json ohne ein bestimmtes Schema.
- Eine benutzerdefinierte ChatResponseFormatJson Instanz: Die Antwort ist ein JSON-Objekt, das einem bestimmten Schema entspricht.
In diesem Beispiel wird ein Agent erstellt, der eine strukturierte Ausgabe in Form eines JSON-Objekts erzeugt, das einem bestimmten Schema entspricht.
Die einfachste Möglichkeit zum Erstellen des Schemas besteht darin, einen Typ zu definieren, der die Struktur der vom Agent gewünschten Ausgabe darstellt, und dann die AIJsonUtilities.CreateJsonSchema Methode zum Erstellen eines Schemas aus dem Typ verwenden.
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.AI;
public class PersonInfo
{
public string? Name { get; set; }
public int? Age { get; set; }
public string? Occupation { get; set; }
}
JsonElement schema = AIJsonUtilities.CreateJsonSchema(typeof(PersonInfo));
Anschließend können Sie eine ChatOptions Instanz erstellen, die dieses Schema für das Antwortformat verwendet.
using Microsoft.Extensions.AI;
ChatOptions chatOptions = new()
{
ResponseFormat = ChatResponseFormat.ForJsonSchema(
schema: schema,
schemaName: "PersonInfo",
schemaDescription: "Information about a person including their name, age, and occupation")
};
Diese ChatOptions Instanz kann beim Erstellen des Agents verwendet werden.
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(new ChatClientAgentOptions()
{
Name = "HelpfulAssistant",
Instructions = "You are a helpful assistant.",
ChatOptions = chatOptions
});
Jetzt können Sie den Agenten einfach mit Textinformationen starten, die er zum Ausfüllen der strukturierten Ausgabe verwenden kann.
var response = await agent.RunAsync("Please provide information about John Smith, who is a 35-year-old software engineer.");
Die Agentantwort kann dann mithilfe der PersonInfo Methode für das Antwortobjekt in die Deserialize<T> Klasse deserialisiert werden.
var personInfo = response.Deserialize<PersonInfo>(JsonSerializerOptions.Web);
Console.WriteLine($"Name: {personInfo.Name}, Age: {personInfo.Age}, Occupation: {personInfo.Occupation}");
Beim Streaming wird die Agent-Antwort als eine Reihe von Updates gestreamt, und Sie können die Antwort nur deserialisieren, nachdem alle Updates empfangen wurden. Sie müssen alle Updates in einer einzigen Antwort zusammenstellen, bevor Sie sie deserialisieren.
var updates = agent.RunStreamingAsync("Please provide information about John Smith, who is a 35-year-old software engineer.");
personInfo = (await updates.ToAgentRunResponseAsync()).Deserialize<PersonInfo>(JsonSerializerOptions.Web);
In diesem Lernschritt erfahren Sie, wie Sie eine strukturierte Ausgabe mit einem Agenten erzeugen, der auf dem Azure OpenAI Chat Completion-Service basiert.
Von Bedeutung
Nicht alle Agenttypen unterstützen strukturierte Ausgabe.
ChatAgent unterstützt die strukturierte Ausgabe, wenn es mit kompatiblen Chat-Clients verwendet wird.
Voraussetzungen
Die erforderlichen Komponenten und die Installation von Paketen finden Sie im Schritt "Erstellen und Ausführen eines einfachen Agents " in diesem Lernprogramm.
Erstellen eines Agents mit strukturierter Ausgabe
Diese ChatAgent basiert auf jeder Chat-Client-Implementierung, die strukturierte Ausgabe unterstützt.
Der ChatAgent verwendet den response_format Parameter, um das gewünschte Ausgabeschema anzugeben.
Beim Erstellen oder Ausführen des Agents können Sie ein Pydantisches Modell bereitstellen, das die Struktur der erwarteten Ausgabe definiert.
Verschiedene Antwortformate werden basierend auf den zugrunde liegenden Chatclientfunktionen unterstützt.
In diesem Beispiel wird ein Agent erstellt, der eine strukturierte Ausgabe in Form eines JSON-Objekts erzeugt, das einem Pydantischen Modellschema entspricht.
Definieren Sie zunächst ein Pydantisches Modell, das die Struktur der gewünschten Ausgabe aus dem Agent darstellt:
from pydantic import BaseModel
class PersonInfo(BaseModel):
"""Information about a person."""
name: str | None = None
age: int | None = None
occupation: str | None = None
Jetzt können Sie einen Agent mit dem Azure OpenAI-Chatclient erstellen:
from agent_framework.azure import AzureOpenAIChatClient
from azure.identity import AzureCliCredential
# Create the agent using Azure OpenAI Chat Client
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent(
name="HelpfulAssistant",
instructions="You are a helpful assistant that extracts person information from text."
)
Jetzt können Sie den Agent mit textbezogenen Informationen ausführen und das strukturierte Ausgabeformat mithilfe des response_format Parameters angeben:
response = await agent.run(
"Please provide information about John Smith, who is a 35-year-old software engineer.",
response_format=PersonInfo
)
Die Agentantwort enthält die strukturierte Ausgabe in der value Eigenschaft, auf die direkt als Pydantische Modellinstanz zugegriffen werden kann:
if response.value:
person_info = response.value
print(f"Name: {person_info.name}, Age: {person_info.age}, Occupation: {person_info.occupation}")
else:
print("No structured data found in response")
Beim Streaming wird die Agentantwort als eine Reihe von Updates übertragen. Um die strukturierte Ausgabe zu erhalten, müssen Sie alle Updates sammeln und dann auf den endgültigen Antwortwert zugreifen:
from agent_framework import AgentRunResponse
# Get structured response from streaming agent using AgentRunResponse.from_agent_response_generator
# This method collects all streaming updates and combines them into a single AgentRunResponse
final_response = await AgentRunResponse.from_agent_response_generator(
agent.run_stream(query, response_format=PersonInfo),
output_format_type=PersonInfo,
)
if final_response.value:
person_info = final_response.value
print(f"Name: {person_info.name}, Age: {person_info.age}, Occupation: {person_info.occupation}")