Udostępnij przez


Współbieżna aranżacja

Ważne

Funkcje orkiestracji agenta w ramach struktury agenta znajdują się w fazie eksperymentalnej. Są one aktywnie opracowywane i mogą ulec znacznej zmianie przed przejściem do etapu wersji zapoznawczej lub wersji kandydującej do wydania.

Współbieżna orkiestracja umożliwia wielu agentom równoległe wykonywanie prac nad tym samym zadaniem. Każdy agent przetwarza dane wejściowe niezależnie, a ich wyniki są zbierane i agregowane. Takie podejście jest odpowiednie dla scenariuszy, w których cenne są różne perspektywy lub rozwiązania, takie jak burza mózgów, rozumowanie zespołu lub systemy głosowania.

Aby dowiedzieć się więcej na temat wzorca, na przykład kiedy go stosować, a kiedy unikać, zobacz Współbieżna orkiestracja.

Typowe przypadki użycia

Wielu agentów generuje różne rozwiązania problemu, a ich odpowiedzi są zbierane w celu dalszej analizy lub wyboru:

diagram

Czego nauczysz się

  • Jak zdefiniować wielu agentów z inną wiedzą
  • Jak zorganizować tych agentów, aby pracować współbieżnie na jednym zadaniu
  • Jak zbierać i przetwarzać wyniki

Definiowanie agentów

Agenci to wyspecjalizowane jednostki, które mogą przetwarzać zadania. Tutaj definiujemy dwóch agentów: eksperta fizyki i eksperta chemicznego.

Wskazówka

Parametr ChatCompletionAgent jest używany w tym miejscu, ale można użyć dowolnego typu 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,
};

Konfigurowanie współbieżnej orkiestracji

Klasa ConcurrentOrchestration umożliwia równoległe uruchamianie wielu agentów. Przekazujesz listę agentów jako członków.

ConcurrentOrchestration orchestration = new (physicist, chemist);

Uruchamianie środowiska uruchomieniowego

Środowisko uruchomieniowe jest wymagane do zarządzania wykonywaniem agentów. W tym miejscu użyjemy InProcessRuntime i uruchomimy go przed wywołaniem orkiestracji.

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

Wywołaj orkiestrację

Teraz można wywołać aranżację za pomocą określonego zadania. Orkiestracja uruchomi wszystkich agentów jednocześnie w danym zadaniu.

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

Zbieranie wyników

Wyniki wszystkich agentów można zbierać asynchronicznie. Należy pamiętać, że kolejność wyników nie jest gwarantowana.

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

Opcjonalnie: Zatrzymaj środowisko uruchomieniowe

Po zakończeniu przetwarzania zatrzymaj środowisko uruchomieniowe, aby wyczyścić zasoby.

await runtime.RunUntilIdleAsync();

Przykładowe dane wyjściowe

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

Wskazówka

Pełny przykładowy kod jest dostępny tutaj

Definiowanie agentów

Agenci to wyspecjalizowane jednostki, które mogą przetwarzać zadania. Tutaj definiujemy dwóch agentów: eksperta fizyki i eksperta chemicznego.

Wskazówka

Element ChatCompletionAgent jest używany w tym miejscu w usłudze Azure OpenAI, ale można użyć dowolnego typu agenta lub usługi 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]

Konfigurowanie współbieżnej orkiestracji

Klasa ConcurrentOrchestration umożliwia równoległe uruchamianie wielu agentów. Przekazujesz listę agentów jako członków.

from semantic_kernel.agents import ConcurrentOrchestration

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

Uruchamianie środowiska uruchomieniowego

Środowisko uruchomieniowe jest wymagane do zarządzania wykonywaniem agentów. W tym miejscu użyjemy InProcessRuntime i uruchomimy go przed wywołaniem orkiestracji.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Wywołaj orkiestrację

Teraz można wywołać aranżację za pomocą określonego zadania. Orkiestracja uruchomi wszystkich agentów jednocześnie w danym zadaniu.

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

Zbieranie wyników

Wyniki wszystkich agentów można zbierać asynchronicznie. Należy pamiętać, że kolejność wyników nie jest gwarantowana.

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

Opcjonalnie: Zatrzymaj środowisko uruchomieniowe

Po zakończeniu przetwarzania zatrzymaj środowisko uruchomieniowe, aby wyczyścić zasoby.

await runtime.stop_when_idle()

Przykładowe dane wyjściowe

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

Wskazówka

Pełny przykładowy kod jest dostępny tutaj.

Uwaga / Notatka

Orkiestracja agentów nie jest jeszcze dostępna w Java SDK.

Dalsze kroki