Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez az oktatóanyag lépés bemutatja, hogyan hozhat létre strukturált kimenetet egy ügynökkel, ahol az ügynök az Azure OpenAI Csevegés befejezése szolgáltatásra épül.
Fontos
Nem minden ügynöktípus támogatja a strukturált kimenetet. A ChatClientAgent támogatja a strukturált kimenetet ebben a lépésben.
Előfeltételek
Az előfeltételekről és a NuGet-csomagok telepítéséről lásd az egyszerű ügynök létrehozása és futtatása lépést ebben az oktatóanyagban.
Az ügynök létrehozása strukturált kimenettel
A ChatClientAgent rendszer minden IChatClient implementációra épül.
A ChatClientAgent rendszer a mögöttes csevegőügyfél által biztosított strukturált kimenet támogatását használja.
Az ügynök létrehozásakor megadhatja az alapul ChatOptions szolgáló csevegőügyfél alapértelmezett példányát.
Ez a ChatOptions példány lehetővé teszi egy előnyben részesített ChatResponseFormat kiválasztását.
Különböző lehetőségek ResponseFormat állnak rendelkezésre:
- Beépített ChatResponseFormat.Text tulajdonság: A válasz egyszerű szöveg lesz.
- Beépített tulajdonság: A válasz egy olyan JSON-objektum ChatResponseFormat.Json lesz, amely nem rendelkezik adott sémával.
- Egyéni ChatResponseFormatJson példány: A válasz egy adott sémának megfelelő JSON-objektum lesz.
Ez a példa létrehoz egy ügynököt, amely egy adott sémának megfelelő JSON-objektum formájában hoz létre strukturált kimenetet.
A séma létrehozásának legegyszerűbb módja egy olyan típus definiálása, amely az ügynök által kívánt kimenet szerkezetét jelöli, majd a AIJsonUtilities.CreateJsonSchema metódussal létrehoz egy sémát a típusból.
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));
Ezután létrehozhat egy példányt ChatOptions , amely ezt a sémát használja a válaszformátumhoz.
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")
};
Ez a ChatOptions példány használható az ügynök létrehozásakor.
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
});
Most már egyszerűen futtathatja az ügynököt olyan szöveges információkkal, amelyekkel az ügynök kitöltheti a strukturált kimenetet.
var response = await agent.RunAsync("Please provide information about John Smith, who is a 35-year-old software engineer.");
Az ügynök válasza ezután deszerializálható az PersonInfo osztályba a Deserialize<T> válaszobjektum metódusával.
var personInfo = response.Deserialize<PersonInfo>(JsonSerializerOptions.Web);
Console.WriteLine($"Name: {personInfo.Name}, Age: {personInfo.Age}, Occupation: {personInfo.Occupation}");
Streameléskor az ügynök válasza frissítéssorozatként lesz streamelve, és a válasz csak az összes frissítés beérkezése után deszerializálható. Az összes frissítést a deszerializálás előtt egyetlen válaszba kell összeállítania.
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);
Ez az oktatóanyag lépés bemutatja, hogyan hozhat létre strukturált kimenetet egy ügynökkel, ahol az ügynök az Azure OpenAI Csevegés befejezése szolgáltatásra épül.
Fontos
Nem minden ügynöktípus támogatja a strukturált kimenetet. Támogatja ChatAgent a strukturált kimenetet, ha kompatibilis csevegőalkalmazásokkal használják.
Előfeltételek
Az előfeltételekről és a csomagok telepítéséről lásd a Egyszerű ügynök létrehozása és futtatása lépést ebben az oktatóanyagban.
Az ügynök létrehozása strukturált kimenettel
A ChatAgent bármely olyan csevegőügyfél-implementáción alapul, amely támogatja a strukturált kimenetet.
A ChatAgent paraméter a response_format kívánt kimeneti séma megadására használja.
Az ügynök létrehozásakor vagy futtatásakor megadhat egy Pydantic-modellt, amely meghatározza a várt kimenet struktúráját.
A különböző válaszformátumok a mögöttes csevegőügyfél képességei alapján támogatottak.
Ez a példa létrehoz egy ügynököt, amely egy Pydantic-modellsémának megfelelő JSON-objektum formájában hoz létre strukturált kimenetet.
Először definiáljon egy Pydantic-modellt, amely az ügynök által kívánt kimenet struktúráját jelöli:
from pydantic import BaseModel
class PersonInfo(BaseModel):
"""Information about a person."""
name: str | None = None
age: int | None = None
occupation: str | None = None
Most már létrehozhat egy ügynököt az Azure OpenAI csevegőügyfél használatával:
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."
)
Most már futtathatja az ügynököt szöveges információkkal, és megadhatja a strukturált kimeneti formátumot a response_format paraméterrel:
response = await agent.run(
"Please provide information about John Smith, who is a 35-year-old software engineer.",
response_format=PersonInfo
)
Az ügynök válasza a value tulajdonságban található strukturált kimenetet tartalmazza, amely közvetlenül elérhető modellpéldányként a Pydantic-ban:
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")
Streameléskor az ügynök válasza frissítéssorozatként lesz streamelve. A strukturált kimenet lekéréséhez össze kell gyűjtenie az összes frissítést, majd hozzá kell férnie a végső válaszértékhez:
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}")