영어로 읽기

다음을 통해 공유


커널 이해

커널은 의미 체계 커널의 중심 구성 요소입니다. 가장 간단하게 커널은 AI 애플리케이션을 실행하는 데 필요한 모든 서비스 및 플러그 인을 관리하는 종속성 주입 컨테이너입니다. 커널에 모든 서비스 및 플러그 인을 제공하는 경우 필요에 따라 AI에서 원활하게 사용됩니다.

커널이 가운데에 있습니다.

커널에는 네이티브 코드와 AI 서비스를 모두 실행하는 데 필요한 모든 서비스와 플러그 인이 있으므로 의미 체계 커널 SDK 내의 거의 모든 구성 요소에서 에이전트에 전원을 공급하는 데 사용됩니다. 즉, 의미 체계 커널에서 프롬프트 또는 코드를 실행하는 경우 커널을 항상 사용하여 필요한 서비스 및 플러그 인을 검색할 수 있습니다.

커널은 의미 체계 커널의 모든 것의 중심에 있습니다.

이는 개발자로서 AI 에이전트를 구성하고 가장 중요하게 모니터링할 수 있는 단일 위치를 가지고 있다는 것을 의미하기 때문에 매우 강력합니다. 예를 들어 커널에서 프롬프트를 호출하는 경우를 예로 들어보십시오. 이렇게 하면 커널은 ...

  1. 프롬프트를 실행할 최상의 AI 서비스를 선택합니다.
  2. 제공된 프롬프트 템플릿을 사용하여 프롬프트를 빌드합니다.
  3. AI 서비스에 프롬프트를 보냅니다.
  4. 응답을 수신하고 구문 분석합니다.
  5. 마지막으로 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 서비스에 대해 알아볼 수 있습니다.