Card 19 of 38· Domain 2 · Generative AI and agents
The Microsoft Agent Framework
What it inherited from Semantic Kernel and AutoGen, the creation sequence, and the one place where you do not write a dispatcher.

The Microsoft Agent Framework is the merger and successor of two earlier projects: Semantic Kernel and AutoGen. It is generally available, which means it is what to target for new work.
Knowing its parentage helps, because you can predict what it inherited. From Semantic Kernel came the enterprise features — state, type safety, telemetry, filters. From AutoGen came the simple multi-agent abstractions. Graph-based workflows were added on top.
The creation sequence
Order matters here, and it appears as a sequencing question:
- Provider client — an
AzureAIAgentClient, or anAzureOpenAIResponsesClient, or a local or third-party provider. - Define the chat agent — instructions plus tools.
- Create the agent thread — the thread manages conversation state and stores the messages.
- Run — invoke it.
The thread at step three is the state mechanism. It exists before you run, not as a result of running.
Tools, and the thing that changes
The @tool decorator advertises a custom function to the framework.
Then the part worth pausing on: the framework does automatic dispatch. There is no hand-written dispatch code.
Docstrings drive tool selection — the same principle as every other tool surface on this exam, appearing for the fourth time. Write them as if they are the interface, because they are.
Built-in tools mirror the Foundry ones: code interpreter, file search, web search. Tool calls support an approval mode for human-in-the-loop.
Provider flexibility and authentication
You can swap the model or the provider behind a single IChatClient or ChatClientAgent abstraction. One agent type replaces the several that Semantic Kernel had.
Authentication is non-key-based: AzureCliCredential locally, managed identity in production, with DefaultAzureCredential as the fallback chain that picks whichever applies. Consistent with card 4 — identity everywhere, keys nowhere.
The trap, and why it catches good candidates
This is the one place where you do not write a dispatcher.
Card 13 drilled the opposite: in raw function calling, the model returns a request and your code executes it. That is correct there and wrong here. With the @tool decorator, the framework invokes the function automatically.
The trap works precisely because the earlier lesson was learned well. Someone who has internalised "the model never executes your code" will carry the manual pattern across and answer confidently. The rule is right; its scope is not universal. Raw function calling means you dispatch. The Agent Framework means the framework dispatches.