Erstellen eines Agents aus einer Semantischen Kernel-Vorlage
Wichtig
Dieses Feature befindet sich in der Veröffentlichungskandidatenphase. Features in dieser Phase sind nahezu vollständig und allgemein stabil, obwohl sie kleinere Verfeinerungen oder Optimierungen durchlaufen können, bevor sie die vollständige allgemeine Verfügbarkeit erreichen.
Promptvorlagen im semantischen Kernel
Die Rolle eines Agents wird in erster Linie durch die empfangenen Anweisungen geprägt, die sein Verhalten und seine Aktionen diktieren. Ähnlich wie beim Aufrufen einer Eingabeaufforderung können die Anweisungen eines Kernel
Agents vorlagenbasierte Parameter enthalten , sowohl Werte als auch Funktionen, die während der Ausführung dynamisch ersetzt werden. Dies ermöglicht flexible, kontextabhängige Antworten, sodass der Agent seine Ausgabe basierend auf Echtzeiteingaben anpassen kann.
Darüber hinaus kann ein Agent direkt mithilfe einer Eingabeaufforderungsvorlagenkonfiguration konfiguriert werden, sodass Entwickler eine strukturierte und wiederverwendbare Möglichkeit zum Definieren des Verhaltens erhalten. Dieser Ansatz bietet ein leistungsfähiges Tool zum Standardisieren und Anpassen von Agentenanweisungen, um Konsistenz in verschiedenen Anwendungsfällen zu gewährleisten und gleichzeitig die dynamische Anpassungsfähigkeit aufrechtzuerhalten.
Verwandte APIs:
Agents sind derzeit in Java nicht verfügbar.
Agent-Anweisungen als Vorlage
Das Erstellen eines Agents mit Vorlagenparametern bietet eine größere Flexibilität, indem seine Anweisungen basierend auf verschiedenen Szenarien oder Anforderungen einfach angepasst werden können. Mit diesem Ansatz kann das Verhalten des Agents angepasst werden, indem bestimmte Werte oder Funktionen in die Vorlage ersetzt werden, sodass er an eine Vielzahl von Aufgaben oder Kontexten angepasst werden kann. Durch die Nutzung von Vorlagenparametern können Entwickler vielseitigere Agents entwerfen, die für vielfältige Anwendungsfälle konfiguriert werden können, ohne die Kernlogik ändern zu müssen.
Chat-Vervollständigungs-Agent
// 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"),
)
Agents sind derzeit in Java nicht verfügbar.
OpenAI Assistenz-Agent
Anweisungen mit Vorlagen sind besonders effektiv beim Arbeiten mit einem OpenAIAssistantAgent
. Mit diesem Ansatz kann eine einzelne Assistentendefinition mehrmals erstellt und wiederverwendet werden, jedes Mal mit unterschiedlichen Parameterwerten, die auf bestimmte Aufgaben oder Kontexte zugeschnitten sind. Dies ermöglicht eine effizientere Einrichtung, sodass dasselbe Assistentenframework eine vielzahl von Szenarien behandeln kann und gleichzeitig die Konsistenz im Kernverhalten aufrecht erhält.
// 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"),
)
Agents sind derzeit in Java nicht verfügbar.
Agentdefinition aus einer Prompt-Vorlage
Die gleiche Eingabeaufforderungsvorlagenkonfiguration, die zum Erstellen einer Kernel-Eingabeaufforderungsfunktion verwendet wird, kann auch verwendet werden, um einen Agent zu definieren. Dies ermöglicht einen einheitlichen Ansatz beim Verwalten von Eingabeaufforderungen und Agenten, wodurch Konsistenz und Wiederverwendung über verschiedene Komponenten hinweg gefördert werden. Durch das Externalisieren von Agentdefinitionen aus der Codebasis vereinfacht diese Methode die Verwaltung mehrerer Agents, wodurch sie einfacher aktualisiert und verwaltet werden können, ohne dass Änderungen an der zugrunde liegenden Logik erforderlich sind. Diese Trennung verbessert auch die Flexibilität, sodass Entwickler das Agentverhalten ändern oder neue Agents einführen können, indem Sie einfach die Konfiguration aktualisieren, anstatt den Code selbst anzupassen.
YAML-Vorlage
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
Agent-Initialisierung
// 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"),
)
Agents sind derzeit in Java nicht verfügbar.
Überschreiben von Vorlagenwerten für den direkten Aufruf
Wenn Sie einen Agent direkt aufrufen, ohne AgentChat
zu verwenden, können die Parameter des Agents bei Bedarf außer Kraft gesetzt werden. Dies ermöglicht eine bessere Kontrolle und Anpassung des Verhaltens des Agents während bestimmter Aufgaben, sodass Sie die Anweisungen oder Einstellungen automatisch entsprechend bestimmten Anforderungen ändern können.
// 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)...
Derzeit sind Agenten in Java nicht verfügbar.
Vorgehensweise
Ein End-to-End-Beispiel zum Erstellen eines Agents aus einer Aufforderungsvorlagefinden Sie unter: