Freigeben über


AgentGroupChat Migrationshandbuch für Orchestrierung

Dies ist ein Migrationsleitfaden für Entwickler, die den AgentGroupChat semantischen Kernel verwendet haben und zu dem neuen GroupChatOrchestrationwechseln möchten. Die neue Klasse bietet eine flexiblere und leistungsfähigere Möglichkeit zum Verwalten von Gruppenchatinteraktionen zwischen Agents.

Migrieren von AgentGroupChat zu GroupChatOrchestration

Die neue GroupChatOrchestration Klasse ersetzt das AgentGroupChat durch ein einheitliches, erweiterbares Orchestrierungsmodell. Hier erfahren Sie, wie Sie Ihren C#-Code migrieren:

Schritt 1: Ersetzen der Usings und der Klassenbezüge

  • Entfernen Sie alle using Elemente oder Verweise auf AgentChat und AgentGroupChat. Entfernen Sie beispielsweise Folgendes:

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • Fügen Sie einen Verweis auf den neuen Orchestrierungsnamespace hinzu:

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

Schritt 2: Initialisierung aktualisieren

Vor:

AgentGroupChat chat = new(agentWriter, agentReviewer)
{
    ExecutionSettings = new()
    {
        SelectionStrategy = new CustomSelectionStrategy(),
        TerminationStrategy = new CustomTerminationStrategy(),
    }
};

Nach:

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

GroupChatOrchestration orchestration = new(
    new RoundRobinGroupChatManager(),
    agentWriter,
    agentReviewer);

Schritt 3: Starten des Gruppenchats

Vor:

chat.AddChatMessage(input);
await foreach (var response in chat.InvokeAsync())
{
    // handle response
}

Nach:

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

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

OrchestrationResult<string> result = await orchestration.InvokeAsync(input, runtime);
string text = await result.GetValueAsync(TimeSpan.FromSeconds(timeout));

Schritt 4: Anpassen der Orchestrierung

Mit dem neuen Orchestrierungsmodell können Sie benutzerdefinierte Strategien für die Beendigung, die Agentenauswahl und vieles mehr erstellen, indem Sie GroupChatManager unterklassifizieren und dessen Methoden überschreiben. Weitere Informationen finden Sie in der GroupChatOrchestration-Dokumentation .

Schritt 5: Entfernen veralteter APIs

Entfernen Sie jeglichen Code, der direkt AgentGroupChat-spezifische Eigenschaften oder Methoden bearbeitet, da sie nicht mehr unterstützt werden.

Schritt 6: Überprüfen und Testen

  • Überprüfen Sie Ihren Code auf alle verbleibenden Verweise auf die alten Klassen.
  • Testen Sie Ihre Gruppenchatszenarien, um sicherzustellen, dass sich die neue Orchestrierung wie erwartet verhält.

Vollständiges Beispiel

In diesem Leitfaden wird veranschaulicht, wie Sie die Kernlogik von Step03_Chat.csAgentGroupChat zu der neuen GroupChatOrchestrationmigrieren, einschließlich eines benutzerdefinierten Gruppenchat-Managers, der die Genehmigungsbasierte Beendigungsstrategie implementiert.

Schritt 1: Agentdefinition

In der Agentdefinition sind keine Änderungen erforderlich. Sie können weiterhin dasselbe AgentWriter und AgentReviewer wie zuvor verwenden.

Schritt 2: Implementieren eines benutzerdefinierten Gruppenchat-Managers

Erstellen Sie ein benutzerdefiniertes GroupChatManager, das den Chat beendet, wenn die letzte Nachricht "genehmigen" enthält, und nur der Prüfer kann genehmigen.

private sealed class ApprovalGroupChatManager : RoundRobinGroupChatManager
{
    private readonly string _approverName;
    public ApprovalGroupChatManager(string approverName)
    {
        _approverName = approverName;
    }

    public override ValueTask<GroupChatManagerResult<bool>> ShouldTerminate(ChatHistory history, CancellationToken cancellationToken = default)
    {
        var last = history.LastOrDefault();
        bool shouldTerminate = last?.AuthorName == _approverName &&
            last.Content?.Contains("approve", StringComparison.OrdinalIgnoreCase) == true;
        return ValueTask.FromResult(new GroupChatManagerResult<bool>(shouldTerminate)
        {
            Reason = shouldTerminate ? "Approved by reviewer." : "Not yet approved."
        });
    }
}

Schritt 3: Initialisieren der Orchestrierung

Ersetzen Sie die AgentGroupChat Initialisierung durch:

var orchestration = new GroupChatOrchestration(
    new ApprovalGroupChatManager(ReviewerName)
    {
        MaximumInvocationCount = 10
    },
    agentWriter,
    agentReviewer);

Schritt 4: Ausführen der Orchestrierung

Ersetzen Sie die Nachrichtenschleife durch:

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

var result = await orchestration.InvokeAsync("concept: maps made out of egg cartons.", runtime);
string text = await result.GetValueAsync(TimeSpan.FromSeconds(60));
Console.WriteLine($"\n# RESULT: {text}");

await runtime.RunUntilIdleAsync();

Zusammenfassung

  • Verwenden Sie ein benutzerdefiniertes Element GroupChatManager für eine genehmigungsbasierte Beendigung.
  • Ersetzen Sie die Chatschleife durch den Orchestrierungsaufruf.
  • Die restlichen Setup- und Nachrichtenformatierungen des Agents können unverändert bleiben.

Migrieren von AgentGroupChat zu GroupChatOrchestration

Die neue GroupChatOrchestration API in Python ersetzt das ältere AgentGroupChat Muster und bietet eine flexiblere und erweiterbarere Möglichkeit zum Verwalten von Unterhaltungen mit mehreren Agents. Hier erfahren Sie, wie Sie Ihren Code migrieren:

Schritt 1: Ersetze Importe und Klassenbezüge

  • Entfernen Sie alle Importe oder Verweise auf AgentGroupChat und verwandte Strategien. Entfernen Sie beispielsweise Folgendes:

    from semantic_kernel.agents import AgentGroupChat
    
  • Importieren Sie die neuen Orchestrierungsklassen:

    from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager
    from semantic_kernel.agents.runtime import InProcessRuntime
    

Schritt 2: Initialisierung aktualisieren

Ersetzen Sie AgentGroupChat mit GroupChatOrchestration und einem GroupChatManager (z. B. RoundRobinGroupChatManager oder einem benutzerdefinierten), um den Fluss zu steuern.

Vor:

group_chat = AgentGroupChat(
    agents=[agent_writer, agent_reviewer],
    termination_strategy=CustomTerminationStrategy(),
    selection_strategy=CustomSelectionStrategy(),
)

Nach:

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

orchestration = GroupChatOrchestration(
    members=[agent_writer, agent_reviewer],
    manager=RoundRobinGroupChatManager(),
)

Schritt 3: Starten des Gruppenchats

Vor:

await group_chat.add_chat_message(message=TASK)
async for content in group_chat.invoke():
    # handle response

Nach:

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

orchestration_result = await group_chat_orchestration.invoke(task=TASK, runtime=runtime)
value = await orchestration_result.get()

Schritt 4: Anpassen der Orchestrierung

Mit dem neuen Orchestrierungsmodell können Sie benutzerdefinierte Strategien für Beendigung, Agentauswahl und vieles mehr erstellen, indem Sie GroupChatManager unterklassen bilden und seine Methoden überschreiben. Weitere Informationen finden Sie in der GroupChatOrchestration-Dokumentation .

Schritt 5: Entfernen veralteter APIs

Entfernen Sie Code, der AgentGroupChat-spezifische Eigenschaften oder Methoden direkt manipuliert, da sie nicht mehr gewartet werden.

Schritt 6: Überprüfen und Testen

  • Überprüfen Sie Ihren Code auf alle verbleibenden Verweise auf die alten Klassen.
  • Testen Sie Ihre Gruppenchatszenarien, um sicherzustellen, dass die neue Orchestrierung wie erwartet funktioniert.

Vollständiges Beispiel

In diesem Leitfaden wird veranschaulicht, wie Sie die Kernlogik von step06_chat_completion_agent_group_chat.pyAgentGroupChat zu der neuen GroupChatOrchestrationmigrieren, einschließlich eines benutzerdefinierten Gruppenchat-Managers, der die Genehmigungsbasierte Beendigungsstrategie implementiert.

Schritt 1: Agentdefinition

In der Agentdefinition sind keine Änderungen erforderlich. Sie können weiterhin dasselbe AgentWriter und AgentReviewer wie zuvor verwenden.

Schritt 2: Implementieren eines benutzerdefinierten Gruppenchat-Managers

Erstellen Sie ein benutzerdefiniertes GroupChatManager, das den Chat beendet, wenn die letzte Nachricht "genehmigt" enthält, und nur der Prüfer kann genehmigen.

from semantic_kernel.agents import RoundRobinGroupChatManager, BooleanResult

class ApprovalGroupChatManager(RoundRobinGroupChatManager):
    def __init__(self, approver_name: str, max_rounds: int = 10):
        super().__init__(max_rounds=max_rounds)
        self._approver_name = approver_name

    async def should_terminate(self, chat_history):
        last = chat_history[-1] if chat_history else None
        should_terminate = (
            last is not None and
            getattr(last, 'name', None) == self._approver_name and
            'approved' in (last.content or '').lower()
        )
        return BooleanResult(result=should_terminate, reason="Approved by reviewer." if should_terminate else "Not yet approved.")

Schritt 3: Initialisieren der Orchestrierung

Ersetzen Sie die AgentGroupChat Initialisierung durch:

from semantic_kernel.agents import GroupChatOrchestration
from semantic_kernel.agents.runtime import InProcessRuntime

orchestration = GroupChatOrchestration(
    members=[agent_writer, agent_reviewer],
    manager=ApprovalGroupChatManager(approver_name=REVIEWER_NAME, max_rounds=10),
)

Schritt 4: Ausführen der Orchestrierung

Ersetzen Sie die Nachrichtenschleife durch:

runtime = InProcessRuntime()
runtime.start()

orchestration_result = await orchestration.invoke(
    task="a slogan for a new line of electric cars.",
    runtime=runtime,
)

value = await orchestration_result.get()
print(f"***** Result *****\n{value}")

await runtime.stop_when_idle()

Zusammenfassung

  • Verwenden Sie ein benutzerdefiniertes GroupChatManager für die genehmigungsbasierte Beendigung.
  • Ersetzen Sie die Chatschleife durch den Aufruf der Orchestrierung.
  • Die restlichen Setup- und Nachrichtenformatierungen des Agents können unverändert bleiben.

Hinweis

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