Compartilhar via


Orquestração simultânea

Importante

Os recursos de Orquestração de Agente no Agent Framework estão em estágio experimental. Eles estão em desenvolvimento ativo e podem mudar significativamente antes de avançar para o estágio de prévia ou release candidate.

A orquestração simultânea permite que vários agentes trabalhem na mesma tarefa em paralelo. Cada agente processa a entrada de forma independente e seus resultados são coletados e agregados. Essa abordagem é adequada para cenários em que perspectivas ou soluções diversas são valiosas, como brainstorming, raciocínio de conjunto ou sistemas de votação.

Para saber mais sobre o padrão, como quando usar o padrão ou quando evitar o padrão, consulte orquestração simultânea.

Casos de uso comuns

Vários agentes geram soluções diferentes para um problema e suas respostas são coletadas para análise ou seleção adicionais:

diagrama

O que você vai aprender

  • Como definir vários agentes com conhecimentos diferentes
  • Como orquestrar esses agentes para trabalhar simultaneamente em uma única tarefa
  • Como coletar e processar os resultados

Definir seus agentes

Os agentes são entidades especializadas que podem processar tarefas. Aqui, definimos dois agentes: um especialista em física e um especialista em química.

Dica

O ChatCompletionAgent é usado aqui, mas você pode usar qualquer 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 a orquestração simultânea

A ConcurrentOrchestration classe permite que você execute vários agentes em paralelo. Você fornece a lista de agentes como membros.

ConcurrentOrchestration orchestration = new (physicist, chemist);

Iniciar o Runtime

Um runtime é necessário para gerenciar a execução de agentes. Aqui, usamos InProcessRuntime e o iniciamos previamente à invocação da orquestração.

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

Invocar a Orquestração

Agora você pode invocar a orquestração com uma tarefa específica. A orquestração executará todos os agentes simultaneamente na tarefa determinada.

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

Coletar Resultados

Os resultados de todos os agentes podem ser coletados de forma assíncrona. Observe que a ordem dos resultados não é garantida.

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

Opcional: interromper o runtime

Após a conclusão do processamento, interrompa o runtime para limpar os recursos.

await runtime.RunUntilIdleAsync();

Saída de exemplo

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

Dica

O código de exemplo completo está disponível aqui

Definir seus agentes

Os agentes são entidades especializadas que podem processar tarefas. Aqui, definimos dois agentes: um especialista em física e um especialista em química.

Dica

O ChatCompletionAgent recurso é usado aqui com o Azure OpenAI, no entanto, você pode usar qualquer tipo de agente ou serviço 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 a orquestração simultânea

A ConcurrentOrchestration classe permite que você execute vários agentes em paralelo. Você fornece a lista de agentes como membros.

from semantic_kernel.agents import ConcurrentOrchestration

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

Iniciar o Runtime

Um runtime é necessário para gerenciar a execução de agentes. Aqui, usamos InProcessRuntime e o iniciamos previamente à invocação da orquestração.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Invocar a Orquestração

Agora você pode invocar a orquestração com uma tarefa específica. A orquestração executará todos os agentes simultaneamente na tarefa determinada.

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

Coletar Resultados

Os resultados de todos os agentes podem ser coletados de forma assíncrona. Observe que a ordem dos resultados não é garantida.

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: interromper o runtime

Após a conclusão do processamento, interrompa o runtime para limpar os recursos.

await runtime.stop_when_idle()

Saída de exemplo

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

Dica

O código de exemplo completo está disponível aqui.

Observação

A orquestração do agente ainda não está disponível no SDK do Java.

Próximas etapas