Partager via


Orchestration simultanée

Important

Les fonctionnalités d’orchestration d’agent dans l’infrastructure d’agent sont à l’étape expérimentale. Ils sont en cours de développement actif et peuvent changer considérablement avant de passer à la phase de version préliminaire ou de candidat à la version finale.

L’orchestration simultanée permet à plusieurs agents de travailler sur la même tâche en parallèle. Chaque agent traite l’entrée indépendamment, et leurs résultats sont collectés et agrégés. Cette approche est bien adaptée aux scénarios où diverses perspectives ou solutions sont précieuses, telles que le brainstorming, le raisonnement d’ensemble ou les systèmes de vote.

Pour en savoir plus sur le modèle, par exemple quand utiliser le modèle ou quand éviter le modèle, consultez orchestration simultanée.

Cas d’usage courants

Plusieurs agents génèrent différentes solutions à un problème et leurs réponses sont collectées pour une analyse ou une sélection supplémentaires :

diagramme

Ce que vous allez apprendre

  • Comment définir plusieurs agents avec une expertise différente
  • Comment orchestrer ces agents pour fonctionner simultanément sur une seule tâche
  • Comment collecter et traiter les résultats

Définir vos agents

Les agents sont des entités spécialisées qui peuvent traiter des tâches. Ici, nous définissons deux agents : un expert en physique et un expert en chimie.

Conseil / Astuce

Il ChatCompletionAgent est utilisé ici, mais vous pouvez utiliser n’importe quel type d’agent.

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,
};

Configurer l’orchestration simultanée

La ConcurrentOrchestration classe vous permet d’exécuter plusieurs agents en parallèle. Vous passez la liste des agents en tant que membres.

ConcurrentOrchestration orchestration = new (physicist, chemist);

Démarrer le runtime

Un runtime est nécessaire pour gérer l’exécution des agents. Ici, nous utilisons InProcessRuntime et démarrons avant d’invoquer l’orchestration.

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

Appeler l’orchestration

Vous pouvez maintenant appeler l’orchestration avec une tâche spécifique. L’orchestration va exécuter tous les agents simultanément sur la tâche donnée.

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

Collecter les résultats

Les résultats de tous les agents peuvent être collectés de manière asynchrone. Notez que l’ordre des résultats n’est pas garanti.

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

Facultatif : arrêter le runtime

Une fois le traitement terminé, arrêtez le runtime pour nettoyer les ressources.

await runtime.RunUntilIdleAsync();

Exemple de sortie

# 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 ...

Conseil / Astuce

L’exemple de code complet est disponible ici

Définir vos agents

Les agents sont des entités spécialisées qui peuvent traiter des tâches. Ici, nous définissons deux agents : un expert en physique et un expert en chimie.

Conseil / Astuce

Il ChatCompletionAgent est utilisé ici avec Azure OpenAI, mais vous pouvez utiliser n’importe quel type d’agent ou service de modèle.

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]

Configurer l’orchestration simultanée

La ConcurrentOrchestration classe vous permet d’exécuter plusieurs agents en parallèle. Vous passez la liste des agents en tant que membres.

from semantic_kernel.agents import ConcurrentOrchestration

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

Démarrer le runtime

Un runtime est nécessaire pour gérer l’exécution des agents. Ici, nous utilisons InProcessRuntime et démarrons avant d’invoquer l’orchestration.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Appeler l’orchestration

Vous pouvez maintenant appeler l’orchestration avec une tâche spécifique. L’orchestration va exécuter tous les agents simultanément sur la tâche donnée.

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

Collecter les résultats

Les résultats de tous les agents peuvent être collectés de manière asynchrone. Notez que l’ordre des résultats n’est pas garanti.

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

Facultatif : arrêter le runtime

Une fois le traitement terminé, arrêtez le runtime pour nettoyer les ressources.

await runtime.stop_when_idle()

Exemple de sortie

# 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...

Conseil / Astuce

L’exemple de code complet est disponible ici.

Remarque

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

Étapes suivantes