Bagikan melalui


Membuat Agen dari Templat Kernel Semantik

Templat Prompt dalam Kernel Semantik

Peran agen terutama dibentuk oleh instruksi yang diterimanya, yang menentukan perilaku dan tindakannya. Mirip dengan memanggil Kernelperintah, instruksi agen dapat menyertakan parameter yang di-template—baik nilai maupun fungsi—yang diganti secara dinamis selama eksekusi. Ini memungkinkan respons yang fleksibel dan sadar konteks, memungkinkan agen untuk menyesuaikan outputnya berdasarkan input real-time.

Selain itu, agen dapat dikonfigurasi langsung menggunakan Konfigurasi Templat Prompt, yang memberi pengembang cara terstruktur dan dapat digunakan kembali untuk menentukan perilakunya. Pendekatan ini menawarkan alat yang kuat untuk menstandarkan dan menyesuaikan instruksi agen, memastikan konsistensi di berbagai kasus penggunaan sambil tetap mempertahankan kemampuan beradaptasi dinamis.

Fitur saat ini tidak tersedia di Java.

Instruksi Agen sebagai Templat

Membuat agen dengan parameter templat memberikan fleksibilitas yang lebih besar dengan memungkinkan instruksinya mudah disesuaikan berdasarkan skenario atau persyaratan yang berbeda. Pendekatan ini memungkinkan perilaku agen disesuaikan dengan mengganti nilai atau fungsi tertentu ke dalam templat, sehingga dapat disesuaikan dengan berbagai tugas atau konteks. Dengan memanfaatkan parameter templat, pengembang dapat merancang agen yang lebih serbaguna yang dapat dikonfigurasi untuk memenuhi berbagai kasus penggunaan tanpa perlu memodifikasi logika inti.

Asisten Penyelesaian Obrolan

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

Fitur saat ini tidak tersedia di Java.

Agen Asisten OpenAI

Instruksi templat sangat efektif saat bekerja dengan OpenAIAssistantAgent. Dengan pendekatan ini, definisi asisten tunggal dapat dibuat dan digunakan kembali beberapa kali, setiap kali dengan nilai parameter yang berbeda yang disesuaikan dengan tugas atau konteks tertentu. Ini memungkinkan penyiapan yang lebih efisien, memungkinkan kerangka kerja asisten yang sama untuk menangani berbagai skenario sambil mempertahankan konsistensi dalam perilaku intinya.

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

Fitur saat ini tidak tersedia di Java.

Definisi Agen dari Templat Prompt

Konfigurasi Templat Prompt yang sama yang digunakan untuk membuat Fungsi Prompt Kernel juga dapat dimanfaatkan untuk menentukan agen. Ini memungkinkan pendekatan terpadu dalam mengelola prompt dan agen, mempromosikan konsistensi dan pemanfaatan ulang di berbagai komponen. Dengan eksternalisasi definisi agen dari basis kode, metode ini menyederhanakan manajemen beberapa agen, membuatnya lebih mudah diperbarui dan dipertahankan tanpa memerlukan perubahan pada logika yang mendasar. Pemisahan ini juga meningkatkan fleksibilitas, memungkinkan pengembang untuk memodifikasi perilaku agen atau memperkenalkan agen baru hanya dengan memperbarui konfigurasi, daripada menyesuaikan kode itu sendiri.

Templat 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

Inisialisasi Agen

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

Fitur saat ini tidak tersedia di Java.

Mengesampingkan Nilai Templat untuk Pemanggilan Langsung

Ketika memanggil agen secara langsung, parameter agen dapat diubah sesuai kebutuhan. Hal ini memungkinkan kontrol dan penyesuaian perilaku agen yang lebih besar selama tugas tertentu, memungkinkan Anda untuk memodifikasi instruksi atau pengaturannya dengan cepat agar sesuai dengan persyaratan tertentu.

// 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

Fitur saat ini tidak tersedia di Java.

Panduan

Untuk contoh menyeluruh dalam membuat agen dari templat-prompt, lihat:

Langkah selanjutnya