Ügynök létrehozása szemantikai kernelsablonból

Felkérési sablonok a Szémantikus Kernelben

Az ügynök szerepkörét elsősorban a kapott utasítások határozzák meg, amelyek meghatározzák a viselkedését és a műveleteit. A parancssorhoz Kernelhasonlóan az ügynök utasításai olyan sablonalapú paramétereket is tartalmazhatnak – értékeket és függvényeket egyaránt –, amelyek dinamikusan helyettesíthetők a végrehajtás során. Ez lehetővé teszi a rugalmas, környezettudatos válaszokat, így az ügynök valós idejű bemenet alapján módosíthatja a kimenetét.

Emellett az ügynök közvetlenül konfigurálható parancssori sablonkonfigurációval, így a fejlesztők strukturált és újrafelhasználható módon határozhatják meg a viselkedését. Ez a megközelítés hatékony eszközt kínál az ügynökutasítások szabványosításához és testreszabásához, biztosítva a különböző használati esetek konzisztenciáját, miközben továbbra is dinamikus alkalmazkodóképességet biztosít.

A funkció jelenleg nem érhető el a Javában.

Ügynökutasítások sablonként

Az ügynök sablonparaméterekkel való létrehozása nagyobb rugalmasságot biztosít azáltal, hogy lehetővé teszi az utasítások egyszerű testreszabását különböző forgatókönyvek vagy követelmények alapján. Ez a megközelítés lehetővé teszi az ügynök viselkedésének testre szabását azáltal, hogy adott értékeket vagy függvényeket helyettesít a sablonba, így számos tevékenységhez vagy környezethez igazítható. A sablonparaméterek használatával a fejlesztők sokoldalúbb ügynököket tervezhetnek, amelyek konfigurálhatók a különböző használati esetek kielégítésére anélkül, hogy módosítaniuk kellene az alapvető logikát.

Csevegés befejezésért felelős ügynök

// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;

var instructions = "Tell a story about {{$topic}} that is {{$length}} sentences long.";

ChatCompletionAgent agent =
    new(templateFactory: new KernelPromptTemplateFactory(),
        templateConfig: new(instructions) { TemplateFormat = PromptTemplateConfig.SemanticKernelTemplateFormat })
    {
        Kernel = kernel,
        Name = "StoryTeller",
        Arguments = new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        }
    };
agent = ChatCompletionAgent(
    service=AzureChatCompletion(), # or other supported AI services
    name="StoryTeller",
    instructions="Tell a story about {{$topic}} that is {{$length}} sentences long.",
    arguments=KernelArguments(topic="Dog", length="2"),
)

A funkció jelenleg nem érhető el a Javában.

OpenAI asszisztens ügynök

A sablonos utasítások különösen hatékonyak OpenAIAssistantAgenthasználatakor. Ezzel a megközelítéssel egyetlen segéddefiníció több alkalommal is létrehozható és újra felhasználható, minden alkalommal különböző, adott tevékenységekhez vagy környezetekhez igazított paraméterértékekkel. Ez hatékonyabb telepítést tesz lehetővé, így ugyanaz az asszisztensi keretrendszer számos forgatókönyvet kezelhet, miközben fenntartja a konzisztenciát az alapvető viselkedésében.

// Retrieve an existing assistant definition by identifier
AzureOpenAIClient client = OpenAIAssistantAgent.CreateAzureOpenAIClient(new AzureCliCredential(), new Uri("<your endpoint>"));
AssistantClient assistantClient = client.GetAssistantClient();
Assistant assistant = await client.GetAssistantAsync();
OpenAIAssistantAgent agent = new(assistant, assistantClient, new KernelPromptTemplateFactory(), PromptTemplateConfig.SemanticKernelTemplateFormat)
{
    Arguments = new KernelArguments()
    {
        { "topic", "Dog" },
        { "length", "3" },
    }
}
# Create the client using Azure OpenAI resources and configuration
client, model = AzureAssistantAgent.setup_resources()

# Retrieve the assistant definition from the server based on the assistant ID
definition = await client.beta.assistants.retrieve(
    assistant_id="your-assistant-id",
)

# Create the AzureAssistantAgent instance using the client and the assistant definition
agent = AzureAssistantAgent(
    client=client,
    definition=definition,
    arguments=KernelArguments(topic="Dog", length="3"),
)

A funkció jelenleg nem érhető el a Javában.

Ügynökdefiníció parancssori sablonból

A kernel-parancssori függvény létrehozásához használt parancssori sablon konfigurációja is használható ügynök definiálásához. Ez egységes megközelítést tesz lehetővé mind a kérések, mind az ügynökök kezelésében, elősegítve a konzisztenciát és az újrafelhasználást a különböző összetevők között. Az ügynökdefiníciók codebase-ből való külsősítésével ez a módszer leegyszerűsíti a több ügynök kezelését, így egyszerűbben frissíthetők és karbantarthatóak anélkül, hogy módosítani kellene az alapul szolgáló logikát. Ez az elkülönítés a rugalmasságot is növeli, így a fejlesztők módosíthatják az ügynökök viselkedését, vagy új ügynököket vezethetnek be a konfiguráció egyszerű frissítésével, és nem magát a kódot.

YAML-sablon

name: GenerateStory
template: |
  Tell a story about {{$topic}} that is {{$length}} sentences long.
template_format: semantic-kernel
description: A function that generates a story about a topic.
input_variables:
  - name: topic
    description: The topic of the story.
    is_required: true
  - name: length
    description: The number of sentences in the story.
    is_required: true

Ügynök inicializálása

// Read YAML resource
string generateStoryYaml = File.ReadAllText("./GenerateStory.yaml");
// Convert to a prompt template config
PromptTemplateConfig templateConfig = KernelFunctionYaml.ToPromptTemplateConfig(generateStoryYaml);

// Create agent with Instructions, Name and Description
// provided by the template config.
ChatCompletionAgent agent =
    new(templateConfig)
    {
        Kernel = this.CreateKernelWithChatCompletion(),
        // Provide default values for template parameters
        Arguments = new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        }
    };
import yaml

from semantic_kernel.prompt_template import PromptTemplateConfig

# Read the YAML file
with open("./GenerateStory.yaml", "r", encoding="utf-8") as file:
    generate_story_yaml = file.read()

# Parse the YAML content
data = yaml.safe_load(generate_story_yaml)

# Use the parsed data to create a PromptTemplateConfig object
prompt_template_config = PromptTemplateConfig(**data)

agent = ChatCompletionAgent(
    service=AzureChatCompletion(), # or other supported AI services
    prompt_template_config=prompt_template_config,
    arguments=KernelArguments(topic="Dog", length="3"),
)

A funkció jelenleg nem érhető el a Javában.

Sablonértékek felülírása közvetlen meghíváshoz

Amikor közvetlenül meghív egy ügynököt, az ügynök paraméterei szükség szerint felülírhatók. Ez lehetővé teszi az ügynök viselkedésének nagyobb ellenőrzését és testreszabását adott feladatok során, lehetővé téve, hogy menet közben módosítsa az utasításait vagy beállításait az adott követelményeknek megfelelően.

// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;

ChatCompletionAgent agent =
    new()
    {
        Kernel = kernel,
        Name = "StoryTeller",
        Instructions = "Tell a story about {{$topic}} that is {{$length}} sentences long.",
        Arguments = new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        }
    };

KernelArguments overrideArguments =
    new()
    {
        { "topic", "Cat" },
        { "length", "3" },
    });

// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync([], options: new() { KernelArguments = overrideArguments }))
{
  // Process agent response(s)...
}
agent = ChatCompletionAgent(
    service=AzureChatCompletion(),
    name="StoryTeller",
    instructions="Tell a story about {{$topic}} that is {{$length}} sentences long.",
    arguments=KernelArguments(topic="Dog", length="2"),
)

# Create a thread to maintain the conversation state
# If no threaded is created, a thread will be returned
# with the initial response
thread = None

override_arguments = KernelArguments(topic="Cat", length="3")

# Two ways to get a response from the agent

# Get the response which returns a ChatMessageContent directly
response = await agent.get_response(messages="user input", arguments=override_arguments)
thread = response.thread

# or use the invoke method to return an AsyncIterable of ChatMessageContent
async for response in agent.invoke(messages="user input", arguments=override_arguments):
    # process agent response(s)...
    thread = response.thread

A funkció jelenleg nem érhető el a Javában.

Útmutató

Az ügynök létrehozásának teljes körű példájáért egy prompt-sablonból, lásd:

Következő lépések