Ügynökök konfigurálása szemantikai mag bővítményekkel

Fontos

Ez a funkció a kiadásra jelölt fázisban van. A funkciók ebben a szakaszban szinte teljesek és általában stabilak, bár kisebb finomításokon vagy optimalizálásokon eshetnek át, mielőtt elérnék a teljes általános rendelkezésre állást.

Függvények és beépülő modulok a Szemantic Kernelben

A függvényhívás egy hatékony eszköz, amely lehetővé teszi a fejlesztők számára, hogy egyéni funkciókat adjanak hozzá, és bővítsék az AI-alkalmazások képességeit. A Szemantic Kernel beépülő modul architektúrája rugalmas keretrendszert kínál a függvényhívás támogatásához. AgentA beépülő modulok és függvényhívások integrálása erre az alapvető szemantikai kernelfunkcióra épül.

A konfigurálás után az ügynök kiválasztja, hogy mikor és hogyan hívjon meg egy elérhető függvényt, ahogyan bármely más esetben is tenné a Agent Framework kívül.

Bővítmények hozzáadása az ügynökhöz

Bármely beépülő modul, amely elérhető egy Agent számára, a saját Kernel példányán belül van kezelve. Ez a beállítás lehetővé teszi, hogy mindegyik Agent különböző funkciókhoz férhessen hozzá az adott szerepköre alapján.

A beépülő modulokat a Kernel létrehozása előtt vagy után is hozzá lehet adni Agent. A beépülő modulok inicializálásának folyamata ugyanazokat a mintákat követi, mint bármely Szemantikus Kernel-implementáció esetében, így konzisztenciát és egyszerű használatot tesz lehetővé az AI-képességek kezelésében.

Megjegyzés:

A függvényhívási ChatCompletionAgentmódot explicit módon kell engedélyezni. Az OpenAIAssistant ügynök működése mindig automatikus függvényhíváson alapul.

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

Kétféleképpen hozhat létre egy ChatCompletionAgent beépülő modulokkal.

1. módszer: Beépülő modulok megadása a konstruktoron keresztül

Közvetlenül továbbíthatja a beépülő modulok listáját a konstruktornak:

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

Jótanács

Alapértelmezés szerint engedélyezve van az automatikus függvényhívás. A letiltásához állítsa be az function_choice_behavior argumentumot function_choice_behavior=FunctionChoiceBehavior.Auto(auto_invoke=False) a konstruktorban. Ezzel a beállítással a beépülő modulok a modellnek lesznek továbbítva, de nem lesznek automatikusan meghívva. Ha a végrehajtási beállítások ugyanazt a service_id vagy ai_model_id adják meg, mint az AI-szolgáltatás konfigurációja, a végrehajtási beállításokban (KernelArgumentskeresztül) meghatározott függvényhívási viselkedés elsőbbséget élvez a konstruktorban beállított függvényválasztási viselkedéssel szemben.

2. módszer: A kernel manuális konfigurálása

Ha a konstruktor nem biztosít kernelt, a rendszer automatikusan létrehoz egyet a modell érvényesítése során. Az átadott beépülő modulok elsőbbséget élveznek, és hozzáadódnak a kernelhez. A kernel állapotának részletesebb szabályozásához kövesse az alábbi lépéseket:

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

Jótanács

Ha nincs service_id megadva szolgáltatás a kernelhez való hozzáadásakor, az alapértelmezés szerint a következő lesz default: . Ha több AI-szolgáltatást konfigurál a kernelen, ajánlott megkülönböztetni őket az service_id argumentum használatával. Ez lehetővé teszi, hogy lekérje egy adott service_id szolgáltatás végrehajtási beállításait, és ezeket a beállításokat a kívánt szolgáltatáshoz kösse.

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

Függvények hozzáadása egy ügynökhöz

A beépülő modul a függvényhívás konfigurálásának leggyakoribb módja. Az egyes függvények azonban egymástól függetlenül is megadhatóak, beleértve a parancssori függvényeket is.

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

Az ügynök-függvényhívás korlátozásai

Ha közvetlenül invokált egy függvénytChatCompletionAgent, az összes függvényválasztási viselkedés támogatott. Egy OpenAIAssistant használata esetén azonban jelenleg csak az automatikus függvényhívás érhető el.

Útmutató

A függvényhívások használatának teljes példájáért lásd:

Következő lépések