Sdílet prostřednictvím


Vytvoření agenta ze šablony sémantického jádra

Důležité

Tato funkce je ve verzi kandidáta na vydání. Funkce v této fázi jsou téměř dokončené a obecně stabilní, i když mohou před dosažením úplné obecné dostupnosti projít menší vylepšení nebo optimalizace.

Šablony příkazů v sémantickém jádru

Role agenta je primárně tvarována pokyny, které obdrží, což určuje jeho chování a akce. Podobně jako při vyvolání Kernelvýzvy mohou pokyny agenta obsahovat parametry šablony – hodnoty i funkce – které se dynamicky nahrazují během provádění. To umožňuje flexibilní odpovědi pracující s kontextem, což agentu umožňuje upravit svůj výstup na základě vstupu v reálném čase.

Kromě toho je možné agenta nakonfigurovat přímo pomocí konfigurace šablony výzvy a poskytnout vývojářům strukturovaný a opakovaně použitelný způsob, jak definovat jeho chování. Tento přístup nabízí výkonný nástroj pro standardizaci a přizpůsobení pokynů agenta, který zajišťuje konzistenci v různých případech použití a přitom zachovává dynamickou adaptabilnost.

Agenti momentálně nejsou v Javě k dispozici.

Pokyny agenta jako šablona

Vytvoření agenta s parametry šablony poskytuje větší flexibilitu tím, že umožňuje snadné přizpůsobení pokynů na základě různých scénářů nebo požadavků. Tento přístup umožňuje přizpůsobit chování agenta nahrazením konkrétních hodnot nebo funkcí do šablony a přizpůsobit se tak různým úlohám nebo kontextům. Díky využití parametrů šablon mohou vývojáři navrhovat všestrannější agenty, které je možné nakonfigurovat tak, aby splňovaly různé případy použití, aniž by museli upravovat základní logiku.

Agent pro dokončování chatu

// 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" },
        }
    };
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"),
)

Agenti momentálně nejsou v Javě k dispozici.

OpenAI Asistent Agent

Šablonované instrukce jsou zvláště výkonné při práci s OpenAIAssistantAgent. S tímto přístupem je možné vytvořit a opakovaně použít jednu definici asistenta, a to pokaždé, když mají různé hodnoty parametrů přizpůsobené konkrétním úkolům nebo kontextům. To umožňuje efektivnější nastavení, což umožňuje stejné rozhraní asistentů zpracovávat širokou škálu scénářů při zachování konzistence v základním chování.

// 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"),
)

Agenti momentálně nejsou v Javě k dispozici.

Definice agenta ze šablony podnětu

Stejnou konfiguraci šablony podnětu použitou k vytvoření funkce výzvy jádra lze také využít k definování agenta. To umožňuje jednotný přístup při správě výzev i agentů, což podporuje konzistenci a opakované použití napříč různými komponentami. Díky externalizaci definic agentů ze základu kódu tato metoda zjednodušuje správu více agentů, což usnadňuje aktualizaci a údržbu bez nutnosti změn v základní logice. Toto oddělení také zvyšuje flexibilitu a umožňuje vývojářům upravovat chování agenta nebo zavádět nové agenty jednoduše aktualizací konfigurace, nikoli úpravou samotného kódu.

Šablona YAML

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

Inicializace agenta

// 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"),
)

Agenti momentálně nejsou v Javě k dispozici.

Přepsání hodnot šablony pro přímé vyvolání

Při přímém vyvolání agenta bez použití AgentChatje možné parametry agenta podle potřeby přepsat. To umožňuje větší kontrolu a přizpůsobení chování agenta během konkrétních úloh, což vám umožní upravit jeho pokyny nebo nastavení za běhu tak, aby vyhovovalo konkrétním požadavkům.

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

// Create a ChatHistory object to maintain the conversation state.
ChatHistory chat = [];

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

// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(chat, 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 chat history to maintain the conversation state
chat = ChatHistory()

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(chat, arguments=override_arguments)

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

Agenti momentálně nejsou v Javě k dispozici.

Postupy

Kompletní příklad vytvoření agenta z šablony příkazového řádkunajdete tady: