Aracılığıyla paylaş


Semantik Çekirdeği kullanmaya başlama

Yalnızca birkaç adımda Python, .NET veya Java'da Anlam Çekirdeği ile ilk yapay zeka aracınızı oluşturabilirsiniz. Bu kılavuzda nasıl...

  • Gerekli paketleri yükleme
  • Yapay zeka ile ileri geri konuşma oluşturma
  • Yapay zeka aracısına kodunuzu çalıştırma olanağı verme
  • Yapay zekanın plan oluşturmasını anında izleyin

SDK'yi yükleme

Semantik Çekirdeğin kullanılabilir birkaç NuGet paketi vardır. Ancak çoğu senaryoda genellikle yalnızca öğesine ihtiyacınız vardır Microsoft.SemanticKernel.

Aşağıdaki komutu kullanarak yükleyebilirsiniz:

dotnet add package Microsoft.SemanticKernel

Nuget paketlerinin tam listesi için lütfen desteklenen diller makalesine bakın.

Python paketine erişme yönergelerine SemanticKernel buradan ulaşabilirsiniz. Şu kadar kolaydır:

pip install semantic-kernel

Not defterlerini hızlı bir şekilde kullanmaya başlama

Python veya C# geliştiricisiyseniz not defterlerimizi hızlıca kullanmaya başlayabilirsiniz. Bu not defterleri, yapay zeka aracıları oluşturmak için Anlam Çekirdeği'nin nasıl kullanılacağına ilişkin adım adım kılavuzlar sağlar.

Semantik Çekirdek not defterleri

Başlamak için şu adımları izleyin:

  1. Semantik Çekirdek depoyu kopyalama
  2. Visual Studio Code'da depoyu açma
  3. _/python/samples/getting_started adresine gidin
  4. Ortamınızı ayarlamaya ve ilk yapay zeka aracınızı oluşturmaya başlamak için 00-getting-started.ipynb dosyasını açın!

Başlamak için şu adımları izleyin:

  1. Semantik Çekirdek depoyu kopyalama
  2. Visual Studio Code'da depoyu açma
  3. _/dotnet/notebooks konumuna gidin
  4. Ortamınızı ayarlamaya ve ilk yapay zeka aracınızı oluşturmaya başlamak için 00-getting-started.ipynb dosyasını açın!

İlk konsol uygulamanızı yazma

// Import packages
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;

// Create a kernel with Azure OpenAI chat completion
var builder = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);

// Add enterprise components
builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace));

// Build the kernel
Kernel kernel = builder.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

// Add a plugin (the LightsPlugin class is defined below)
kernel.Plugins.AddFromType<LightsPlugin>("Lights");

// Enable planning
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() 
{
    ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};

// Create a history store the conversation
var history = new ChatHistory();

// Initiate a back-and-forth chat
string? userInput;
do {
    // Collect user input
    Console.Write("User > ");
    userInput = Console.ReadLine();

    // Add user input
    history.AddUserMessage(userInput);

    // Get the response from the AI
    var result = await chatCompletionService.GetChatMessageContentAsync(
        history,
        executionSettings: openAIPromptExecutionSettings,
        kernel: kernel);

    // Print the results
    Console.WriteLine("Assistant > " + result);

    // Add the message from the agent to the chat history
    history.AddMessage(result.Role, result.Content ?? string.Empty);
} while (userInput is not null)
import asyncio

from semantic_kernel import Kernel
from semantic_kernel.functions import kernel_function
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.connectors.ai.function_call_behavior import FunctionCallBehavior
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
from semantic_kernel.contents.chat_history import ChatHistory
from semantic_kernel.functions.kernel_arguments import KernelArguments

from semantic_kernel.connectors.ai.open_ai.prompt_execution_settings.azure_chat_prompt_execution_settings import (
    AzureChatPromptExecutionSettings,
)

async def main():
    # Initialize the kernel
    kernel = Kernel()

    # Add Azure OpenAI chat completion
    kernel.add_service(AzureChatCompletion(
        deployment_name="your_models_deployment_name",
        api_key="your_api_key",
        base_url="your_base_url",
    ))

    # Set the logging level for  semantic_kernel.kernel to DEBUG.
    logging.basicConfig(
        format="[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
    )
    logging.getLogger("kernel").setLevel(logging.DEBUG)

    # Add a plugin (the LightsPlugin class is defined below)
    kernel.add_plugin(
        LightsPlugin(),
        plugin_name="Lights",
    )

    chat_completion : AzureChatCompletion = kernel.get_service(type=ChatCompletionClientBase)

    # Enable planning
    execution_settings = AzureChatPromptExecutionSettings(tool_choice="auto")
    execution_settings.function_call_behavior = FunctionCallBehavior.EnableFunctions(auto_invoke=True, filters={})

    # Create a history of the conversation
    history = ChatHistory()

    # Initiate a back-and-forth chat
    userInput = None
    while True:
        # Collect user input
        userInput = input("User > ")

        # Terminate the loop if the user says "exit"
        if userInput == "exit":
            break

        # Add user input to the history
        history.add_user_message(userInput)

        # Get the response from the AI
        result = (await chat_completion.get_chat_message_contents(
            chat_history=history,
            settings=execution_settings,
            kernel=kernel,
            arguments=KernelArguments(),
        ))[0]

        # Print the results
        print("Assistant > " + str(result))

        # Add the message from the agent to the chat history
        history.add_message(result)

# Run the main function
if __name__ == "__main__":
    asyncio.run(main())

Aşağıdaki ileri geri sohbet, konsolda gördüklerinize benzer olmalıdır. Yapay zekanın arka planda eklentiden nasıl yararlandığını göstermek için işlev çağrıları aşağıya eklenmiştir.

Role İleti
🔵Kullanıcı Lütfen ışığı açın
🔴Yardımcı (işlev çağrısı) LightsPlugin.GetState()
🟢Araç off
🔴Yardımcı (işlev çağrısı) LightsPlugin.ChangeState(true)
🟢Araç on
🔴Asistan Işık artık açık

Yukarıdaki kod hakkında daha fazla bilgi edinmek istiyorsanız sonraki bölümde bu kodu ayıracağız.

Kodu anlama

Semantik Çekirdek ile kurumsal uygulamalar oluşturmaya başlamayı kolaylaştırmak için, çekirdek oluşturma ve bunu yapay zeka hizmetleriyle etkileşim kurmak için kullanma sürecinde size yol gösteren bir adım adım oluşturduk.

Semantik Çekirdek Python haritası

Semantik Çekirdek DotNET eşlemesi

Aşağıdaki bölümlerde 1, 2, 3, 4, 6, 9 ve 10 adımlarında ilerleyerek yukarıdaki örneği açacağız. Yapay zeka hizmeti tarafından desteklenen ve kodunuzu çalıştırabilen basit bir aracı oluşturmak için ihtiyacınız olan her şey.

  1. Paketleri içeri aktarma
  2. Yapay zeka hizmetleri ekleme
  3. Kurumsal bileşenler
  4. Çekirdeği oluşturma
  5. Bellek ekleme (atlandı)
  6. Eklenti ekleme
  7. Çekirdek bağımsız değişkenleri oluşturma (atlandı)
  8. komut istemi oluşturma (atlandı)
  9. Planlama
  10. Çağırmak

1) Paketleri içeri aktarma

Bu örnek için ilk olarak aşağıdaki paketleri içeri aktararak başladık:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
import asyncio

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.connectors.ai.function_call_behavior import FunctionCallBehavior
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
from semantic_kernel.contents.chat_history import ChatHistory
from semantic_kernel.functions.kernel_arguments import KernelArguments

from semantic_kernel.connectors.ai.open_ai.prompt_execution_settings.azure_chat_prompt_execution_settings import (
    AzureChatPromptExecutionSettings,
)

2) Yapay zeka hizmetleri ekleme

Daha sonra çekirdeğin en önemli bölümünü ekleyeceğiz: kullanmak istediğiniz yapay zeka hizmetleri. Bu örnekte, çekirdek oluşturucuya bir Azure OpenAI sohbet tamamlama hizmeti ekledik.

Not

Bu örnekte Azure OpenAI kullandık, ancak diğer tüm sohbet tamamlama hizmetini kullanabilirsiniz. Desteklenen hizmetlerin tam listesini görmek için desteklenen diller makalesine bakın. Farklı bir hizmet oluşturma konusunda yardıma ihtiyacınız varsa yapay zeka hizmetleri makalesine bakın. Burada OpenAI veya Azure OpenAI modellerini hizmet olarak kullanma yönergelerini bulabilirsiniz.

// Create kernel
var builder = Kernel.CreateBuilder()
builder.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
# Initialize the kernel
kernel = Kernel()

# Add Azure OpenAI chat completion
kernel.add_service(AzureChatCompletion(
    deployment_name="your_models_deployment_name",
    api_key="your_api_key",
    base_url="your_base_url",
))

3) Kurumsal hizmetler ekleme

Anlam Çekirdeği kullanmanın temel avantajlarından biri, kurumsal sınıf hizmetleri desteklemesidir. Bu örnekte, AI aracısında hata ayıklamaya yardımcı olmak için günlüğe kaydetme hizmetini çekirdeğine ekledik.

builder.Services.AddLogging(services => services.AddConsole().SetMinimumLevel(LogLevel.Trace)); 
import logging

# Set the logging level for  semantic_kernel.kernel to DEBUG.
logging.basicConfig(
    format="[%(asctime)s - %(name)s:%(lineno)d - %(levelname)s] %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)
logging.getLogger("kernel").setLevel(logging.DEBUG)

4) Çekirdeği oluşturma ve hizmetleri alma

Hizmetler eklendikten sonra çekirdeği derleyip daha sonra kullanmak üzere sohbet tamamlama hizmetini alacağız.

Kernel kernel = builder.Build();

// Retrieve the chat completion service
var chatCompletionService = kernel.Services.GetRequiredService<IChatCompletionService>();

Çekirdek yapılandırıldıktan sonra sohbet tamamlama hizmetini daha sonra kullanmak üzere alacağız.

Not

Python'da, çekirdeği açıkça oluşturmanız gerekmez. Bunun yerine, hizmetlere doğrudan çekirdek nesnesinden erişebilirsiniz.

chat_completion : AzureChatCompletion = kernel.get_service(type=ChatCompletionClientBase)

6) Eklenti ekleme

Eklentiler sayesinde yapay zeka aracınıza kodunuzu çalıştırarak dış kaynaklardan bilgi alabilir veya eylemler gerçekleştirebilir. Yukarıdaki örnekte, yapay zeka aracısının bir ampulle etkileşim kurmasını sağlayan bir eklenti ekledik. Aşağıda bu eklentinin nasıl oluşturulacağını göstereceğiz.

Yerel eklenti oluşturma

Aşağıda, yerel eklenti oluşturmanın yeni bir sınıf oluşturmak kadar basit olduğunu görebilirsiniz.

Bu örnekte, ampulü işleyebilen bir eklenti oluşturduk. Bu basit bir örnek olsa da, bu eklenti hızlı bir şekilde her ikisini de nasıl destekleyebileceğinizi gösterir...

  1. Yapay zeka aracısını ampulün durumunu sağlayarak Artırılmış Nesil (RAG) alma
  2. Ayrıca yapay zeka aracısının ampulü açmasına veya kapatmasına izin vererek görev otomasyonu .

Kendi kodunuzda, benzer sonuçlar elde etmek için herhangi bir dış hizmet veya API ile etkileşim kuran bir eklenti oluşturabilirsiniz.

using System.ComponentModel;
using Microsoft.SemanticKernel;

public class LightsPlugin
{
   // Mock data for the lights
   private readonly List<LightModel> lights = new()
   {
      new LightModel { Id = 1, Name = "Table Lamp", IsOn = false },
      new LightModel { Id = 2, Name = "Porch light", IsOn = false },
      new LightModel { Id = 3, Name = "Chandelier", IsOn = true }
   };

   [KernelFunction("get_lights")]
   [Description("Gets a list of lights and their current state")]
   [return: Description("An array of lights")]
   public async Task<List<LightModel>> GetLightsAsync()
   {
      return lights
   }

   [KernelFunction("change_state")]
   [Description("Changes the state of the light")]
   [return: Description("The updated state of the light; will return null if the light does not exist")]
   public async Task<LightModel?> ChangeStateAsync(int id, bool isOn)
   {
      var light = lights.FirstOrDefault(light => light.Id == id);

      if (light == null)
      {
         return null;
      }

      // Update the light with the new state
      light.IsOn = isOn;

      return light;
   }
}

public class LightModel
{
   [JsonPropertyName("id")]
   public int Id { get; set; }

   [JsonPropertyName("name")]
   public string Name { get; set; }

   [JsonPropertyName("is_on")]
   public bool? IsOn { get; set; }
}
from typing import Annotated
from semantic_kernel.functions import kernel_function

class LightsPlugin:
    lights = [
        {"id": 1, "name": "Table Lamp", "is_on": False},
        {"id": 2, "name": "Porch light", "is_on": False},
        {"id": 3, "name": "Chandelier", "is_on": True},
    ]

    @kernel_function(
        name="get_lights",
        description="Gets a list of lights and their current state",
    )
    def get_state(
        self,
    ) -> Annotated[str, "the output is a string"]:
        """Gets a list of lights and their current state."""
        return self.lights

    @kernel_function(
        name="change_state",
        description="Changes the state of the light",
    )
    def change_state(
        self,
        id: int,
        is_on: bool,
    ) -> Annotated[str, "the output is a string"]:
        """Changes the state of the light."""
        for light in self.lights:
            if light["id"] == id:
                light["is_on"] = is_on
                return light
        return None

Eklentiyi çekirdeğine ekleme

Eklentinizi oluşturduktan sonra, yapay zeka aracısının erişebilmesi için eklentiyi çekerde ekleyebilirsiniz. Örnekte, sınıfını LightsPlugin çekirdeğine ekledik.

// Add the plugin to the kernel
kernel.Plugins.AddFromType<LightsPlugin>("Lights");
# Add the plugin to the kernel
kernel.add_plugin(
    LightsPlugin(),
    plugin_name="Lights",
)

9) Planlama

Semantik Çekirdek, planlama sağlamak için çoğu LLM'nin yerel bir özelliği olan işlev çağrısından yararlanıyor. İşlev çağrısıyla, LLM'ler kullanıcının isteğini karşılamak için belirli bir işlevi isteyebilir (veya çağırabilir). AnlamSal Çekirdek daha sonra isteği kod tabanınızdaki uygun işleve sıralar ve sonuçları LLM'ye döndürerek yapay zeka aracısının son yanıtı oluşturmasını sağlar.

Otomatik işlev çağrısını etkinleştirmek için öncelikle Anlam Çekirdeği'nin yapay zeka aracısı bunları istediğinde çekirdekteki işlevleri otomatik olarak çağıracağını bilmesi için uygun yürütme ayarlarını oluşturmamız gerekir.

OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() 
{
    ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};
execution_settings = AzureChatPromptExecutionSettings(tool_choice="auto")
execution_settings.function_call_behavior = FunctionCallBehavior.EnableFunctions(auto_invoke=True, filters={})

10) Çağırma

Son olarak, eklenti ile yapay zeka aracısını çağırırız. Örnek kod, akış dışı yanıt oluşturmayı gösterir, ancak yöntemini kullanarak GetStreamingChatMessageContentAsync bir akış yanıtı da oluşturabilirsiniz.

// Create chat history
var history = new ChatHistory();

// Get the response from the AI
var result = await chatCompletionService.GetChatMessageContentAsync(
    history,
    executionSettings: openAIPromptExecutionSettings,
    kernel: kernel
);
# Create a history of the conversation
history = ChatHistory()

# Get the response from the AI
result = (await chat_completion.get_chat_message_contents(
    chat_history=history,
    settings=execution_settings,
    kernel=kernel,
    arguments=KernelArguments(),
))[0]

Sonraki adımlar

Bu kılavuzda, bir yapay zeka hizmetiyle etkileşim kurabilen ve kodunuzu çalıştırabilen basit bir yapay zeka aracısı oluşturarak Anlam Çekirdeği'ne hızlı bir şekilde başlamayı öğrendiniz. Daha fazla örnek görmek ve daha karmaşık yapay zeka aracıları oluşturmayı öğrenmek için ayrıntılı örneklerimize göz atın.