瞭解核心
核心是語意核心的核心元件。 最簡單的是核心是相依性插入容器,可管理執行 AI 應用程式所需的所有服務和外掛程式。 如果您將所有服務和外掛程式提供給核心,AI 會視需要順暢地使用這些服務與外掛程式。
因為核心具有執行原生程式代碼和 AI 服務所需的所有服務和外掛程式,所以語意核心 SDK 內幾乎每個元件都會使用它來為您的代理程式提供動力。 這表示如果您在 Semantic Kernel 中執行任何提示或程式碼,則核心一律可供擷取必要的服務和外掛程式。
這非常強大,因為它表示您身為開發人員的一個位置有一個可以設定且最重要的是監視 AI 代理程式的位置。 例如,當您從核心叫用提示時。 當您這樣做時,核心會...
- 選取最佳的 AI 服務以執行提示。
- 使用提供的提示範本建置提示。
- 將提示傳送至 AI 服務。
- 接收並剖析回應。
- 最後,將 LLM 的回應傳回至您的應用程式。
在整個程式中,您可以建立每個步驟所觸發的事件和中間件。 這表示您可以執行記錄、提供狀態更新給使用者,以及最重要的負責任 AI 等動作。 全部來自單一位置。
在建置核心之前,您應該先瞭解存在的兩種元件類型:
元件 | 描述 | |
---|---|---|
1 | 服務 | 這些是由 AI 服務(例如聊天完成)和其他服務(例如記錄和 HTTP 用戶端)所組成,這些服務是執行應用程式所需的。 這是以 .NET 中的服務提供者模式為模型,因此我們可以支援跨所有語言的相依性擷取。 |
2 | 外掛程式 | 這些是 AI 服務和提示範本用來執行工作的元件。 例如,AI 服務可以使用外掛程式從資料庫擷取數據,或呼叫外部 API 來執行動作。 |
若要開始建立核心,請在檔案頂端匯入必要的套件:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;
接下來,您可以新增服務和外掛程式。 以下是如何新增 Azure OpenAI 聊天完成、記錄器和時間外掛程式的範例。
// Create a kernel with a logger and Azure OpenAI chat completion service
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
builder.Services.AddLogging(c => c.AddDebug().SetMinimumLevel(LogLevel.Trace));
builder.Plugins.AddFromType<TimePlugin>();
Kernel kernel = builder.Build();
匯入必要的套件:
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.core_plugins.time_plugin import TimePlugin
接下來,您可以建立核心。
# Initialize the kernel
kernel = Kernel()
最後,您可以新增必要的服務和外掛程式。 以下是如何新增 Azure OpenAI 聊天完成、記錄器和時間外掛程式的範例。
# Add the Azure OpenAI chat completion service
kernel.add_service(AzureChatCompletion(model_id, endpoint, api_key))
# Add a plugin
kernel.add_plugin(
TimePlugin(),
plugin_name="TimePlugin",
)
核心可以使用 來建置 Kernel.builder()
。 在此,您可以新增必要的 AI 服務和外掛程式。
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
在 C# 中,您可以使用相依性插入來建立核心。 這可藉由建立 ServiceCollection
和 新增服務和外掛程式來完成。 以下是如何使用相依性插入建立核心的範例。
提示
建議您建立核心做為暫時性服務,以便在每次使用之後處置它,因為外掛程式集合是可變的。 核心非常輕量型(因為它只是服務和外掛程式的容器),因此為每個用途建立新的核心並不是效能考慮。
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
// Add the OpenAI chat completion service as a singleton
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional; for OpenAI deployment
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
// Create singletons of your plugins
builder.Services.AddSingleton(() => new LightsPlugin());
builder.Services.AddSingleton(() => new SpeakerPlugin());
// Create the plugin collection (using the KernelPluginFactory to create plugins from objects)
builder.Services.AddSingleton<KernelPluginCollection>((serviceProvider) =>
[
KernelPluginFactory.CreateFromObject(serviceProvider.GetRequiredService<LightsPlugin>()),
KernelPluginFactory.CreateFromObject(serviceProvider.GetRequiredService<SpeakerPlugin>())
]
);
// Finally, create the Kernel service with the service provider and plugin collection
builder.Services.AddTransient((serviceProvider)=> {
KernelPluginCollection pluginCollection = serviceProvider.GetRequiredService<KernelPluginCollection>();
return new Kernel(serviceProvider, pluginCollection);
});
提示
如需如何在 C# 中使用相依性插入的更多範例,請參閱 概念範例。
既然您已瞭解核心,您可以瞭解可新增至該核心的所有不同 AI 服務。