# Microsoft Agent Framework: Orchestrations
Generative KI verändert nicht nur den Arbeitsalltag von Entwicklern, sondern auch die Projekte. Es wird immer häufiger auf Künstliche Intelligenz innerhalb der Systeme gesetzt, um verschiedene Aufgaben lösen zu können. Dafür werden Agenten entwickelt, welche auf solche Aufgaben spezialisiert sind und innerhalb der Applikation eingesetzt werden können.
Bei komplexen Aufgaben kann es dabei sein, dass mehrere Agenten miteinander arbeiten müssen. Hier stellt sich dann die Frage, wie die Agenten zusammen arbeiten sollten. Natürlich gibt es den pragmatischen Ansatz, dass die Antwort eines Agenten einfach an den nächsten übergeben wird, bis alle Agenten ihren Teil dazu beigetragen haben. Dieser Ansatz ist auch durchaus valid und grundsätzlich als Sequentielle Orchestration bekannt. Je nach Anwendungsfall ist es jedoch nicht die ideale Lösung.
In diesem Beitrag werden wir uns die verschiedenen Orchestrationen ansehen, die vom Microsoft Agent Framework Paket bereitgestellt werden. Die Code-Beispiele werden in C# sein, konzeptionell funktionieren sie aber auch für Python.
## Workflow Orchestrationen
Grundsätzlich gibt es fünf verschiedene Ansätze:
- Sequential: Agenten werden in einer vorbestimmten Reihenfolge durchgeführt.
- Concurrent: Agenten werden parallel ausgeführt.
- Handoff: Agenten können die Kontrolle über die Aufgabe anhand des Kontexts an andere Agenten übergeben.
- Group Chat: Agenten kollaborieren in einer gemeinsamen Konversation.
- Magnetic: Ein Manager Agent koordiniert die spezialisierten Agenten dynamisch.
Wie diese genau funktionieren, schauen wir uns jetzt im Detail an.
### Sequential
![[SequentialOrchestration.png]]
Wie bereits in der Einführung beschrieben (und auch aus dem Namen zu nehmen ist), geht es bei der Sequentiellen Orchestration darum, dass eine Reihenfolge für die Agenten definiert wird. Natürlich kann man das Ganze manuell umsetzen, das Microsoft Agent Framework bietet hier jedoch eine elegantere Lösung.
Um das ganze umsetzen zu können, müssen wir zuerst unsere Agenten definieren:
```csharp
from agent_framework.azure import AzureChatClient
from azure.identity import AzureCliCredential
var chat_client = AzureChatClient(credential=AzureCliCredential())
var agentOne = chat_client.as_agent(
instructions=("..."),
name="Agent 1",
)
var agentTwo = chat_client.as_agent(
instructions=("..."),
name="Agent 2",
)
```
Anschliessend können wir dann unseren Workflow aufbauen:
```csharp
from agent_framework.orchestrations import SequentialBuilder
var workflow = SequentialBuilder(participants=[agentOne, agentTwo]).build()
```
Die Reihenfolge der übergebenen Agenten wird für den Workflow übernommen. In diesem Beispiel würde also zuerst der *Agent 1* und anschliessend der *Agent 2* aufgerufen werden.
### Concurrent
![[ConcurrentOrchestration.png]]
### Handoff
![[HandoffOrchestration.png]]
### Group Chat
![[GroupChatOrchestration.png]]
### Magnetic
...
## Fazit