커널 이해
커널은 의미 체계 커널의 중심 구성 요소입니다. 가장 간단하게 커널은 AI 애플리케이션을 실행하는 데 필요한 모든 서비스 및 플러그 인을 관리하는 종속성 주입 컨테이너입니다. 커널에 모든 서비스 및 플러그 인을 제공하는 경우 필요에 따라 AI에서 원활하게 사용됩니다.
커널에는 네이티브 코드와 AI 서비스를 모두 실행하는 데 필요한 모든 서비스와 플러그 인이 있으므로 의미 체계 커널 SDK 내의 거의 모든 구성 요소에서 에이전트에 전원을 공급하는 데 사용됩니다. 즉, 의미 체계 커널에서 프롬프트 또는 코드를 실행하는 경우 커널을 항상 사용하여 필요한 서비스 및 플러그 인을 검색할 수 있습니다.
이는 개발자로서 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 서비스에 대해 알아볼 수 있습니다.