Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Dokument bietet eine Übersicht über die Verwendung von Workflows als Agents im Microsoft Agent Framework.
Überblick
Manchmal haben Sie einen anspruchsvollen Workflow mit mehreren Agents, benutzerdefinierten Executoren und komplexer Logik erstellt – möchten ihn jedoch wie jeden anderen Agenten verwenden. Workflow-Agenten ermöglichen es Ihnen genau das zu tun. Durch das Umschließen Ihres Workflows als Agent können Sie mit dem Workflow über dieselbe vertraute API interagieren, die Sie für einen einfachen Chat-Agenten verwenden.
Wichtige Vorteile
- Einheitliche Schnittstelle: Interagieren mit komplexen Workflows mit derselben API wie einfache Agents
- API-Kompatibilität: Integrieren von Workflows in vorhandene Systeme, die die Agent-Schnittstelle unterstützen
- Komponierbarkeit: Die Verwendung von Workflow-Agenten als Bausteine in größeren Agentensystemen oder anderen Workflows
- Threadverwaltung: Nutzen von Agentthreads für Unterhaltungszustand, Checkpoint und Wiederaufnahme
- Streamingunterstützung: Abrufen von Echtzeitupdates während der Ausführung des Workflows
Funktionsweise
Wenn Sie einen Workflow in einen Agent konvertieren:
- Der Workflow wird validiert, um sicherzustellen, dass der Startprozess Chatnachrichten annehmen kann.
- Ein Thread wird erstellt, um den Gesprächszustand und die Checkpoints zu verwalten.
- Eingabemeldungen werden an den Startausführer des Workflows weitergeleitet.
- Workflow-Ereignisse werden in Agent-Antwort-Updates umgewandelt.
- Externe Eingabeanforderungen (von
RequestInfoExecutor) werden als Funktionsaufrufe angezeigt.
Anforderungen
Um einen Workflow als Agent zu verwenden, muss der Startausführer des Workflows als Eingabe verarbeiten IEnumerable<ChatMessage> können. Dies wird automatisch erfüllt, wenn ChatClientAgent oder andere agentenbasierte Ausführungsprogramme verwendet werden.
Erstellen eines Workflow-Agents
Verwenden Sie die AsAgent() Erweiterungsmethode, um jeden kompatiblen Workflow in einen Agent zu konvertieren:
using Microsoft.Agents.AI.Workflows;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
// First, build your workflow
var workflow = AgentWorkflowBuilder
.CreateSequentialPipeline(researchAgent, writerAgent, reviewerAgent)
.Build();
// Convert the workflow to an agent
AIAgent workflowAgent = workflow.AsAgent(
id: "content-pipeline",
name: "Content Pipeline Agent",
description: "A multi-agent workflow that researches, writes, and reviews content"
);
AsAgent-Parameter
| Parameter | Typ | Description |
|---|---|---|
id |
string? |
Optionaler eindeutiger Bezeichner für den Agent. Wird automatisch generiert, falls nicht angegeben. |
name |
string? |
Optionaler Anzeigename für den Agent. |
description |
string? |
Optionale Beschreibung des Zwecks des Agenten. |
checkpointManager |
CheckpointManager? |
Optionaler Prüfpunkt-Manager für Persistenz über Sitzungen hinweg. |
executionEnvironment |
IWorkflowExecutionEnvironment? |
Optionale Ausführungsumgebung. Standardmäßig wird InProcessExecution.OffThread oder InProcessExecution.Concurrent basierend auf der Workflowkonfiguration verwendet. |
Verwenden von Workflow-Agents
Erstellen eines Threads
Jede Unterhaltung mit einem Workflow-Agent erfordert einen Thread zum Verwalten des Zustands:
// Create a new thread for the conversation
AgentThread thread = workflowAgent.GetNewThread();
Nicht-Streaming-Ausführung
Für einfache Anwendungsfälle, in denen Sie die vollständige Antwort benötigen:
var messages = new List<ChatMessage>
{
new(ChatRole.User, "Write an article about renewable energy trends in 2025")
};
AgentRunResponse response = await workflowAgent.RunAsync(messages, thread);
foreach (ChatMessage message in response.Messages)
{
Console.WriteLine($"{message.AuthorName}: {message.Text}");
}
Streaming-Ausführung
Für Echtzeitaktualisierungen während der Ausführung des Workflows:
var messages = new List<ChatMessage>
{
new(ChatRole.User, "Write an article about renewable energy trends in 2025")
};
await foreach (AgentRunResponseUpdate update in workflowAgent.RunStreamingAsync(messages, thread))
{
// Process streaming updates from each agent in the workflow
if (!string.IsNullOrEmpty(update.Text))
{
Console.Write(update.Text);
}
}
Behandeln externer Eingabeanforderungen
Wenn ein Workflow Executoren enthält, die externe Eingabe anfordern (mithilfe RequestInfoExecutor), werden diese Anforderungen als Funktionsaufrufe in der Agentantwort angezeigt:
await foreach (AgentRunResponseUpdate update in workflowAgent.RunStreamingAsync(messages, thread))
{
// Check for function call requests
foreach (AIContent content in update.Contents)
{
if (content is FunctionCallContent functionCall)
{
// Handle the external input request
Console.WriteLine($"Workflow requests input: {functionCall.Name}");
Console.WriteLine($"Request data: {functionCall.Arguments}");
// Provide the response in the next message
}
}
}
Thread-Serialisierung und Wiederaufnahme
Workflow-Agent-Threads können zur Persistenz serialisiert und später fortgesetzt werden:
// Serialize the thread state
JsonElement serializedThread = thread.Serialize();
// Store serializedThread to your persistence layer...
// Later, resume the thread
AgentThread resumedThread = workflowAgent.DeserializeThread(serializedThread);
// Continue the conversation
await foreach (var update in workflowAgent.RunStreamingAsync(newMessages, resumedThread))
{
Console.Write(update.Text);
}
Checkpointing mit Workflow-Agenten
Aktivieren Sie prüfpunkte, um den Workflowstatus über Prozessneustarts hinweg beizubehalten:
// Create a checkpoint manager with your storage backend
var checkpointManager = new CheckpointManager(new FileCheckpointStorage("./checkpoints"));
// Create workflow agent with checkpointing enabled
AIAgent workflowAgent = workflow.AsAgent(
id: "persistent-workflow",
name: "Persistent Workflow Agent",
checkpointManager: checkpointManager
);
Anforderungen
Um einen Workflow als Agent zu verwenden, muss der Startausführer des Workflows als Eingabe verarbeiten list[ChatMessage] können. Dies wird bei der Verwendung von ChatAgent oder AgentExecutor automatisch erfüllt.
Erstellen eines Workflow-Agents
Rufen Sie as_agent() jeden kompatiblen Workflow auf, um ihn in einen Agent zu konvertieren:
from agent_framework import WorkflowBuilder, ChatAgent
from agent_framework.azure import AzureOpenAIChatClient
from azure.identity import AzureCliCredential
# Create your chat client and agents
chat_client = AzureOpenAIChatClient(credential=AzureCliCredential())
researcher = ChatAgent(
name="Researcher",
instructions="Research and gather information on the given topic.",
chat_client=chat_client,
)
writer = ChatAgent(
name="Writer",
instructions="Write clear, engaging content based on research.",
chat_client=chat_client,
)
# Build your workflow
workflow = (
WorkflowBuilder()
.set_start_executor(researcher)
.add_edge(researcher, writer)
.build()
)
# Convert the workflow to an agent
workflow_agent = workflow.as_agent(name="Content Pipeline Agent")
as_agent Parameter
| Parameter | Typ | Description |
|---|---|---|
name |
str | None |
Optionaler Anzeigename für den Agent. Wird automatisch generiert, falls nicht angegeben. |
Verwenden von Workflow-Agents
Erstellen eines Threads
Jede Unterhaltung mit einem Workflow-Agent erfordert einen Thread zum Verwalten des Zustands:
# Create a new thread for the conversation
thread = workflow_agent.get_new_thread()
Nicht-Streaming-Ausführung
Für einfache Anwendungsfälle, in denen Sie die vollständige Antwort benötigen:
from agent_framework import ChatMessage, Role
messages = [ChatMessage(role=Role.USER, content="Write an article about AI trends")]
response = await workflow_agent.run(messages, thread=thread)
for message in response.messages:
print(f"{message.author_name}: {message.text}")
Streaming-Ausführung
Für Echtzeitaktualisierungen während der Ausführung des Workflows:
messages = [ChatMessage(role=Role.USER, content="Write an article about AI trends")]
async for update in workflow_agent.run_stream(messages, thread=thread):
# Process streaming updates from each agent in the workflow
if update.text:
print(update.text, end="", flush=True)
Behandeln externer Eingabeanforderungen
Wenn ein Workflow Executoren enthält, die externe Eingabe anfordern (mithilfe RequestInfoExecutor), werden diese Anforderungen als Funktionsaufrufe angezeigt. Der Workflow-Agent verfolgt ausstehende Anforderungen und erwartet Antworten, bevor sie fortfahren:
from agent_framework import (
FunctionCallContent,
FunctionApprovalRequestContent,
FunctionApprovalResponseContent,
)
async for update in workflow_agent.run_stream(messages, thread=thread):
for content in update.contents:
if isinstance(content, FunctionApprovalRequestContent):
# The workflow is requesting external input
request_id = content.id
function_call = content.function_call
print(f"Workflow requests input: {function_call.name}")
print(f"Request data: {function_call.arguments}")
# Store the request_id to provide a response later
# Check for pending requests
if workflow_agent.pending_requests:
print(f"Pending requests: {list(workflow_agent.pending_requests.keys())}")
Bereitstellen von Antworten auf ausstehende Anforderungen
So setzen Sie die Workflowausführung nach einer externen Eingabeanforderung fort:
# Create a response for the pending request
response_content = FunctionApprovalResponseContent(
id=request_id,
function_call=function_call,
approved=True,
)
response_message = ChatMessage(
role=Role.USER,
contents=[response_content],
)
# Continue the workflow with the response
async for update in workflow_agent.run_stream([response_message], thread=thread):
if update.text:
print(update.text, end="", flush=True)
Vollständiges Beispiel
Hier ist ein vollständiges Beispiel, in dem ein Workflow-Agent mit Streamingausgabe veranschaulicht wird:
import asyncio
from agent_framework import (
ChatAgent,
ChatMessage,
Role,
)
from agent_framework.azure import AzureOpenAIChatClient
from agent_framework._workflows import SequentialBuilder
from azure.identity import AzureCliCredential
async def main():
# Set up the chat client
chat_client = AzureOpenAIChatClient(credential=AzureCliCredential())
# Create specialized agents
researcher = ChatAgent(
name="Researcher",
instructions="Research the given topic and provide key facts.",
chat_client=chat_client,
)
writer = ChatAgent(
name="Writer",
instructions="Write engaging content based on the research provided.",
chat_client=chat_client,
)
reviewer = ChatAgent(
name="Reviewer",
instructions="Review the content and provide a final polished version.",
chat_client=chat_client,
)
# Build a sequential workflow
workflow = (
SequentialBuilder()
.add_agents([researcher, writer, reviewer])
.build()
)
# Convert to a workflow agent
workflow_agent = workflow.as_agent(name="Content Creation Pipeline")
# Create a thread and run the workflow
thread = workflow_agent.get_new_thread()
messages = [ChatMessage(role=Role.USER, content="Write about quantum computing")]
print("Starting workflow...")
print("=" * 60)
current_author = None
async for update in workflow_agent.run_stream(messages, thread=thread):
# Show when different agents are responding
if update.author_name and update.author_name != current_author:
if current_author:
print("\n" + "-" * 40)
print(f"\n[{update.author_name}]:")
current_author = update.author_name
if update.text:
print(update.text, end="", flush=True)
print("\n" + "=" * 60)
print("Workflow completed!")
if __name__ == "__main__":
asyncio.run(main())
Verständnis der Ereigniskonvertierung
Wenn ein Workflow als Agent ausgeführt wird, werden Workflowereignisse in Agentantworten konvertiert. Die Art der Antwort hängt davon ab, welche Methode Sie verwenden:
-
run(): Gibt einAgentRunResponseErgebnis zurück, das das vollständige Ergebnis enthält, nachdem der Workflow abgeschlossen wurde. -
run_stream(): LiefertAgentRunResponseUpdateObjekte während der Ausführung des Workflows und stellt Echtzeitaktualisierungen bereit.
Während der Ausführung werden interne Workflow-Ereignisse den Agentantworten wie folgt zugeordnet:
| Workflow-Ereignis | Antwort des Agenten |
|---|---|
AgentRunUpdateEvent |
Übergeben als AgentRunResponseUpdate (Streaming) oder aggregiert in AgentRunResponse (nicht streaming) |
RequestInfoEvent |
Konvertiert in FunctionCallContent und FunctionApprovalRequestContent |
| Andere Ereignisse | Eingeschlossen in raw_representation zur Beobachtbarkeit |
Mit dieser Konvertierung können Sie die Standard-Agent-Schnittstelle verwenden und gleichzeitig bei Bedarf auf detaillierte Workflowinformationen zugreifen.
Anwendungsfälle
1. Komplexe Agent-Pipelines
Einen Multi-Agenten-Workflow als einzelnen Agenten zusammenfassen zur Nutzung in Anwendungen.
User Request --> [Workflow Agent] --> Final Response
|
+-- Researcher Agent
+-- Writer Agent
+-- Reviewer Agent
2. Zusammensetzung des Agenten
Verwenden Sie Workflow-Agents als Komponenten in größeren Systemen:
- Ein Workflow-Agent kann von einem anderen Agent als Tool verwendet werden.
- Mehrere Workflow-Agents können zusammen orchestriert werden
- Workflow-Agents können in anderen Workflows geschachtelt werden
3. API-Integration
Machen Sie komplexe Workflows über APIs verfügbar, die die Standard-Agent-Schnittstelle erwarten, und ermöglichen Sie Folgendes:
- Chatschnittstellen, die komplexe Back-End-Workflows verwenden
- Integration in vorhandene agentbasierte Systeme
- Schrittweise Migration von einfachen Agents zu komplexen Workflows
Nächste Schritte
- Erfahren Sie, wie Sie Anforderungen und Antworten in Workflows behandeln.
- Erfahren Sie, wie Sie den Zustand in Workflows verwalten.
- Erfahren Sie, wie Sie Prüfpunkte erstellen und von ihnen fortsetzen.
- Erfahren Sie, wie Sie Workflows überwachen
- Informationen zur Zustandsisolation in Workflows
- Erfahren Sie, wie Sie Workflows visualisieren