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í Kernel
vý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.
Související rozhraní API:
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í AgentChat
je 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: