Sdílet prostřednictvím


Souběžná orchestrace

Důležité

Funkce orchestrace agentů v rozhraní Agent Framework jsou v experimentální fázi. Jsou ve fázi aktivního vývoje a můžou se výrazně změnit před přechodem do fáze Preview nebo release candidate.

Souběžná orchestrace umožňuje, aby několik agentů fungovalo paralelně na stejném úkolu. Každý agent zpracovává vstup nezávisle a jejich výsledky se shromažďují a agregují. Tento přístup je vhodný pro scénáře, ve kterých jsou cenné různé perspektivy nebo řešení, jako jsou debaty, souborové odůvodnění nebo hlasovací systémy.

Další informace o vzoru, například kdy použít vzor nebo kdy se ho vyhnout, najdete v tématu Souběžná orchestrace.

Běžné případy použití

Několik agentů generuje různá řešení problému a jejich odpovědi se shromažďují pro další analýzu nebo výběr:

diagram

Co se naučíte

  • Jak definovat více agentů s různými odbornými znalostmi
  • Jak tyto agenty sladit, aby mohli současně pracovat na jedné úloze
  • Jak shromažďovat a zpracovávat výsledky

Definování agentů

Agenti jsou specializované entity, které mohou zpracovávat úlohy. Tady definujeme dva agenty: fyziku a odborníka na chemii.

Návod

Tady se ChatCompletionAgent používá, ale můžete použít libovolný typ agenta.

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

Nastavení souběžné orchestrace

Třída ConcurrentOrchestration umožňuje paralelně spouštět více agentů. Předáte seznam agentů jako členů.

ConcurrentOrchestration orchestration = new (physicist, chemist);

Spuštění modulu runtime

Modul runtime se vyžaduje ke správě provádění agentů. Tady použijeme InProcessRuntime a zahájíme to před vyvoláním orchestrace.

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

Vyvolání orchestrace

Orchestraci teď můžete vyvolat pomocí konkrétní úlohy. Orchestrace spustí všechny agenty současně na dané úloze.

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

Shromáždit výsledky

Výsledky ze všech agentů je možné shromažďovat asynchronně. Všimněte si, že pořadí výsledků není zaručeno.

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

Volitelné: Zastavení modulu runtime

Po dokončení zpracování zastavte modul runtime pro vyčištění prostředků.

await runtime.RunUntilIdleAsync();

Ukázkový výstup

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

Návod

Úplný vzorový kód je k dispozici tady.

Definování agentů

Agenti jsou specializované entity, které mohou zpracovávat úlohy. Tady definujeme dva agenty: fyziku a odborníka na chemii.

Návod

Používá se ChatCompletionAgent zde s Azure OpenAI, ale můžete použít libovolný typ agenta nebo službu modelu.

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]

Nastavení souběžné orchestrace

Třída ConcurrentOrchestration umožňuje paralelně spouštět více agentů. Předáte seznam agentů jako členů.

from semantic_kernel.agents import ConcurrentOrchestration

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

Spuštění modulu runtime

Modul runtime se vyžaduje ke správě provádění agentů. Tady použijeme InProcessRuntime a zahájíme to před vyvoláním orchestrace.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Vyvolání orchestrace

Orchestraci teď můžete vyvolat pomocí konkrétní úlohy. Orchestrace spustí všechny agenty současně na dané úloze.

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

Shromáždit výsledky

Výsledky ze všech agentů je možné shromažďovat asynchronně. Všimněte si, že pořadí výsledků není zaručeno.

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

Volitelné: Zastavení modulu runtime

Po dokončení zpracování zastavte modul runtime pro vyčištění prostředků.

await runtime.stop_when_idle()

Ukázkový výstup

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

Návod

Úplný vzorový kód je k dispozici tady.

Poznámka:

Orchestrace agentů zatím není v sadě Java SDK k dispozici.

Další kroky