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.
De abstractie van de basisagent bevat verschillende opties voor het uitvoeren van de agent. Bellers kunnen ervoor kiezen om nul, één of veel invoerberichten op te geven. Bellers kunnen ook kiezen tussen streaming en niet-streaming. Laten we eens ingaan op de verschillende gebruiksscenario's.
Streaming en niet-streaming
Microsoft Agent Framework ondersteunt zowel streaming- als niet-streamingmethoden voor het uitvoeren van een agent.
Gebruik de RunAsync methode voor niet-streaming.
Console.WriteLine(await agent.RunAsync("What is the weather like in Amsterdam?"));
Gebruik de RunStreamingAsync methode voor streaming.
await foreach (var update in agent.RunStreamingAsync("What is the weather like in Amsterdam?"))
{
Console.Write(update);
}
Gebruik de run methode voor niet-streaming.
result = await agent.run("What is the weather like in Amsterdam?")
print(result.text)
Gebruik de run_stream methode voor streaming.
async for update in agent.run_stream("What is the weather like in Amsterdam?"):
if update.text:
print(update.text, end="", flush=True)
Opties voor agentuitvoering
Met de abstractie van de basisagent kan een optiesobject worden doorgegeven voor elke uitvoering van de agent, maar de mogelijkheid om een uitvoering op abstractieniveau aan te passen, is vrij beperkt. Agents kunnen aanzienlijk variëren en daarom zijn er niet echt algemene aanpassingsopties.
In gevallen waarin de beller weet welk type agent hij of zij gebruikt, is het mogelijk om specifieke opties voor het type door te geven om de uitvoering aan te passen.
Hier is de agent bijvoorbeeld een ChatClientAgent en het is mogelijk om een ChatClientAgentRunOptions object door te geven dat overkomt van AgentRunOptions.
Hierdoor kan de aanroeper aangepaste ChatOptions opties bieden die worden samengevoegd met opties op agentniveau voordat deze worden doorgegeven aan de IChatClient functie waarop de ChatClientAgent functie is gebouwd.
var chatOptions = new ChatOptions() { Tools = [AIFunctionFactory.Create(GetWeather)] };
Console.WriteLine(await agent.RunAsync("What is the weather like in Amsterdam?", options: new ChatClientAgentRunOptions(chatOptions)));
Python-agents ondersteunen het doorgeven van trefwoordargumenten om elke uitvoering aan te passen. De specifieke opties die beschikbaar zijn, zijn afhankelijk van het type agent, maar ChatAgent ondersteunt veel chatclientparameters die kunnen worden doorgegeven aan zowel run als run_stream methoden.
Algemene opties voor ChatAgent onder andere:
-
max_tokens: Maximum aantal tokens dat moet worden gegenereerd -
temperature: Bepaalt willekeurigheid bij het genereren van antwoorden -
model: Het model voor deze specifieke uitvoering overschrijven -
tools: Extra hulpprogramma's voor deze uitvoering alleen toevoegen -
response_format: Geef de antwoordindeling op (bijvoorbeeld gestructureerde uitvoer)
# Run with custom options
result = await agent.run(
"What is the weather like in Amsterdam?",
temperature=0.3,
max_tokens=150,
model="gpt-4o"
)
# Streaming with custom options
async for update in agent.run_stream(
"Tell me a detailed weather forecast",
temperature=0.7,
tools=[additional_weather_tool]
):
if update.text:
print(update.text, end="", flush=True)
Wanneer standaardinstellingen op agentniveau en opties op runniveau worden opgegeven, hebben de opties op runniveau voorrang.
Antwoordtypen
Zowel streaming- als niet-streamingantwoorden van agents bevatten alle inhoud die door de agent wordt geproduceerd. Inhoud kan gegevens bevatten die niet het resultaat zijn (dat wil gezegd het antwoord op de gebruikersvraag) van de agent. Voorbeelden van andere geretourneerde gegevens zijn functiehulpmiddeloproepen, resultaten van functiehulpprogramma-aanroepen, redeneringstekst, statusupdates en nog veel meer.
Omdat niet alle geretourneerde inhoud het resultaat is, is het belangrijk om te zoeken naar specifieke inhoudstypen bij het isoleren van het resultaat van de andere inhoud.
Als u het tekstresultaat uit een antwoord wilt extraheren, moeten alle TextContent items uit alle ChatMessages items worden samengevoegd.
Om dit te vereenvoudigen, is een Text eigenschap beschikbaar voor alle antwoordtypen waarmee alle TextContentantwoorden worden samengevoegd.
Voor de niet-streamingcase wordt alles in één AgentRunResponse object geretourneerd.
AgentRunResponse geeft toegang tot de geproduceerde berichten via de Messages eigenschap.
var response = await agent.RunAsync("What is the weather like in Amsterdam?");
Console.WriteLine(response.Text);
Console.WriteLine(response.Messages.Count);
Voor de streamingcase AgentRunResponseUpdate worden objecten gestreamd terwijl ze worden geproduceerd.
Elke update kan een deel van het resultaat van de agent bevatten, evenals verschillende andere inhoudsitems.
Net als bij de niet-streamingcase is het mogelijk om de Text eigenschap te gebruiken om het gedeelte van het resultaat in de update op te halen en in te zoomen op de details via de Contents eigenschap.
await foreach (var update in agent.RunStreamingAsync("What is the weather like in Amsterdam?"))
{
Console.WriteLine(update.Text);
Console.WriteLine(update.Contents.Count);
}
Voor de niet-streamingcase wordt alles in één AgentRunResponse object geretourneerd.
AgentRunResponse geeft toegang tot de geproduceerde berichten via de messages eigenschap.
Als u het tekstresultaat uit een antwoord wilt extraheren, moeten alle TextContent items uit alle ChatMessage items worden samengevoegd.
Om dit te vereenvoudigen, is een Text eigenschap beschikbaar voor alle antwoordtypen waarmee alle TextContentantwoorden worden samengevoegd.
response = await agent.run("What is the weather like in Amsterdam?")
print(response.text)
print(len(response.messages))
# Access individual messages
for message in response.messages:
print(f"Role: {message.role}, Text: {message.text}")
Voor de streamingcase AgentRunResponseUpdate worden objecten gestreamd terwijl ze worden geproduceerd.
Elke update kan een deel van het resultaat van de agent bevatten, evenals verschillende andere inhoudsitems.
Net als bij de niet-streamingcase is het mogelijk om de text eigenschap te gebruiken om het gedeelte van het resultaat in de update op te halen en in te zoomen op de details via de contents eigenschap.
async for update in agent.run_stream("What is the weather like in Amsterdam?"):
print(f"Update text: {update.text}")
print(f"Content count: {len(update.contents)}")
# Access individual content items
for content in update.contents:
if hasattr(content, 'text'):
print(f"Content: {content.text}")
Berichttypen
Invoer en uitvoer van agents worden weergegeven als berichten. Berichten worden onderverdeeld in inhoudsitems.
Het Microsoft Agent Framework maakt gebruik van de bericht- en inhoudstypen die worden geleverd door de Microsoft.Extensions.AI abstracties.
Berichten worden vertegenwoordigd door de ChatMessage klasse en alle inhoudsklassen nemen over van de basisklasse AIContent .
Er bestaan verschillende AIContent subklassen die worden gebruikt om verschillende typen inhoud weer te geven. Sommige worden geleverd als onderdeel van de basisabstracties Microsoft.Extensions.AI , maar providers kunnen waar nodig ook hun eigen typen toevoegen.
Hier volgen enkele populaire typen:Microsoft.Extensions.AI
| Typologie | Description |
|---|---|
| TextContent | Tekstuele inhoud die bijvoorbeeld invoer kan zijn van een gebruiker of ontwikkelaar en uitvoer van de agent. Bevat meestal het tekstresultaat van een agent. |
| DataContent | Binaire inhoud die zowel invoer als uitvoer kan zijn. Kan worden gebruikt om afbeeldings-, audio- of videogegevens door te geven aan en van de agent (waar ondersteund). |
| UriContent | Een URL die meestal verwijst naar gehoste inhoud, zoals een afbeelding, audio of video. |
| FunctionCallContent | Een aanvraag door een deductieservice om een functiehulpprogramma aan te roepen. |
| FunctionResultContent | Het resultaat van een aanroep van een functiehulpmiddel. |
Python Agent Framework maakt gebruik van bericht- en inhoudstypen uit het agent_framework pakket.
Berichten worden vertegenwoordigd door de ChatMessage klasse en alle inhoudsklassen nemen over van de basisklasse BaseContent .
Er bestaan verschillende BaseContent subklassen die worden gebruikt om verschillende typen inhoud weer te geven:
| Typologie | Description |
|---|---|
TextContent |
Tekstuele inhoud die zowel invoer als uitvoer van de agent kan zijn. Bevat meestal het tekstresultaat van een agent. |
DataContent |
Binaire inhoud die wordt weergegeven als een gegevens-URI (bijvoorbeeld met base64 gecodeerde afbeeldingen). Kan worden gebruikt om binaire gegevens door te geven aan en van de agent. |
UriContent |
Een URI die verwijst naar gehoste inhoud, zoals een afbeelding, audiobestand of document. |
FunctionCallContent |
Een aanvraag van een AI-service om een functiehulpprogramma aan te roepen. |
FunctionResultContent |
Het resultaat van een aanroep van een functiehulpmiddel. |
ErrorContent |
Foutinformatie wanneer de verwerking mislukt. |
UsageContent |
Tokengebruik en factureringsgegevens van de AI-service. |
U kunt als volgt werken met verschillende inhoudstypen:
from agent_framework import ChatMessage, TextContent, DataContent, UriContent
# Create a text message
text_message = ChatMessage(role="user", text="Hello!")
# Create a message with multiple content types
image_data = b"..." # your image bytes
mixed_message = ChatMessage(
role="user",
contents=[
TextContent("Analyze this image:"),
DataContent(data=image_data, media_type="image/png"),
]
)
# Access content from responses
response = await agent.run("Describe the image")
for message in response.messages:
for content in message.contents:
if isinstance(content, TextContent):
print(f"Text: {content.text}")
elif isinstance(content, DataContent):
print(f"Data URI: {content.uri}")
elif isinstance(content, UriContent):
print(f"External URI: {content.uri}")