Freigeben über


Erstellen eines Agents aus einer Semantischen Kernel-Vorlage

Warnung

Das Semantische Kernel-Agent-Framework befindet sich in der Vorschau und unterliegt Änderungen.

Eingabeaufforderungsvorlagen 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 KernelAgents 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.

Bald verfügbar

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

Demnächst

Agents sind derzeit in Java nicht verfügbar.

Open AI Assistant Agent

Vorlagenanweisungen sind besonders leistungsfähig beim Arbeiten mit einem Open AI Assistant Agent. 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
OpenAIAssistantAgent agent = 
    await OpenAIAssistantAgent.RetrieveAsync(
        this.GetClientProvider(),
        "<stored agent-identifier>",
        new Kernel(),
        new KernelArguments()
        {
            { "topic", "Dog" },
            { "length", "3" },
        });

Bald verfügbar

Agents sind derzeit in Java nicht verfügbar.

Agentdefinition aus einer Eingabeaufforderungsvorlage

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 Agents, wodurch Konsistenz und Wiederverwendung in verschiedenen Komponenten 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

AgentInitialisierung

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

Bald verfügbar

Agents sind derzeit in Java nicht verfügbar.

Überschreiben von Vorlagenwerten für direkten Aufruf

Wenn Sie einen Agent direkt aufrufen, ohne den Agent-Chat zu verwenden, können die Parameter des Agents bei Bedarf überschrieben 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)...
}

Bald verfügbar

Agents sind derzeit in Java nicht verfügbar.

Vorgehensweise

Ein End-to-End-Beispiel zum Erstellen eines Agents aus einer Pmompt-Vorlage finden Sie unter: