Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak vytvořit strukturovaný výstup pomocí agenta, kde je agent založený na službě Dokončování chatu Azure OpenAI.
Důležité
Ne všechny typy agentů podporují strukturovaný výstup. Tento krok používá funkci ChatClientAgent, která podporuje strukturovaný výstup.
Požadavky
Informace o požadavcích a instalaci balíčků NuGet naleznete v kroku Vytvoření a spuštění jednoduchého agenta v tomto kurzu.
Vytvoření agenta se strukturovaným výstupem
Je ChatClientAgent postaven na vrcholu jakékoli IChatClient implementace.
Podkladový chatovací klient používá ChatClientAgent k podpoře strukturovaného výstupu.
Při vytváření agenta máte možnost zadat výchozí ChatOptions instanci, která se má použít pro podkladového chatovacího klienta.
Tato ChatOptions instance umožňuje vybrat preferovaný ChatResponseFormat.
Různé možnosti ResponseFormat jsou k dispozici.
- Předdefinovaná ChatResponseFormat.Text vlastnost: Odpověď bude prostý text.
- Integrovaná ChatResponseFormat.Json vlastnost: Odpověď bude objekt JSON bez konkrétního schématu.
- Vlastní ChatResponseFormatJson instance: Odpověď bude objekt JSON, který odpovídá určitému schématu.
Tento příklad vytvoří agenta, který vytvoří strukturovaný výstup ve formě objektu JSON, který odpovídá určitému schématu.
Nejjednodušší způsob, jak vytvořit schéma, je definovat typ, který představuje strukturu požadovaného výstupu z agenta, a pak použít metodu AIJsonUtilities.CreateJsonSchema k vytvoření schématu z typu.
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));
Pak můžete vytvořit ChatOptions instanci, která používá toto schéma pro formát odpovědi.
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")
};
Tuto ChatOptions instanci lze použít při vytváření agenta.
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
});
Teď můžete agenta spustit s některými textovými informacemi, které může agent použít k vyplnění strukturovaného výstupu.
var response = await agent.RunAsync("Please provide information about John Smith, who is a 35-year-old software engineer.");
Odpověď agenta je pak možné deserializovat do PersonInfo třídy pomocí Deserialize<T> metody na objekt odpovědi.
var personInfo = response.Deserialize<PersonInfo>(JsonSerializerOptions.Web);
Console.WriteLine($"Name: {personInfo.Name}, Age: {personInfo.Age}, Occupation: {personInfo.Occupation}");
Při streamování se odpověď agenta streamuje jako řada aktualizací a odpověď můžete deserializovat pouze po přijetí všech aktualizací. Před deserializací je nutné sestavit všechny aktualizace do jediné odpovědi.
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);
V tomto kurzu se dozvíte, jak vytvořit strukturovaný výstup pomocí agenta, kde je agent založený na službě Dokončování chatu Azure OpenAI.
Důležité
Ne všechny typy agentů podporují strukturovaný výstup. Podporuje ChatAgent strukturovaný výstup při použití s kompatibilními chatovacími klienty.
Požadavky
Informace o požadavcích a instalaci balíčků najdete v části Vytvoření a spuštění jednoduchého agenta v tomto kurzu.
Vytvoření agenta se strukturovaným výstupem
Je ChatAgent postaven na jakékoli implementaci chatovacího klienta, která podporuje strukturovaný výstup.
ChatAgent Použije response_format parametr k určení požadovaného výstupního schématu.
Při vytváření nebo spuštění agenta můžete poskytnout Pydantický model, který definuje strukturu očekávaného výstupu.
Různé formáty odpovědí se podporují na základě možností podkladového chatovacího klienta.
Tento příklad vytvoří agenta, který vytvoří strukturovaný výstup ve formě objektu JSON, který odpovídá schématu Pydantického modelu.
Nejprve definujte Pydantický model, který představuje strukturu požadovaného výstupu z agenta:
from pydantic import BaseModel
class PersonInfo(BaseModel):
"""Information about a person."""
name: str | None = None
age: int | None = None
occupation: str | None = None
Teď můžete vytvořit agenta pomocí chatovacího klienta Azure OpenAI:
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."
)
Teď můžete spustit agenta s některými textovými informacemi a zadat formát strukturovaného výstupu pomocí parametru response_format :
response = await agent.run(
"Please provide information about John Smith, who is a 35-year-old software engineer.",
response_format=PersonInfo
)
Odpověď agenta bude obsahovat strukturovaný výstup ve value vlastnosti, ke kterému je možné přistupovat přímo jako instance modelu Pydantic:
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")
Při streamování se odpověď agenta streamuje jako řada aktualizací. Pokud chcete získat strukturovaný výstup, musíte shromáždit všechny aktualizace a pak získat přístup k konečné hodnotě odpovědi:
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}")