Поделиться через


Общие сведения о ядре

Ядро является центральным компонентом семантического ядра. На самом простом этапе ядро — это контейнер внедрения зависимостей, который управляет всеми службами и подключаемыми модулями, необходимыми для запуска приложения ИИ. Если вы предоставляете все службы и подключаемые модули в ядро, они будут легко использоваться ИИ по мере необходимости.

Ядро находится в центре

Так как ядро содержит все службы и подключаемые модули, необходимые для запуска машинного кода и служб ИИ, он используется практически каждым компонентом пакета SDK для семантического ядра для управления агентами. Это означает, что при выполнении любого запроса или кода в семантическом ядре ядро всегда будет доступно для получения необходимых служб и подключаемых модулей.

Ядро находится в центре всего в семантическом ядре

Это очень мощно, так как это означает, что вы как разработчик имеете одно место, где можно настроить, и, что самое главное, отслеживать агенты ИИ. Например, при вызове запроса из ядра. При этом ядро будет...

  1. Выберите лучшую службу ИИ, чтобы запустить запрос.
  2. Создайте запрос с помощью предоставленного шаблона запроса.
  3. Отправьте запрос в службу ИИ.
  4. Получение и анализ ответа.
  5. И, наконец, верните ответ от LLM в приложение.

На протяжении всего этого процесса можно создавать события и ПО промежуточного слоя, которые активируются на каждом из этих шагов. Это означает, что вы можете выполнять такие действия, как ведение журнала, предоставлять обновления состояния пользователям и, что самое главное, ответственное ИИ. Все из одного места.

Создание ядра со службами и подключаемыми модулями

Прежде чем создавать ядро, необходимо сначала понять два типа компонентов, которые существуют:

Компоненты Description
1 Сервисы; Они состоят из служб ИИ (например, завершения чата) и других служб (например, журналов и HTTP-клиентов), необходимых для запуска приложения. Это было моделировано после шаблона поставщика услуг в .NET, чтобы мы могли поддерживать прием зависимостей на всех языках.
2 Подключаемые модули Это компоненты, которые используются службами ИИ и шаблонами запросов для выполнения работы. Например, службы ИИ могут использовать подключаемые модули для получения данных из базы данных или вызова внешнего 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(). В этом случае можно добавить необходимые службы ИИ и подключаемые модули.

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#см . в примерах концепции.

Следующие шаги

Теперь, когда вы понимаете ядро, вы можете узнать обо всех различных службах ИИ, которые можно добавить в него.