Compartir a través de


Orquestación concurrente

Importante

Las características de orquestación del agente en Agent Framework se encuentran en la fase experimental. Están en desarrollo activo y pueden cambiar significativamente antes de avanzar a la fase de versión preliminar o candidata para lanzamiento.

La orquestación simultánea permite que varios agentes funcionen en la misma tarea en paralelo. Cada agente procesa la entrada de forma independiente y sus resultados se recopilan y agregan. Este enfoque es adecuado para escenarios en los que diversas perspectivas o soluciones son valiosas, como lluvia de ideas, razonamiento de conjuntos o sistemas de votación.

Para obtener más información sobre el patrón, como cuándo usar el patrón o cuándo evitar el patrón, consulte Orquestación simultánea.

Casos de uso comunes

Varios agentes generan diferentes soluciones a un problema y sus respuestas se recopilan para un análisis o selección adicionales:

diagrama

Temas que se abordarán

  • Cómo definir varios agentes con diferentes conocimientos
  • Cómo organizar estos agentes para que funcionen simultáneamente en una sola tarea
  • Recopilación y procesamiento de los resultados

Definir los agentes

Los agentes son entidades especializadas que pueden procesar tareas. Aquí definimos dos agentes: un experto en física y un experto en química.

Sugerencia

ChatCompletionAgent se usa aquí, pero puede usar cualquier tipo de agente.

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

Configurar la orquestación simultánea

La ConcurrentOrchestration clase permite ejecutar varios agentes en paralelo. Se pasa la lista de agentes como miembros.

ConcurrentOrchestration orchestration = new (physicist, chemist);

Iniciar el entorno de ejecución

Se requiere un tiempo de ejecución para administrar la ejecución de agentes. Aquí, usamos InProcessRuntime e iniciamos antes de invocar la orquestación.

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

Invocar la orquestación

Ahora puede invocar el proceso de orquestación con una tarea específica. La orquestación ejecutará todos los agentes simultáneamente en la tarea especificada.

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

Recopilar resultados

Los resultados de todos los agentes se pueden recopilar de forma asincrónica. Tenga en cuenta que no se garantiza el orden de los resultados.

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

Opcional: Detener el tiempo de ejecución

Una vez completado el procesamiento, detenga el tiempo de ejecución para limpiar los recursos.

await runtime.RunUntilIdleAsync();

Salida de ejemplo

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

Sugerencia

El código de ejemplo completo está disponible aquí.

Definir los agentes

Los agentes son entidades especializadas que pueden procesar tareas. Aquí definimos dos agentes: un experto en física y un experto en química.

Sugerencia

ChatCompletionAgent Se usa aquí con Azure OpenAI, pero puede usar cualquier tipo de agente o servicio de modelo.

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]

Configurar la orquestación simultánea

La ConcurrentOrchestration clase permite ejecutar varios agentes en paralelo. Se pasa la lista de agentes como miembros.

from semantic_kernel.agents import ConcurrentOrchestration

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

Iniciar el entorno de ejecución

Se requiere un tiempo de ejecución para administrar la ejecución de agentes. Aquí, usamos InProcessRuntime e iniciamos antes de invocar la orquestación.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Invocar la orquestación

Ahora puede invocar el proceso de orquestación con una tarea específica. La orquestación ejecutará todos los agentes simultáneamente en la tarea especificada.

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

Recopilar resultados

Los resultados de todos los agentes se pueden recopilar de forma asincrónica. Tenga en cuenta que no se garantiza el orden de los resultados.

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

Opcional: Detener el tiempo de ejecución

Una vez completado el procesamiento, detenga el tiempo de ejecución para limpiar los recursos.

await runtime.stop_when_idle()

Salida de ejemplo

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

Sugerencia

El código de ejemplo completo está disponible aquí.

Nota:

La orquestación del agente aún no está disponible en el SDK de Java.

Pasos siguientes