Partager via


AgentGroupChat Guide de migration d’orchestration

Il s’agit d’un guide de migration pour les développeurs qui ont utilisé le AgentGroupChat noyau sémantique et qui souhaitent passer au nouveau GroupChatOrchestration. La nouvelle classe offre un moyen plus flexible et plus puissant de gérer les interactions de conversation de groupe entre les agents.

Migration de AgentGroupChat vers vers GroupChatOrchestration

La nouvelle GroupChatOrchestration classe remplace le AgentGroupChat modèle d’orchestration unifié et extensible. Voici comment migrer votre code C# :

Étape 1 : Remplacer les utilisations et les références de classe

  • Supprimez les déclarations using ou les références à AgentChat et AgentGroupChat. Par exemple, supprimez :

    using Microsoft.SemanticKernel.Agents.Chat;
    
  • Ajoutez une référence au nouvel espace de noms d'orchestration.

    using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;
    

Étape 2 : Mettre à jour l’initialisation

Avant :

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

Après :

using Microsoft.SemanticKernel.Agents.Orchestration.GroupChat;

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

Étape 3 : Démarrer la conversation de groupe

Avant :

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

Après :

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));

Étape 4 : Personnalisation de l’orchestration

Le nouveau modèle d’orchestration vous permet de créer des stratégies personnalisées pour l’arrêt, la sélection de l’agent et bien plus encore en subclassant GroupChatManager et en substituant ses méthodes. Pour de plus amples informations, reportez-vous à la documentation GroupChatOrchestration.

Étape 5 : Supprimer les API déconseillées

Supprimez tout code qui manipule directement des AgentGroupChatpropriétés ou des méthodes spécifiques, car ils ne sont plus conservés.

Étape 6 : Vérifier et tester

  • Passez en revue votre code pour connaître les références restantes aux anciennes classes.
  • Testez vos scénarios de conversation de groupe pour vous assurer que la nouvelle orchestration se comporte comme prévu.

Exemple complet

Ce guide montre comment migrer la logique principale de Step03_Chat.cs de AgentGroupChat vers le nouveau GroupChatOrchestration, y compris un gestionnaire de discussion de groupe personnalisé qui implémente la stratégie de terminaison basée sur l'approbation.

Étape 1 : Définition de l’agent

Aucune modification n’est nécessaire dans la définition de l’agent. Vous pouvez continuer à utiliser le même AgentWriter et AgentReviewer qu’avant.

Étape 2 : Implémenter un gestionnaire de conversation de groupe personnalisé

Créez une commande personnalisée GroupChatManager qui met fin à la conversation lorsque le dernier message contient « approuver » et seul le réviseur peut approuver :

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."
        });
    }
}

Étape 3 : Initialiser l’orchestration

Remplacez l’initialisation AgentGroupChat par :

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

Étape 4 : Exécuter l’orchestration

Remplacez la boucle de message par :

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();

Résumé

  • Utilisez une méthode personnalisée GroupChatManager pour la résiliation basée sur l’approbation.
  • Remplacez la boucle de conversation par l’appel d’orchestration.
  • Le reste de votre configuration de l’agent et la mise en forme des messages peuvent rester inchangés.

Migration de AgentGroupChat vers vers GroupChatOrchestration

La nouvelle GroupChatOrchestration API dans Python remplace l’ancien AgentGroupChat modèle, ce qui offre un moyen plus flexible et extensible de gérer les conversations multi-agents. Voici comment migrer votre code :

Étape 1 : Remplacer les références d’importations et de classes

  • Supprimez les importations ou références à AgentGroupChat et aux stratégies associées. Par exemple, supprimez :

    from semantic_kernel.agents import AgentGroupChat
    
  • Importez les nouvelles classes d’orchestration :

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

Étape 2 : Mettre à jour l’initialisation

Remplacez AgentGroupChat par GroupChatOrchestration et un GroupChatManager (par exemple, RoundRobinGroupChatManager ou un modèle personnalisé) pour contrôler le flux.

Avant :

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

Après :

from semantic_kernel.agents import GroupChatOrchestration, RoundRobinGroupChatManager

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

Étape 3 : Démarrer la conversation de groupe

Avant :

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

Après :

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()

Étape 4 : Personnalisation de l’orchestration

Le nouveau modèle d’orchestration vous permet de créer des stratégies personnalisées pour l’arrêt, la sélection d’agents et bien plus encore en créant une sous-classe de GroupChatManager et en remplaçant ses méthodes. Pour obtenir davantage de détails, reportez-vous à la documentation de GroupChatOrchestration.

Étape 5 : Supprimer les API déconseillées

Supprimez tout code qui manipule directement des AgentGroupChatpropriétés ou des méthodes spécifiques, car ils ne sont plus conservés.

Étape 6 : Vérifier et tester

  • Passez en revue votre code pour connaître les références restantes aux anciennes classes.
  • Testez vos scénarios de conversation de groupe pour vous assurer que la nouvelle orchestration se comporte comme prévu.

Exemple complet

Ce guide montre comment migrer la logique principale de step06_chat_completion_agent_group_chat.py de AgentGroupChat vers le nouveau GroupChatOrchestration, y compris un gestionnaire de discussion de groupe personnalisé qui implémente la stratégie de terminaison basée sur l'approbation.

Étape 1 : Définition de l’agent

Aucune modification n’est nécessaire dans la définition de l’agent. Vous pouvez continuer à utiliser le même AgentWriter et AgentReviewer qu’avant.

Étape 2 : Implémenter un gestionnaire de conversation de groupe personnalisé

Créez une commande personnalisée GroupChatManager qui met fin à la conversation lorsque le dernier message contient « approuvé » et seul le réviseur peut approuver :

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.")

Étape 3 : Initialiser l’orchestration

Remplacez l’initialisation AgentGroupChat par :

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),
)

Étape 4 : Exécuter l’orchestration

Remplacez la boucle de message par :

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()

Résumé

  • Utilisez une méthode personnalisée GroupChatManager pour la résiliation basée sur l’approbation.
  • Remplacez la boucle de conversation par l’appel d’orchestration.
  • Le reste de votre configuration de l’agent et la mise en forme des messages peuvent rester inchangés.

Remarque

L’orchestration de l’agent n’est pas encore disponible dans le Kit de développement logiciel (SDK) Java.