Aracılığıyla paylaş


Aracıları Anlam Çekirdeği Eklentileri ile Yapılandırma

Önemli

Bu özellik, sürüm adayı aşamasındadır. Bu aşamadaki özellikler neredeyse eksiksiz ve genel olarak kararlıdır, ancak genel kullanıma ulaşmadan önce küçük iyileştirmeler veya iyileştirmeler yapabilir.

Anlam Çekirdeğindeki İşlevler ve Eklentiler

İşlev çağrısı, geliştiricilerin özel işlevler eklemesine ve yapay zeka uygulamalarının özelliklerini genişletmesine olanak tanıyan güçlü bir araçtır. Semantik Çekirdek Eklentisi mimarisi , İşlev Çağırmayı desteklemek için esnek bir çerçeve sunar. Agent için Eklentiler ve İşlev Çağrısı entegrasyonu, bu temel Anlam Çekirdeği özelliği üzerine kurulmuştur.

Bir aracı yapılandırıldıktan sonra, Agent Framework dışında herhangi bir kullanımda olduğu gibi, aracı kullanılabilir bir işlevin ne zaman ve nasıl çağrılacağını seçer.

Aracıya Eklenti Ekleme

Herhangi bir için kullanılabilen Agent kendi Kernel örneği içinde yönetilir. Bu kurulum, her Agent birinin kendi rolüne göre farklı işlevlere erişmesini sağlar.

Eklentiler, oluşturulduktan önce veya oluşturulduktan sonra Kernel öğesine eklenebilirAgent. Eklentileri başlatma işlemi, herhangi bir Anlam Çekirdeği uygulaması için kullanılan desenleri izler ve yapay zeka özelliklerini yönetirken tutarlılık ve kullanım kolaylığı sağlar.

Uyarı

Bir ChatCompletionAgent için, işlev çağırma modu açıkça etkinleştirilmelidir. OpenAIAssistant aracısı her zaman otomatik fonksiyon çağırma üzerine temellendirilmiştir.

// 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()
                })
        };
}

Eklentiler kullanarak bir ChatCompletionAgent oluşturmanın iki yolu vardır.

Yöntem 1: Oluşturucu aracılığıyla Eklentileri Belirtme

Eklentilerin listesini oluşturucuya doğrudan geçirebilirsiniz:

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()]
)

Tavsiye

Varsayılan olarak, otomatik işlev çağrısı etkinleştirilir. Bunu devre dışı bırakmak için, oluşturucuda function_choice_behavior bağımsız değişkenini function_choice_behavior=FunctionChoiceBehavior.Auto(auto_invoke=False) olarak ayarlayın. Bu ayar sayesinde eklentiler modele yayınlanmıştır ancak otomatik olarak çağrılmıyor. Yürütme ayarları yapay zeka hizmeti yapılandırmasıyla aynı service_id veya ai_model_id belirtirse, yürütme ayarlarında tanımlanan işlev çağırma davranışı (KernelArgumentsaracılığıyla) oluşturucuda ayarlanan işlev seçimi davranışından önceliklidir.

Yöntem 2: Çekirdeği El ile Yapılandırma

Oluşturucu aracılığıyla çekirdek sağlanmadıysa, model doğrulama sırasında otomatik olarak bir çekirdek oluşturulur. Taşınan tüm eklentiler önceliklidir ve çekirdeğe eklenir. Çekirdeğin durumu üzerinde daha ayrıntılı denetim için şu adımları izleyin:

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

Tavsiye

Çekirdekte service_id bir hizmet eklenirken belirtilmezse, varsayılan olarak defaultolur. Çekirdekte birden çok yapay zeka hizmetini yapılandırırken, bunları service_id argümanını kullanarak ayırt etmek önerilir. Bu, belirli service_id bir hizmetin yürütme ayarlarını almanıza ve bu ayarları istenen hizmete bağlamanıza olanak tanır.

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();

Aracıya İşlev Ekleme

Eklenti, İşlev Çağrısını yapılandırmaya yönelik en yaygın yaklaşımdır. Ancak tek tek işlevler, istem işlevleri de dahil olmak üzere bağımsız olarak sağlanabilir.

// 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();

Aracı İşlev Çağrısı için Sınırlamalar

doğrudan aChatCompletionAgent çağrılırken, tüm İşlev Seçimi Davranışları desteklenir. Ancak OpenAIAssistant kullanırken, şu anda yalnızca Otomatik İşlev Çağrısı kullanılabilir.

Nasıl Yapılır

İşlev çağrısını kullanmaya yönelik uçtan uca bir örnek için bkz:

Sonraki Adımlar