Szekvenciális vezénylés

Fontos

Az Ügynök-keretrendszer ügynök-vezénylési funkciói a kísérleti fázisban vannak. Aktív fejlesztés alatt állnak, és jelentősen változhatnak, mielőtt továbblépnének az előzetes verzióra vagy a kiadásra jelölt fázisra.

A szekvenciális orchestráció során az ügynökök egy csővezetékbe vannak rendezve. Minden ügynök egymás után dolgozza fel a feladatot, és átadja a kimenetét a sorozat következő ügynökének. Ez olyan munkafolyamatokhoz ideális, ahol minden lépés az előzőre épül, például dokumentum-felülvizsgálatra, adatfeldolgozási folyamatokra vagy többfázisú érvelésre.

Ha többet szeretne megtudni a mintáról, például hogy mikor érdemes használni a mintát, vagy mikor szeretné elkerülni a mintát a számítási feladatban, tekintse meg a szekvenciális vezénylést.

Gyakori használati esetek

A dokumentum egy összegző ügynökön, majd egy fordítóügynökön, végül pedig egy minőségbiztosítási ügynökön halad át, mindegyik az előző kimenetre épül:

diagram

Tudnivalók

  • Ügynökök sorozatának definiálása speciális szerepkörrel
  • Hogyan vezényelhetők ezek az ügynökök, hogy mindegyik feldolgozza az előző kimenetét
  • Köztes kimenetek megfigyelése és a végeredmény összegyűjtése

Az ügynökök definiálása

Az ügynökök speciális entitások, amelyek sorrendben dolgozzák fel a feladatokat. Itt három ügynököt határozunk meg: egy elemzőt, egy szövegírót és egy szerkesztőt.

Jótanács

Ez ChatCompletionAgent itt használatos, de bármilyen ügynöktípust használhat.

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

Nem kötelező: Ügynökválaszok megfigyelése

Létrehozhat egy visszahívást az ügynök válaszainak rögzítéséhez, amint a sorozat a ResponseCallback tulajdonságon keresztül halad előre.

ChatHistory history = [];

ValueTask responseCallback(ChatMessageContent response)
{
    history.Add(response);
    return ValueTask.CompletedTask;
}

A szekvenciális orchesztráció beállítása

Hozzon létre egy SequentialOrchestration objektumot, amely átadja az ügynököket és az opcionális válaszvisszahívást.

SequentialOrchestration orchestration = new(analystAgent, writerAgent, editorAgent)
{
    ResponseCallback = responseCallback,
};

A futtatókörnyezet indítása

Az ügynökök végrehajtásának kezeléséhez futtatókörnyezetre van szükség. Itt a vezénylés megkezdése előtt használjuk InProcessRuntime és indítjuk el.

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

Orchestráció meghívása

Hívja meg az orkesztációt a kezdeti feladattal (például egy termékleírással). A kimenet sorrendben halad végig az egyes ügynökökön.

var result = await orchestration.InvokeAsync(
    "An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours",
    runtime);

Eredmények gyűjtése

Várja meg, amíg az orchestration befejeződik, és szerezze meg a végső kimenetet.

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

Opcionális: A futtatókörnyezet leállítása

A feldolgozás befejezése után állítsa le a futtatókörnyezetet az erőforrások törléséhez.

await runtime.RunUntilIdleAsync();

Mintakimenet

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

Jótanács

A teljes mintakód itt érhető el

Az ügynökök definiálása

A sorozat minden ügynökének külön felelőssége van. Ebben a példában a következőt mutatjuk be:

  • ConceptExtractorAgent: A termékleírásból kinyeri a főbb funkciókat, a célközönséget és az egyedi értékesítési pontokat.
  • WriterAgent: A kinyert információk alapján készít egy marketingmásolatot.
  • FormatProofAgent: A vázlatmásolat szerkesztése és polírozása az egyértelműség és a konzisztencia érdekében.

Jótanács

Ez ChatCompletionAgent az Azure OpenAI-val használható, azonban bármilyen ügynöktípust vagy modellszolgáltatást használhat.

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]

Nem kötelező: Ügynökválaszok megfigyelése

Beállíthat egy visszahívást, amely megfigyeli és kinyomtatja az egyes ügynökök kimenetét, ahogy a sorozat előrehalad.

from semantic_kernel.contents import ChatMessageContent

def agent_response_callback(message: ChatMessageContent) -> None:
    print(f"# {message.name}\n{message.content}")

A szekvenciális orchesztráció beállítása

SequentialOrchestration objektum, átadva az ügynököknek és az opcionális válaszvisszahívásnak.

from semantic_kernel.agents import SequentialOrchestration

agents = get_agents()
sequential_orchestration = SequentialOrchestration(
    members=agents,
    agent_response_callback=agent_response_callback,
)

A futtatókörnyezet indítása

Indítsa el a futtatókörnyezetet az ügynök működtetésének kezeléséhez.

from semantic_kernel.agents.runtime import InProcessRuntime

runtime = InProcessRuntime()
runtime.start()

Orchestráció meghívása

Hívja meg az orkesztációt a kezdeti feladattal (például egy termékleírással). A kimenet sorrendben halad végig az egyes ügynökökön.

orchestration_result = await sequential_orchestration.invoke(
    task="An eco-friendly stainless steel water bottle that keeps drinks cold for 24 hours",
    runtime=runtime,
)

Eredmények gyűjtése

Várjon, amíg az összehangolás befejeződik.

value = await orchestration_result.get(timeout=20)
print(f"***** Final Result *****\n{value}")

Opcionális: A futtatókörnyezet leállítása

A feldolgozás befejezése után állítsa le a futtatókörnyezetet az erőforrások törléséhez.

await runtime.stop_when_idle()

Mintakimenet

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

Jótanács

A teljes mintakód itt érhető el.

Megjegyzés:

Az ügynök-vezénylés még nem érhető el a Java SDK-ban.

Következő lépések