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


Обзор семантического ядра для .NET

В этой статье рассматриваются основные понятия и возможности семантического ядра . Семантический ядро — это мощный и рекомендуемый вариант для работы с ИИ в приложениях .NET. В следующих разделах вы узнаете:

  • Добавление семантического ядра в проект
  • Основные понятия семантического ядра

В следующих разделах представлен краткий обзор семантического ядра в контексте .NET. Дополнительные сведения и обучение по семантической ядре см. в следующих ресурсах:

Добавление семантического ядра в проект .NET

Пакет SDK для семантического ядра доступен в виде пакета NuGet для .NET и интегрируется со стандартными конфигурациями приложений.

Установите пакет с помощью следующей Microsoft.SemanticKernel команды:

dotnet add package Microsoft.SemanticKernel

Примечание.

Хотя Microsoft.SemanticKernel предоставляет основные функции семантического ядра, дополнительные возможности требуют установки дополнительных пакетов. Например, пакет предоставляет доступ к функциям, Microsoft.SemanticKernel.Plugins.Memory связанным с памятью. Дополнительные сведения см. в документации по семантике ядра.

Создайте и настройте Kernel экземпляр с помощью KernelBuilder класса для доступа к семантике ядра и работы с ним. Содержит Kernel службы, данные и подключения к оркестрации интеграции между кодом и моделями ИИ.

Kernel Настройте консольное приложение .NET:

var builder = Kernel.CreateBuilder();

// Add builder configuration and services

var kernel = builder.Build();

Настройте ядро в приложении ASP.NET Core:

var builder = WebApplication.CreateBuilder();
builder.Services.AddKernel();

// Add builder configuration and services

var app = builder.Build();

Общие сведения о семантическом ядре

Семантический ядро — это пакет SDK с открытым исходным кодом, который интегрирует модели и службы ИИ, такие как OpenAI, Azure OpenAI и Hugging Face с обычными языками программирования, такими как C#, Python и Java.

Пакет SDK для семантического ядра позволяет разработчикам предприятия следующим образом:

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

Семантический ядро строится на основе нескольких основных понятий:

  • Подключения: интерфейс с внешними службами ИИ и источниками данных.
  • Подключаемые модули: инкапсулировать функции, которые могут использовать приложения.
  • Планировщик: оркеструет планы выполнения и стратегии на основе поведения пользователя.
  • Память: абстрагирование и упрощение управления контекстом для приложений ИИ.

Эти стандартные блоки подробно рассматриваются в следующих разделах.

Связи

Пакет SDK для семантического ядра включает набор соединителей, позволяющих разработчикам интегрировать LLM и другие службы в существующие приложения. Эти соединители служат мостом между кодом приложения и моделями или службами ИИ. Семантический ядро обрабатывает множество распространенных проблем и проблем подключения, чтобы сосредоточиться на создании собственных рабочих процессов и функций.

Следующий фрагмент кода создает Kernel и добавляет подключение к модели Azure OpenAI:

using Microsoft.SemanticKernel;

// Create kernel
var builder = Kernel.CreateBuilder();

// Add a chat completion service:
builder.Services.AddAzureOpenAIChatCompletion(
    "your-resource-name",
    "your-endpoint",
    "your-resource-key",
    "deployment-model");
var kernel = builder.Build();

Подключаемые модули

Подключаемые модули семантического ядра инкапсулируют стандартные языковые функции для приложений и моделей ИИ для использования. Вы можете создавать собственные подключаемые модули или полагаться на подключаемые модули, предоставляемые пакетом SDK. Эти подключаемые модули упрощают задачи, в которых модели ИИ являются выгодными и эффективно объединяют их с более традиционными методами C#. Функции подключаемого модуля обычно классифицируются на два типа: семантические функции и собственные функции.

Семантические функции

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

Следующий фрагмент кода определяет и регистрирует семантику функции:

var userInput = Console.ReadLine();

// Define semantic function inline.
string skPrompt = @"Summarize the provided unstructured text in a sentence that is easy to understand.
                    Text to summarize: {{$userInput}}";

// Register the function
kernel.CreateSemanticFunction(
    promptTemplate: skPrompt, 
    functionName: "SummarizeText",
    pluginName: "SemanticFunctions"
);

Собственные функции

Собственные функции — это методы C#, которые семантический ядро может вызывать непосредственно для управления или извлечения данных. Они выполняют операции, которые лучше подходят для традиционных инструкций кода вместо запросов LLM.

Следующий фрагмент кода определяет и регистрирует собственную функцию:

// Define native function
public class NativeFunctions {

    [SKFunction, Description("Retrieve content from local file")]
    public async Task<string> RetrieveLocalFile(string fileName, int maxSize = 5000) 
    {
        string content = await File.ReadAllTextAsync(fileName); 
        if (content.Length <= maxSize) return content;
        return content.Substring(0, maxSize);
    }
}

//Import native function
string plugInName = "NativeFunction";
string functionName = "RetrieveLocalFile";

var nativeFunctions = new NativeFunctions();
kernel.ImportFunctions(nativeFunctions, plugInName);

Planner

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

Рассмотрим следующий фрагмент псевдокода:

// Native function definition and kernel configuration code omitted for brevity

// Configure and create the plan
string planDefinition = "Read content from a local file and summarize the content.";
SequentialPlanner sequentialPlanner = new SequentialPlanner(kernel);      

string assetsFolder = @"../../assets";
string fileName = Path.Combine(assetsFolder,"docs","06_SemanticKernel", "aci_documentation.txt");

ContextVariables contextVariables = new ContextVariables();
contextVariables.Add("fileName", fileName);

var customPlan = await sequentialPlanner.CreatePlanAsync(planDefinition);

// Execute the plan
KernelResult kernelResult = await kernel.RunAsync(contextVariables, customPlan);
Console.WriteLine($"Summarization: {kernelResult.GetValue<string>()}");

Приведенный выше код создает исполняемый файл, последовательный план для чтения содержимого из локального файла и сводки содержимого. План настраивает инструкции для чтения файла с помощью собственной функции, а затем анализа его с помощью модели ИИ.

Память

Память семантического ядра предоставляет абстракции при внедрении моделей, векторных баз данных и других данных для упрощения управления контекстом для приложений ИИ. Память не зависит от базовой LLM или Vector DB, предлагая единый интерфейс разработчика. Функции памяти можно настроить для хранения данных в различных источниках или службах, включая поиск ИИ Azure, Кэш Azure для Redis и многое другое.

Рассмотрим следующий фрагмент кода:

var facts = new Dictionary<string,string>();
facts.Add(
    "Azure Machine Learning; https://docs.microsoft.com/en-us/azure/machine-learning/", 
    @"Azure Machine Learning is a cloud service for accelerating and 
    managing the machine learning project lifecycle. Machine learning professionals, 
    data scientists, and engineers can use it in their day-to-day workflows"
);

facts.Add(
    "Azure SQL Service; https://docs.microsoft.com/en-us/azure/azure-sql/", 
    @"Azure SQL is a family of managed, secure, and intelligent products
    that use the SQL Server database engine in the Azure cloud."
);

string memoryCollectionName = "SummarizedAzureDocs";

foreach (var fact in facts) {
    await memoryBuilder.SaveReferenceAsync(
        collection: memoryCollectionName,
        description: fact.Key.Split(";")[1].Trim(),
        text: fact.Value,
        externalId: fact.Key.Split(";")[2].Trim(),
        externalSourceName: "Azure Documentation"
    );
}

Приведенный выше код загружает набор фактов в память, чтобы данные могли использоваться при взаимодействии с моделями ИИ и задачами оркестрации.