Bagikan melalui


Mengonfigurasi Agen dengan Plugin Kernel Semantik

Penting

Fitur ini sedang dalam tahap kandidat rilis. Fitur pada tahap ini hampir lengkap dan umumnya stabil, meskipun mungkin mengalami penyempurnaan atau pengoptimalan kecil sebelum mencapai ketersediaan umum penuh.

Fungsi dan Plugin dalam Semantic Kernel

Pemanggilan fungsi adalah alat yang kuat yang memungkinkan pengembang untuk menambahkan fungsionalitas kustom dan memperluas kemampuan aplikasi AI. Arsitektur Plugin Semantic Kernel menawarkan kerangka kerja yang fleksibel untuk mendukung Pemanggilan Fungsi. Untuk sebuah Agent, mengintegrasikan Plugins dan Function Calling dibangun atas fitur dasar Semantic Kernel ini.

Setelah dikonfigurasi, agen akan memilih kapan dan bagaimana memanggil fungsi yang tersedia, seperti yang akan dilakukan dalam penggunaan apa pun di luar Agent Framework.

Petunjuk / Saran

Referensi API:

Menambahkan Plugin ke Agen

Setiap Plugin yang tersedia untuk sebuah Agent dikelola dalam instance Kernel yang sesuai. Pengaturan ini memungkinkan setiap Agent untuk mengakses fungsionalitas yang berbeda-beda berdasarkan peran spesifiknya.

Plugin dapat ditambahkan ke Kernel baik sebelum atau setelah Agent dibuat. Proses menginisialisasi Plugin mengikuti pola yang sama yang digunakan untuk implementasi Semantic Kernel apa pun, memungkinkan konsistensi dan kemudahan penggunaan dalam mengelola kapabilitas AI.

Nota

Untuk ChatCompletionAgent, mode pemanggilan fungsi harus diaktifkan secara eksplisit. OpenAIAssistant agen selalu berbasis pada pemanggilan fungsi otomatis.

// Factory method to produce an agent with a specific role.
// Could be incorporated into DI initialization.
ChatCompletionAgent CreateSpecificAgent(Kernel kernel, string credentials)
{
    // Clone kernel instance to allow for agent specific plug-in definition
    Kernel agentKernel = kernel.Clone();

    // Import plug-in from type
    agentKernel.ImportPluginFromType<StatelessPlugin>();

    // Import plug-in from object
    agentKernel.ImportPluginFromObject(new StatefulPlugin(credentials));

    // Create the agent
    return
        new ChatCompletionAgent()
        {
            Name = "<agent name>",
            Instructions = "<agent instructions>",
            Kernel = agentKernel,
            Arguments = new KernelArguments(
                new OpenAIPromptExecutionSettings()
                {
                    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
                })
        };
}

Ada dua cara untuk membuat ChatCompletionAgent dengan plugin.

Metode 1: Tentukan Plugin melalui Konstruktor

Anda dapat langsung mengoper daftar plugin ke konstruktor:

from semantic_kernel.agents import ChatCompletionAgent

# Create the Chat Completion Agent instance by specifying a list of plugins
agent = ChatCompletionAgent(
    service=AzureChatCompletion(),
    instructions="<instructions>",
    plugins=[SamplePlugin()]
)

Petunjuk / Saran

Secara default, pemanggilan fungsi otomatis diaktifkan. Untuk menonaktifkannya, atur argumen function_choice_behavior ke function_choice_behavior=FunctionChoiceBehavior.Auto(auto_invoke=False) dalam konstruktor. Dengan pengaturan ini, plugin disiarkan ke model, tetapi tidak dipanggil secara otomatis. Jika pengaturan eksekusi menentukan service_id atau ai_model_id yang sama dengan konfigurasi layanan AI, perilaku panggilan fungsi yang ditentukan dalam pengaturan eksekusi (melalui KernelArguments) akan lebih diutamakan daripada perilaku pilihan fungsi yang ditetapkan dalam konstruktor.

Metode 2: Konfigurasikan Kernel Secara Manual

Jika kernel tidak disediakan melalui konstruktor, maka satu kernel akan otomatis dibuat selama validasi model. Plugin yang dimasukkan akan diprioritaskan dan ditambahkan ke kernel. Untuk kontrol yang lebih terperinci terhadap keadaan kernel, ikuti langkah-langkah ini:

from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, AzureChatPromptExecutionSettings
from semantic_kernel.functions import KernelFunctionFromPrompt
from semantic_kernel.kernel import Kernel

# Create the instance of the Kernel
kernel = Kernel()

# Add the chat completion service to the Kernel
kernel.add_service(AzureChatCompletion())

# Get the AI Service settings
settings = kernel.get_prompt_execution_settings_from_service_id()

# Configure the function choice behavior to auto invoke kernel functions
settings.function_choice_behavior = FunctionChoiceBehavior.Auto()

# Add the Plugin to the Kernel
kernel.add_plugin(SamplePlugin(), plugin_name="<plugin name>")

# Create the agent
agent = ChatCompletionAgent(
    kernel=kernel,
    name=<agent name>,
    instructions=<agent instructions>,
    arguments=KernelArguments(settings=settings),
)

Petunjuk / Saran

Jika service_id tidak ditentukan saat menambahkan layanan ke kernel, maka secara default akan menjadi default. Saat mengonfigurasi beberapa layanan AI pada kernel, disarankan untuk membedakannya menggunakan argumen service_id. Ini memungkinkan Anda untuk mengambil pengaturan eksekusi untuk service_id tertentu dan mengaitkan pengaturan tersebut dengan layanan yang diinginkan.

var chatCompletion = OpenAIChatCompletion.builder()
    .withModelId("<model-id>")
    .withOpenAIAsyncClient(new OpenAIClientBuilder()
            .credential(new AzureKeyCredential("<api-key>"))
            .endpoint("<endpoint>")
            .buildAsyncClient())
    .build();

Kernel kernel = Kernel.builder()
    .withAIService(ChatCompletionService.class, chatCompletion)
    .withPlugin(KernelPluginFactory.createFromObject(new SamplePlugin(), "<plugin name>"))
    .build();

var agent = ChatCompletionAgent.builder()
    .withKernel(kernel)
    .withName("<agent name>")
    .withInstructions("<agent instructions>")
    .build();

Menambahkan Fungsi ke Agen

Sebuah Plugin adalah pendekatan yang paling umum untuk mengonfigurasi Panggilan Fungsi. Namun, fungsi individu juga dapat disediakan secara independen termasuk fungsi prompt.

// Factory method to product an agent with a specific role.
// Could be incorporated into DI initialization.
ChatCompletionAgent CreateSpecificAgent(Kernel kernel)
{
    // Clone kernel instance to allow for agent specific plug-in definition
    Kernel agentKernel = kernel.Clone();

    // Create plug-in from a static function
    var functionFromMethod = agentKernel.CreateFunctionFromMethod(StatelessPlugin.AStaticMethod);

    // Create plug-in from a prompt
    var functionFromPrompt = agentKernel.CreateFunctionFromPrompt("<your prompt instructions>");

    // Add to the kernel
    agentKernel.ImportPluginFromFunctions("my_plugin", [functionFromMethod, functionFromPrompt]);

    // Create the agent
    return
        new ChatCompletionAgent()
        {
            Name = "<agent name>",
            Instructions = "<agent instructions>",
            Kernel = agentKernel,
            Arguments = new KernelArguments(
                new OpenAIPromptExecutionSettings()
                {
                    FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
                })
        };
}
from semantic_kernel.agents import ChatCompletionAgent
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, AzureChatPromptExecutionSettings
from semantic_kernel.functions import KernelFunctionFromPrompt
from semantic_kernel.kernel import Kernel

# Create the instance of the Kernel
kernel = Kernel()

# Add the chat completion service to the Kernel
kernel.add_service(AzureChatCompletion())

# Create the AI Service settings
settings = AzureChatPromptExecutionSettings()

# Configure the function choice behavior to auto invoke kernel functions
settings.function_choice_behavior = FunctionChoiceBehavior.Auto()

# Add the Plugin to the Kernel
kernel.add_function(
    plugin_name="<plugin_name>",
    function=KernelFunctionFromPrompt(
        function_name="<function_name>",
        prompt="<your prompt instructions>",
    )
)

# Create the agent
agent = ChatCompletionAgent(
    kernel=kernel,
    name=<agent name>,
    instructions=<agent instructions>,
    arguments=KernelArguments(settings=settings),
)
var chatCompletion = OpenAIChatCompletion.builder()
    .withModelId("<model-id>")
    .withOpenAIAsyncClient(new OpenAIClientBuilder()
            .credential(new AzureKeyCredential("<api-key>"))
            .endpoint("<endpoint>")
            .buildAsyncClient())
    .build();

// Create function from method
var functionFromMethod = KernelFunction.createFromMethod(SamplePlugin.class.getMethod("method"), new SamplePlugin());

// Create function from prompt
var functionFromPrompt = KernelFunction.createFromPrompt("<your prompt instructions>");

// Create the kernel with a plugin from the two functions
Kernel kernel = Kernel.builder()
    .withAIService(ChatCompletionService.class, chatCompletion)
    .withPlugin(KernelPluginFactory.createFromFunctions("SamplePlugin", List.of(functionFromMethod, functionFromPrompt)))
    .build();

InvocationContext invocationContext = InvocationContext.builder()
    .withFunctionChoiceBehavior(FunctionChoiceBehavior.auto(true))
    .build();

// Create the agent
var agent = ChatCompletionAgent.builder()
    .withKernel(kernel)
    .withName("<agent name>")
    .withInstructions("<agent instructions>")
    .withInvocationContext(invocationContext)
    .build();

Pembatasan untuk Pemanggilan Fungsi Agen

Ketika langsung memanggil aChatCompletionAgent, semua Perilaku Pilihan Fungsi didukung. Namun, saat menggunakan OpenAIAssistant, hanya Panggilan Fungsi Otomatis yang tersedia saat ini.

Panduan

Untuk contoh menyeluruh dalam menggunakan pemanggilan fungsi, lihat:

Langkah selanjutnya