Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
W sekwencyjnej orkiestracji agenci są zorganizowani w szeregu. Każdy agent przetwarza zadanie z kolei, przekazując dane wyjściowe do następnego agenta w sekwencji. Jest to idealne rozwiązanie w przypadku przepływów pracy, w których każdy krok opiera się na poprzednim, takim jak przegląd dokumentów, potoki przetwarzania danych lub rozumowanie wieloetapowe.
Aby dowiedzieć się więcej na temat wzorca, jak kiedy używać wzorca lub kiedy go unikać w swoim obciążeniu, zobacz Sekwencyjna orkiestracja.
Typowe przypadki użycia
Dokument przechodzi przez agenta podsumowania, a następnie agenta tłumaczenia, a na koniec agenta kontroli jakości, z których każdy jest oparty na poprzednich danych wyjściowych:
Czego nauczysz się
- Jak zdefiniować sekwencję agentów z każdą z wyspecjalizowaną rolą
- Jak zorganizować tych agentów tak, aby każdy przetwarzał dane wyjściowe poprzedniego
- Jak obserwować pośrednie dane wyjściowe i zbierać końcowy wynik
Definiowanie agentów
Agenci to wyspecjalizowane jednostki, które przetwarzają zadania w sekwencji. W tym miejscu definiujemy trzech agentów: analityka, autora kopii i edytora.
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.Sequential;
using Microsoft.SemanticKernel.Agents.Runtime.InProcess;
// Create a kernel with an AI service
Kernel kernel = ...;
ChatCompletionAgent analystAgent = new ChatCompletionAgent {
Name = "Analyst",
Instructions = "You are a marketing analyst. Given a product description, identify:\n- Key features\n- Target audience\n- Unique selling points",
Kernel = kernel,
};
ChatCompletionAgent writerAgent = new ChatCompletionAgent {
Name = "Copywriter",
Instructions = "You are a marketing copywriter. Given a block of text describing features, audience, and USPs, compose a compelling marketing copy (like a newsletter section) that highlights these points. Output should be short (around 150 words), output just the copy as a single text block.",
Kernel = kernel,
};
ChatCompletionAgent editorAgent = new ChatCompletionAgent {
Name = "Editor",
Instructions = "You are an editor. Given the draft copy, correct grammar, improve clarity, ensure consistent tone, give format and make it polished. Output the final improved copy as a single text block.",
Kernel = kernel,
};
Opcjonalnie: Obserwowanie odpowiedzi agenta
Za pośrednictwem właściwości ResponseCallback można utworzyć wywołanie zwrotne w celu przechwycenia odpowiedzi agenta w miarę postępu sekwencji.
ChatHistory history = [];
ValueTask responseCallback(ChatMessageContent response)
{
history.Add(response);
return ValueTask.CompletedTask;
}
Konfigurowanie sekwencyjnej orkiestracji
Utwórz obiekt SequentialOrchestration, przekazując agentów i opcjonalne wywołanie zwrotne odpowiedzi.
SequentialOrchestration orchestration = new(analystAgent, writerAgent, editorAgent)
{
ResponseCallback = responseCallback,
};
Uruchamianie środowiska uruchomieniowego
Środowisko uruchomieniowe jest wymagane do zarządzania wykonywaniem agentów programowych. W tym miejscu użyjemy InProcessRuntime i uruchomimy go przed wywołaniem orkiestracji.
InProcessRuntime runtime = new InProcessRuntime();
await runtime.StartAsync();
Wywołaj orkiestrację
Wywołaj aranżację za pomocą zadania początkowego (np. opisu produktu). Dane wyjściowe będą przepływać przez każdego agenta w sekwencji.
var result = await orchestration.InvokeAsync(
"An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours",
runtime);
Zbieranie wyników
Poczekaj na ukończenie aranżacji i pobierz końcowe dane wyjściowe.
string output = await result.GetValueAsync(TimeSpan.FromSeconds(20));
Console.WriteLine($"\n# RESULT: {text}");
Console.WriteLine("\n\nORCHESTRATION HISTORY");
foreach (ChatMessageContent message in history)
{
this.WriteAgentChatMessage(message);
}
Opcjonalnie: Zatrzymaj środowisko uruchomieniowe
Po zakończeniu przetwarzania zatrzymaj środowisko uruchomieniowe, aby wyczyścić zasoby.
await runtime.RunUntilIdleAsync();
Przykładowe dane wyjściowe
# RESULT: Introducing our Eco-Friendly Stainless Steel Water Bottles – the perfect companion for those who care about the planet while staying hydrated! Our bottles ...
ORCHESTRATION HISTORY
# Assistant - Analyst: **Key Features:**
- Made from eco-friendly stainless steel
- Insulation technology that maintains cold temperatures for up to 24 hours
- Reusable and sustainable design
- Various sizes and colors available (assumed based on typical offerings)
- Leak-proof cap
- BPA-free ...
# Assistant - copywriter: Introducing our Eco-Friendly Stainless ...
# Assistant - editor: Introducing our Eco-Friendly Stainless Steel Water Bottles – the perfect companion for those who care about the planet while staying hydrated! Our bottles ...
Wskazówka
Pełny przykładowy kod jest dostępny tutaj
Definiowanie agentów
Każdy agent w sekwencji ma określoną odpowiedzialność. W tym przykładzie mamy następujące elementy:
- ConceptExtractorAgent: wyodrębnia kluczowe funkcje, docelową grupę odbiorców i unikatowe punkty sprzedaży z opisu produktu.
- WriterAgent: komponuje kopię marketingową na podstawie wyodrębnionych informacji.
- FormatProofAgent: edytuje i przeczyszcza kopię roboczą w celu zapewnienia przejrzystości i spójności.
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]:
concept_extractor_agent = ChatCompletionAgent(
name="ConceptExtractorAgent",
instructions=(
"You are a marketing analyst. Given a product description, identify:\n"
"- Key features\n"
"- Target audience\n"
"- Unique selling points\n\n"
),
service=AzureChatCompletion(),
)
writer_agent = ChatCompletionAgent(
name="WriterAgent",
instructions=(
"You are a marketing copywriter. Given a block of text describing features, audience, and USPs, "
"compose a compelling marketing copy (like a newsletter section) that highlights these points. "
"Output should be short (around 150 words), output just the copy as a single text block."
),
service=AzureChatCompletion(),
)
format_proof_agent = ChatCompletionAgent(
name="FormatProofAgent",
instructions=(
"You are an editor. Given the draft copy, correct grammar, improve clarity, ensure consistent tone, "
"give format and make it polished. Output the final improved copy as a single text block."
),
service=AzureChatCompletion(),
)
return [concept_extractor_agent, writer_agent, format_proof_agent]
Opcjonalnie: Obserwowanie odpowiedzi agenta
Możesz zdefiniować funkcję zwrotną, aby obserwować i wyświetlać dane wyjściowe każdego agenta w miarę postępu sekwencji.
from semantic_kernel.contents import ChatMessageContent
def agent_response_callback(message: ChatMessageContent) -> None:
print(f"# {message.name}\n{message.content}")
Konfigurowanie sekwencyjnej orkiestracji
Obiekt SequentialOrchestration, przekazując agentów oraz opcjonalne wywołanie zwrotne dla odpowiedzi.
from semantic_kernel.agents import SequentialOrchestration
agents = get_agents()
sequential_orchestration = SequentialOrchestration(
members=agents,
agent_response_callback=agent_response_callback,
)
Uruchamianie środowiska uruchomieniowego
Uruchom środowisko uruchomieniowe, aby zarządzać wykonywaniem agenta.
from semantic_kernel.agents.runtime import InProcessRuntime
runtime = InProcessRuntime()
runtime.start()
Wywołaj orkiestrację
Wywołaj aranżację za pomocą zadania początkowego (np. opisu produktu). Dane wyjściowe będą przepływać przez każdego agenta w sekwencji.
orchestration_result = await sequential_orchestration.invoke(
task="An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours",
runtime=runtime,
)
Zbieranie wyników
Poczekaj na ukończenie aranżacji.
value = await orchestration_result.get(timeout=20)
print(f"***** Final Result *****\n{value}")
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
# ConceptExtractorAgent
- Key Features:
- Made of eco-friendly stainless steel
- Keeps drinks cold for 24 hours
...
# WriterAgent
Keep your beverages refreshingly chilled all day long with our eco-friendly stainless steel bottles...
# FormatProofAgent
Keep your beverages refreshingly chilled all day long with our eco-friendly stainless steel bottles...
***** Final Result *****
Keep your beverages refreshingly chilled all day long with our eco-friendly stainless steel bottles...
Wskazówka
Pełny przykładowy kod jest dostępny tutaj.
Uwaga / Notatka
Orkiestracja agentów nie jest jeszcze dostępna w Java SDK.