![]()
Deze les behandelt:
Na het voltooien van deze les weet je hoe je:
Codevoorbeelden voor Microsoft Agent Framework (MAF) zijn te vinden in deze repository onder de bestanden xx-python-agent-framework en xx-dotnet-agent-framework.

Microsoft Agent Framework (MAF) is het uniforme framework van Microsoft voor het bouwen van AI-agents. Het biedt de flexibiliteit om een breed scala aan agentgebaseerde usecases aan te pakken die zowel in productie als onderzoeksomgevingen voorkomen, waaronder:
Om AI-agents in productie te brengen, bevat MAF ook functies voor:
Microsoft Agent Framework is ook gericht op interoperabiliteit door:
Laten we kijken hoe deze functies worden toegepast op enkele kernconcepten van Microsoft Agent Framework.

Agents maken
Het maken van een agent gebeurt door het definiëren van de inference service (LLM Provider), een set instructies die de AI-agent moet volgen, en een toegewezen name:
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).create_agent( instructions="You are good at recommending trips to customers based on their preferences.", name="TripRecommender" )
Bovenstaand voorbeeld maakt gebruik van Azure OpenAI, maar agents kunnen worden gemaakt met verschillende services, inclusief Microsoft Foundry Agent Service:
AzureAIAgentClient(async_credential=credential).create_agent( name="HelperAgent", instructions="You are a helpful assistant." ) as agent
OpenAI Responses, ChatCompletion APIs
agent = OpenAIResponsesClient().create_agent( name="WeatherBot", instructions="You are a helpful weather assistant.", )
agent = OpenAIChatClient().create_agent( name="HelpfulAssistant", instructions="You are a helpful assistant.", )
of remote agents via het A2A-protocol:
agent = A2AAgent( name=agent_card.name, description=agent_card.description, agent_card=agent_card, url="https://your-a2a-agent-host" )
Agents uitvoeren
Agents worden uitgevoerd met de .run of .run_stream methoden voor respectievelijk niet-streaming of streaming responses.
result = await agent.run("What are good places to visit in Amsterdam?")
print(result.text)
async for update in agent.run_stream("What are the good places to visit in Amsterdam?"):
if update.text:
print(update.text, end="", flush=True)
Elke uitvoering van een agent kan ook opties hebben om parameters aan te passen zoals max_tokens die door de agent worden gebruikt, tools die de agent kan aanroepen, en zelfs het model dat door de agent wordt ingezet.
Dit is nuttig in gevallen waar specifieke modellen of tools nodig zijn om een taak van de gebruiker te voltooien.
Tools
Tools kunnen worden gedefinieerd zowel bij het definiëren van de agent:
def get_attractions( location: Annotated[str, Field(description="The location to get the top tourist attractions for")], ) -> str: """Get the top tourist attractions for a given location.""" return f"The top attractions for {location} are."
# Bij het direct aanmaken van een ChatAgent
agent = ChatAgent( chat_client=OpenAIChatClient(), instructions="You are a helpful assistant", tools=[get_attractions]
alsook bij het uitvoeren van de agent:
result1 = await agent.run( "What's the best place to visit in Seattle?", tools=[get_attractions] # Hulpmiddel alleen geleverd voor deze uitvoering )
Agent Threads
Agent Threads worden gebruikt om multi-turn gesprekken te beheren. Threads kunnen worden gemaakt door:
get_new_thread() waarmee de thread over tijd kan worden opgeslagenOm een thread te maken, ziet de code er als volgt uit:
# Maak een nieuwe thread aan.
thread = agent.get_new_thread() # Voer de agent uit met de thread.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Je kunt vervolgens de thread serialiseren om deze later op te slaan:
# Maak een nieuwe thread aan.
thread = agent.get_new_thread()
# Voer de agent uit met de thread.
response = await agent.run("Hello, how are you?", thread=thread)
# Serialiseer de thread voor opslag.
serialized_thread = await thread.serialize()
# Deserialiseer de threadstatus na het laden uit opslag.
resumed_thread = await agent.deserialize_thread(serialized_thread)
Agent Middleware
Agents communiceren met tools en LLMs om taken van gebruikers te voltooien. In bepaalde scenario’s willen we tussen deze interacties acties uitvoeren of bijhouden. Agent middleware stelt ons in staat dit te doen via:
Function Middleware
Deze middleware stelt ons in staat om een actie uit te voeren tussen de agent en een functie/tool die het zal aanroepen. Een voorbeeld waarbij dit gebruikt kan worden is het loggen van een functieaanroep.
In de onderstaande code bepaalt next of de volgende middleware of de daadwerkelijke functie wordt opgeroepen.
async def logging_function_middleware(
context: FunctionInvocationContext,
next: Callable[[FunctionInvocationContext], Awaitable[None]],
) -> None:
"""Function middleware that logs function execution."""
# Voorbewerking: Loggen vóór functie-uitvoering
print(f"[Function] Calling {context.function.name}")
# Ga door naar de volgende middleware of functie-uitvoering
await next(context)
# Nabewerking: Loggen na functie-uitvoering
print(f"[Function] {context.function.name} completed")
Chat Middleware
Deze middleware maakt het mogelijk te handelen of loggen tussen de agent en de verzoeken aan de LLM.
Dit bevat belangrijke informatie zoals de messages die naar de AI-service worden gestuurd.
async def logging_chat_middleware(
context: ChatContext,
next: Callable[[ChatContext], Awaitable[None]],
) -> None:
"""Chat middleware that logs AI interactions."""
# Voorbewerking: Loggen vóór AI-aanroep
print(f"[Chat] Sending {len(context.messages)} messages to AI")
# Ga verder naar de volgende middleware of AI-service
await next(context)
# Nabewerking: Loggen na AI-antwoord
print("[Chat] AI response received")
Agent Memory
Zoals behandeld in de les Agentic Memory, is geheugen een belangrijk element om de agent over verschillende contexten te laten opereren. MAF biedt verschillende soorten geheugen:
In-Memory Opslag
Dit is het geheugen dat in threads wordt opgeslagen tijdens de uitvoering van de applicatie.
# Maak een nieuwe thread aan.
thread = agent.get_new_thread() # Voer de agent uit met de thread.
response = await agent.run("Hello, I am here to help you book travel. Where would you like to go?", thread=thread)
Persistent Messages
Dit geheugen wordt gebruikt om gespreksgeschiedenis op te slaan over verschillende sessies. Het wordt gedefinieerd met de chat_message_store_factory:
from agent_framework import ChatMessageStore
# Maak een aangepaste berichtenopslag
def create_message_store():
return ChatMessageStore()
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a Travel assistant.",
chat_message_store_factory=create_message_store
)
Dynamisch geheugen
Dit geheugen wordt toegevoegd aan de context voordat agents worden uitgevoerd. Deze geheugens kunnen worden opgeslagen in externe diensten zoals mem0:
from agent_framework.mem0 import Mem0Provider
# Mem0 gebruiken voor geavanceerde geheugenmogelijkheden
memory_provider = Mem0Provider(
api_key="your-mem0-api-key",
user_id="user_123",
application_id="my_app"
)
agent = ChatAgent(
chat_client=OpenAIChatClient(),
instructions="You are a helpful assistant with memory.",
context_providers=memory_provider
)
Agent Observability
Observability is belangrijk om betrouwbare en onderhoudbare agentgebaseerde systemen te bouwen. MAF integreert met OpenTelemetry om tracing en meters te bieden voor betere observeerbaarheid.
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# doe iets
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
MAF biedt workflows die vooraf gedefinieerde stappen zijn om een taak te voltooien en AI-agents als componenten in die stappen bevatten.
Workflows bestaan uit verschillende componenten die een betere controle over de stroom mogelijk maken. Workflows ondersteunen ook multi-agent orkestratie en checkpointing om de workflowstatussen op te slaan.
De kerncomponenten van een workflow zijn:
Executors
Executors ontvangen inputberichten, voeren hun toegewezen taken uit en produceren vervolgens een outputbericht. Dit brengt de workflow vooruit richting het voltooien van de grotere taak. Executors kunnen zowel AI-agenten als aangepaste logica zijn.
Edges
Edges worden gebruikt om de stroom van berichten in een workflow te definiëren. Deze kunnen zijn:
Directe Edges - Eenvoudige één-op-één verbindingen tussen executors:
from agent_framework import WorkflowBuilder
builder = WorkflowBuilder()
builder.add_edge(source_executor, target_executor)
builder.set_start_executor(source_executor)
workflow = builder.build()
Voorwaardelijke Edges - Geactiveerd nadat aan een bepaalde voorwaarde is voldaan. Bijvoorbeeld als hotelkamers niet beschikbaar zijn, kan een executor andere opties voorstellen.
Switch-case Edges - Leidt berichten naar verschillende executors op basis van gedefinieerde voorwaarden. Bijvoorbeeld als een reisklant prioriteitstoegang heeft en hun taken via een andere workflow worden afgehandeld.
Fan-out Edges - Sturen één bericht naar meerdere doelen.
Fan-in Edges - Verzamelen meerdere berichten van verschillende executors en sturen ze naar één doel.
Events
Om betere observability in workflows te bieden, heeft MAF ingebouwde events voor uitvoering, waaronder:
WorkflowStartedEvent - Workflow uitvoering begintWorkflowOutputEvent - Workflow produceert een outputWorkflowErrorEvent - Workflow ondervindt een foutExecutorInvokeEvent - Executor begint verwerkingExecutorCompleteEvent - Executor voltooit verwerkingRequestInfoEvent - Een verzoek wordt verstuurdDe bovenstaande secties behandelen de kernconcepten van Microsoft Agent Framework. Naarmate je complexere agents bouwt, zijn hier enkele geavanceerde patronen om te overwegen:
Codevoorbeelden voor Microsoft Agent Framework zijn te vinden in deze repository onder de bestanden xx-python-agent-framework en xx-dotnet-agent-framework.
Word lid van de Microsoft Foundry Discord om andere leerlingen te ontmoeten, kantooruren bij te wonen en antwoorden op je AI Agents-vragen te krijgen.
Disclaimer:
Dit document is vertaald met behulp van de AI-vertalingsdienst Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u er rekening mee te houden dat automatische vertalingen fouten of onjuistheden kunnen bevatten. Het originele document in de oorspronkelijke taal wordt beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.