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
Java paketine erişme yönergelerine SemanticKernel
buradan ulaşabilirsiniz. Şu kadar kolaydır:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-bom</artifactId>
<version>${sk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-api</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.semantic-kernel</groupId>
<artifactId>semantickernel-aiservices-openai</artifactId>
</dependency>
</dependencies>
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.
Başlamak için şu adımları izleyin:
Başlamak için şu adımları izleyin:
İ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()
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};
// 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.utils.logging import setup_logging
from semantic_kernel.functions import kernel_function
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.connectors.ai.function_choice_behavior import FunctionChoiceBehavior
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
chat_completion = AzureChatCompletion(
deployment_name="your_models_deployment_name",
api_key="your_api_key",
base_url="your_base_url",
)
kernel.add_service(chat_completion)
# Set the logging level for semantic_kernel.kernel to DEBUG.
setup_logging()
logging.getLogger("kernel").setLevel(logging.DEBUG)
# Add a plugin (the LightsPlugin class is defined below)
kernel.add_plugin(
LightsPlugin(),
plugin_name="Lights",
)
# Enable planning
execution_settings = AzureChatPromptExecutionSettings()
execution_settings.function_call_behavior = FunctionChoiceBehavior.Auto()
# 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_content(
chat_history=history,
settings=execution_settings,
kernel=kernel,
)
# 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())
OpenAIAsyncClient client = new OpenAIClientBuilder()
.credential(new AzureKeyCredential(AZURE_CLIENT_KEY))
.endpoint(CLIENT_ENDPOINT)
.buildAsyncClient();
// Import the LightsPlugin
KernelPlugin lightPlugin = KernelPluginFactory.createFromObject(new LightsPlugin(),
"LightsPlugin");
// Create your AI service client
ChatCompletionService chatCompletionService = OpenAIChatCompletion.builder()
.withModelId(MODEL_ID)
.withOpenAIAsyncClient(client)
.build();
// Create a kernel with Azure OpenAI chat completion and plugin
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
// Add a converter to the kernel to show it how to serialise LightModel objects into a prompt
ContextVariableTypes
.addGlobalConverter(
ContextVariableTypeConverter.builder(LightModel.class)
.toPromptString(new Gson()::toJson)
.build());
// Enable planning
InvocationContext invocationContext = new InvocationContext.Builder()
.withReturnMode(InvocationReturnMode.LAST_MESSAGE_ONLY)
.withToolCallBehavior(ToolCallBehavior.allowAllKernelFunctions(true))
.build();
// Create a history to store the conversation
ChatHistory history = new ChatHistory();
// Initiate a back-and-forth chat
Scanner scanner = new Scanner(System.in);
String userInput;
do {
// Collect user input
System.out.print("User > ");
userInput = scanner.nextLine();
// Add user input
history.addUserMessage(userInput);
// Prompt AI for response to users input
List<ChatMessageContent<?>> results = chatCompletionService
.getChatMessageContentsAsync(history, kernel, invocationContext)
.block();
for (ChatMessageContent<?> result : results) {
// Print the results
if (result.getAuthorRole() == AuthorRole.ASSISTANT && result.getContent() != null) {
System.out.println("Assistant > " + result);
}
// Add the message from the agent to the chat history
history.addMessage(result);
}
} while (userInput != null && !userInput.isEmpty());
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.
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.
- Paketleri içeri aktarma
- Yapay zeka hizmetleri ekleme
- Kurumsal bileşenler ::: zone-end
- Çekirdeği oluşturma
- Bellek ekleme (atlandı)
- Eklenti ekleme
- Çekirdek bağımsız değişkenleri oluşturma (atlandı)
- komut istemi oluşturma (atlandı)
- Planlama
- Ç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_choice_behavior import FunctionChoiceBehavior
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,
)
import com.microsoft.semantickernel.Kernel;
import com.microsoft.semantickernel.aiservices.openai.chatcompletion.OpenAIChatCompletion;
import com.microsoft.semantickernel.contextvariables.ContextVariableTypeConverter;
import com.microsoft.semantickernel.contextvariables.ContextVariableTypes;
import com.microsoft.semantickernel.orchestration.InvocationContext;
import com.microsoft.semantickernel.orchestration.InvocationReturnMode;
import com.microsoft.semantickernel.orchestration.ToolCallBehavior;
import com.microsoft.semantickernel.plugin.KernelPlugin;
import com.microsoft.semantickernel.plugin.KernelPluginFactory;
import com.microsoft.semantickernel.services.chatcompletion.AuthorRole;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
import com.microsoft.semantickernel.services.chatcompletion.ChatHistory;
import com.microsoft.semantickernel.services.chatcompletion.ChatMessageContent;
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",
))
// Create your AI service client
ChatCompletionService chatCompletionService = OpenAIChatCompletion.builder()
.withModelId(MODEL_ID)
.withOpenAIAsyncClient(client)
.build();
// Create a kernel with Azure OpenAI chat completion and plugin
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
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)
// Create a kernel with Azure OpenAI chat completion and plugin
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
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...
- Yapay zeka aracısını ampulün durumunu sağlayarak Artırılmış Nesil (RAG) alma
- 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
public class LightsPlugin {
// Mock data for the lights
private final Map<Integer, LightModel> lights = new HashMap<>();
public LightsPlugin() {
lights.put(1, new LightModel(1, "Table Lamp", false));
lights.put(2, new LightModel(2, "Porch light", false));
lights.put(3, new LightModel(3, "Chandelier", true));
}
@DefineKernelFunction(name = "get_lights", description = "Gets a list of lights and their current state")
public List<LightModel> getLights() {
System.out.println("Getting lights");
return new ArrayList<>(lights.values());
}
@DefineKernelFunction(name = "change_state", description = "Changes the state of the light")
public LightModel changeState(
@KernelFunctionParameter(name = "id", description = "The ID of the light to change") int id,
@KernelFunctionParameter(name = "isOn", description = "The new state of the light") boolean isOn) {
System.out.println("Changing light " + id + " " + isOn);
if (!lights.containsKey(id)) {
throw new IllegalArgumentException("Light not found");
}
lights.get(id).setIsOn(isOn);
return lights.get(id);
}
}
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",
)
// Import the LightsPlugin
KernelPlugin lightPlugin = KernelPluginFactory.createFromObject(new LightsPlugin(),
"LightsPlugin");
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()
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};
execution_settings = AzureChatPromptExecutionSettings()
execution_settings.function_call_behavior = FunctionChoiceBehavior.Auto()
// Enable planning
InvocationContext invocationContext = new InvocationContext.Builder()
.withReturnMode(InvocationReturnMode.LAST_MESSAGE_ONLY)
.withToolCallBehavior(ToolCallBehavior.allowAllKernelFunctions(true))
.build();
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]
userInput = scanner.nextLine();
// Add user input
history.addUserMessage(userInput);
// Prompt AI for response to users input
List<ChatMessageContent<?>> results = chatCompletionService
.getChatMessageContentsAsync(history, kernel, invocationContext)
.block();
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.