Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
usingou les références àAgentChatetAgentGroupChat. 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
GroupChatManagerpour 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 à
AgentGroupChatet aux stratégies associées. Par exemple, supprimez :from semantic_kernel.agents import AgentGroupChatImportez 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
GroupChatManagerpour 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.