Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med överlämningsorkestrering kan agenter överföra kontroll till varandra baserat på kontexten eller användarbegäran. Varje agent kan "överlämna" konversationen till en annan agent med lämplig expertis, vilket säkerställer att rätt agent hanterar varje del av uppgiften. Detta är särskilt användbart i kundsupport, expertsystem eller i alla scenarier som kräver dynamisk delegering.
Överlämningsorkestrering
Skillnader mellan Handoff och Agent-as-Tools
Även om "agent-som-verktyg" ofta betraktas som ett mönster för flera agenter och det kan verka liknande överlämning vid första anblicken, finns det grundläggande skillnader mellan de två:
- Kontrollflöde: Vid överlämningsorkestrering skickas kontrollen explicit mellan agenter baserat på definierade regler. Varje agent kan besluta att lämna över hela uppgiften till en annan agent. Det finns ingen central myndighet som hanterar arbetsflödet. Agent-as-tools omfattar däremot en primär agent som delegerar underaktiviteter till andra agenter och när agenten har slutfört underaktiviteten återgår kontrollen till den primära agenten.
- Uppgiftsägarskap: Vid överlämningen tar agenten som tar emot överlämningen fullständigt ägarskap för uppgiften. I agent som verktyg behåller den primära agenten det övergripande ansvaret för uppgiften, medan andra agenter behandlas som verktyg för att hjälpa till med specifika underaktiviteter.
- Kontexthantering: Vid överlämningsorkestrering överlämnas konversationen helt till en annan agent. Den mottagande agenten har fullständig kontext för vad som har gjorts hittills. I agent-as-tools hanterar den primära agenten den övergripande kontexten och kan endast ge relevant information till verktygsagenterna efter behov.
Vad du ska lära dig
- Så här skapar du specialiserade agenter för olika domäner
- Så här konfigurerar du regler för överlämning mellan agenter
- Skapa interaktiva arbetsflöden med dynamisk agentroutning
- Hantera konversationer med flera turer med agentväxling
I överlämningsorkestrering kan agenter överföra kontroll till varandra baserat på kontext, vilket möjliggör dynamisk routning och specialiserad expertishantering.
Konfigurera Azure OpenAI-klienten
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.Workflows;
using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
// 1) Set up the Azure OpenAI client
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ??
throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
var client = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
.GetChatClient(deploymentName)
.AsIChatClient();
Definiera dina specialiserade agenter
Skapa domänspecifika agenter och en sorteringsagent för routning:
// 2) Create specialized agents
ChatClientAgent historyTutor = new(client,
"You provide assistance with historical queries. Explain important events and context clearly. Only respond about history.",
"history_tutor",
"Specialist agent for historical questions");
ChatClientAgent mathTutor = new(client,
"You provide help with math problems. Explain your reasoning at each step and include examples. Only respond about math.",
"math_tutor",
"Specialist agent for math questions");
ChatClientAgent triageAgent = new(client,
"You determine which agent to use based on the user's homework question. ALWAYS handoff to another agent.",
"triage_agent",
"Routes messages to the appropriate specialist agent");
Konfigurera regler för överlämning
Definiera vilka agenter som kan lämna över till vilka andra agenter:
// 3) Build handoff workflow with routing rules
var workflow = AgentWorkflowBuilder.StartHandoffWith(triageAgent)
.WithHandoffs(triageAgent, [mathTutor, historyTutor]) // Triage can route to either specialist
.WithHandoff(mathTutor, triageAgent) // Math tutor can return to triage
.WithHandoff(historyTutor, triageAgent) // History tutor can return to triage
.Build();
Köra interaktivt arbetsflöde för överlämning
Hantera fleromgångskonversationer med dynamisk växling av agenter
// 4) Process multi-turn conversations
List<ChatMessage> messages = new();
while (true)
{
Console.Write("Q: ");
string userInput = Console.ReadLine()!;
messages.Add(new(ChatRole.User, userInput));
// Execute workflow and process events
StreamingRun run = await InProcessExecution.StreamAsync(workflow, messages);
await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
List<ChatMessage> newMessages = new();
await foreach (WorkflowEvent evt in run.WatchStreamAsync().ConfigureAwait(false))
{
if (evt is AgentRunUpdateEvent e)
{
Console.WriteLine($"{e.ExecutorId}: {e.Data}");
}
else if (evt is WorkflowCompletedEvent completed)
{
newMessages = (List<ChatMessage>)completed.Data!;
break;
}
}
// Add new messages to conversation history
messages.AddRange(newMessages.Skip(messages.Count));
}
Exempelinteraktion
Q: What is the derivative of x^2?
triage_agent: This is a math question. I'll hand this off to the math tutor.
math_tutor: The derivative of x^2 is 2x. Using the power rule, we bring down the exponent (2) and multiply it by the coefficient (1), then reduce the exponent by 1: d/dx(x^2) = 2x^(2-1) = 2x.
Q: Tell me about World War 2
triage_agent: This is a history question. I'll hand this off to the history tutor.
history_tutor: World War 2 was a global conflict from 1939 to 1945. It began when Germany invaded Poland and involved most of the world's nations. Key events included the Holocaust, Pearl Harbor attack, D-Day invasion, and ended with atomic bombs on Japan.
Q: Can you help me with calculus integration?
triage_agent: This is another math question. I'll route this to the math tutor.
math_tutor: I'd be happy to help with calculus integration! Integration is the reverse of differentiation. The basic power rule for integration is: ∫x^n dx = x^(n+1)/(n+1) + C, where C is the constant of integration.
Viktiga begrepp
- Dynamisk routning: Agenter kan bestämma vilken agent som ska hantera nästa interaktion baserat på kontext
- AgentWorkflowBuilder.CreateHandoffBuilderWith(): Definierar den första agenten som startar arbetsflödet
- WithHandoff() och WithHandoffs(): Konfigurerar regler för överlämning mellan specifika agenter
- Kontextbevarande: Fullständig konversationshistorik underhålls över alla överlämningar
- Stöd för flera turer: Stöder pågående konversationer med sömlös agentväxling
- Specialiserad expertis: Varje agent fokuserar på sin domän samtidigt som de samarbetar med hjälp av överlämningar