Freigeben über


Gleichzeitige Orchestrierung

Von Bedeutung

Agent Orchestration-Features im Agent Framework befinden sich in der experimentellen Phase. Sie befinden sich in der aktiven Entwicklung und können sich erheblich ändern, bevor sie zur Vorschau- oder Veröffentlichungskandidatenphase wechseln.

Das gleichzeitige Pattern erlaubt es mehreren Agenten, parallel an derselben Aufgabe zu arbeiten. Jeder Agent verarbeitet die Eingabe unabhängig, und ihre Ergebnisse werden gesammelt und aggregiert. Dieser Ansatz eignet sich gut für Szenarien, in denen vielfältige Perspektiven oder Lösungen hilfreich sind, z. B. Brainstorming, Ensemble-Begründung oder Abstimmungssysteme.

Gängige Anwendungsfälle

Mehrere Agents generieren unterschiedliche Lösungen für ein Problem, und ihre Antworten werden zur weiteren Analyse oder Auswahl gesammelt:

Diagramm

Sie lernen Folgendes

  • So definieren Sie mehrere Agents mit unterschiedlichen Kenntnissen
  • So koordinieren Sie diese Agents, um gleichzeitig an einer einzelnen Aufgabe zu arbeiten
  • Sammeln und Verarbeiten der Ergebnisse

Definieren Sie Ihre Agenten

Agents sind spezialisierte Entitäten, die Aufgaben verarbeiten können. Hier definieren wir zwei Agenten: einen Physikexperten und einen Chemieexperten.

Tipp

Dies ChatCompletionAgent wird hier verwendet, aber Sie können jeden Agenttyp verwenden.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Agents;
using Microsoft.SemanticKernel.Agents.Orchestration;
using Microsoft.SemanticKernel.Agents.Orchestration.Concurrent;
using Microsoft.SemanticKernel.Agents.Runtime.InProcess;

// Create a kernel with an AI service
Kernel kernel = ...;

ChatCompletionAgent physicist = new ChatCompletionAgent{
    Name = "PhysicsExpert",
    Instructions = "You are an expert in physics. You answer questions from a physics perspective."
    Kernel = kernel,
};

ChatCompletionAgent chemist = new ChatCompletionAgent{
    Name = "ChemistryExpert",
    Instructions = "You are an expert in chemistry. You answer questions from a chemistry perspective."
    Kernel = kernel,
};

Einrichten der parallelen Orchestrierung

Mit der ConcurrentOrchestration Klasse können Sie mehrere Agents parallel ausführen. Sie übermitteln die Liste der Agenten als Mitglieder.

ConcurrentOrchestration orchestration = new (physicist, chemist);

Laufzeit starten

Zum Verwalten der Ausführung von Agents ist eine Laufzeit erforderlich. Hier verwenden wir InProcessRuntime und beginnen es, bevor wir die Orchestrierung aufrufen.

InProcessRuntime runtime = new InProcessRuntime();
await runtime.StartAsync();

Aufrufen der Orchestrierung

Sie können jetzt die Orchestrierung mit einer bestimmten Aufgabe aufrufen. Die Orchestrierung führt alle Agents gleichzeitig für die angegebene Aufgabe aus.

var result = await orchestration.InvokeAsync("What is temperature?", runtime);

Sammeln von Ergebnissen

Die Ergebnisse aller Agents können asynchron gesammelt werden. Beachten Sie, dass die Reihenfolge der Ergebnisse nicht garantiert ist.

string[] output = await result.GetValueAsync(TimeSpan.FromSeconds(20));
Console.WriteLine($"# RESULT:\n{string.Join("\n\n", output.Select(text => $"{text}"))}");

Optional: Beenden der Laufzeit

Beenden Sie nach Abschluss der Verarbeitung die Laufzeit, um Ressourcen zu bereinigen.

await runtime.RunUntilIdleAsync();

Beispielausgabe

# RESULT:
Temperature is a fundamental physical quantity that measures the average kinetic energy ...

Temperature is a measure of the average kinetic energy of the particles ...

Tipp

Der vollständige Beispielcode ist hier verfügbar.

Definieren Sie Ihre Agenten

Agents sind spezialisierte Entitäten, die Aufgaben verarbeiten können. Hier definieren wir zwei Agenten: einen Physikexperten und einen Chemieexperten.

Tipp

Dies ChatCompletionAgent wird hier mit Azure OpenAI verwendet, Sie können jedoch jeden Agenttyp oder Modelldienst verwenden.

from semantic_kernel.agents import Agent, ChatCompletionAgent
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

def get_agents() -> list[Agent]:
    physics_agent = ChatCompletionAgent(
        name="PhysicsExpert",
        instructions="You are an expert in physics. You answer questions from a physics perspective.",
        service=AzureChatCompletion(),
    )
    chemistry_agent = ChatCompletionAgent(
        name="ChemistryExpert",
        instructions="You are an expert in chemistry. You answer questions from a chemistry perspective.",
        service=AzureChatCompletion(),
    )
    return [physics_agent, chemistry_agent]

Einrichten der parallelen Orchestrierung

Mit der ConcurrentOrchestration Klasse können Sie mehrere Agents parallel ausführen. Sie übermitteln die Liste der Agenten als Mitglieder.

from semantic_kernel.agents import ConcurrentOrchestration

agents = get_agents()
concurrent_orchestration = ConcurrentOrchestration(members=agents)

Laufzeit starten

Zum Verwalten der Ausführung von Agents ist eine Laufzeit erforderlich. Hier verwenden wir InProcessRuntime und beginnen es, bevor wir die Orchestrierung aufrufen.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Aufrufen der Orchestrierung

Sie können jetzt die Orchestrierung mit einer bestimmten Aufgabe aufrufen. Die Orchestrierung führt alle Agents gleichzeitig für die angegebene Aufgabe aus.

orchestration_result = await concurrent_orchestration.invoke(
    task="What is temperature?",
    runtime=runtime,
)

Sammeln von Ergebnissen

Die Ergebnisse aller Agents können asynchron gesammelt werden. Beachten Sie, dass die Reihenfolge der Ergebnisse nicht garantiert ist.

value = await orchestration_result.get(timeout=20)
# For the concurrent orchestration, the result is a list of chat messages
for item in value:
    print(f"# {item.name}: {item.content}")

Optional: Beenden der Laufzeit

Beenden Sie nach Abschluss der Verarbeitung die Laufzeit, um Ressourcen zu bereinigen.

await runtime.stop_when_idle()

Beispielausgabe

# PhysicsExpert: Temperature is a physical quantity that represents the average kinetic energy of the particles in a substance...
# ChemistryExpert: Temperature is a fundamental concept in chemistry and physics, representing a measure of the average kinetic energy...

Tipp

Der vollständige Beispielcode ist hier verfügbar.

Hinweis

Die Agent-Orchestrierung ist noch nicht im Java SDK verfügbar.

Nächste Schritte