项目

Microsoft.SemanticKernel

Microsoft.SemanticKernel 是一个提供统一 SDK 用于集成 AI 服务的库。本文档介绍如何在 ABP 框架中使用该库。在阅读本文档前,请确保您已阅读人工智能相关文档。

使用方法

通过解析包含 Kernel 实例的 IKernelAccessor 服务可使用 Semantic Kernel。若未配置工作区,Kernel 可能为 null,使用前需进行检查。

public class MyService
{
    private readonly IKernelAccessor _kernelAccessor;
    public MyService(IKernelAccessor kernelAccessor)
    {
        _kernelAccessor = kernelAccessor;
    }

    public async Task<string> GetResponseAsync(string prompt)
    {
        var kernel = _kernelAccessor.Kernel;
        if (kernel is null)
        {
            return "未配置 Kernel";
        }
        return await kernel.InvokeAsync(prompt);
    }
}

工作区

工作区用于为命名作用域配置独立的 AI 配置。可通过使用带有工作区名称的 WorkspaceNameAttribute 特性装饰类来定义工作区。

  • 工作区名称必须唯一。
  • 工作区名称不能包含空格(可使用下划线或驼峰命名法)。
  • 工作区名称区分大小写。
using Volo.Abp.AI;

[WorkspaceName("CommentSummarization")]
public class CommentSummarization
{
}

[!注意] 若不指定工作区名称,将使用类的完整名称作为工作区名称。

可通过泛型参数解析特定工作区的泛型版本 IKernelAccessor 服务。若未为工作区配置 Kernel,访问器服务将返回 null,使用前需检查访问器。此规则仅适用于指定工作区,其他工作区可能已配置 Kernel。

IKernelAccessor<TWorkSpace> 可解析用于访问特定工作区的 Kernel。这是一个类型化 Kernel 访问器,每个工作区可拥有独立的 Kernel 配置。

解析类型化 Kernel 访问器示例:

public class MyService
{
    private readonly IKernelAccessor<CommentSummarization> _kernelAccessor;
    public async Task<string> GetResponseAsync(string prompt)
    {
        var kernel = _kernelAccessor.Kernel;
        if (kernel is null)
        {
            return "未配置 Kernel";
        }
        return await kernel.InvokeAsync(prompt);
    }
}

配置

使用 AbpAIWorkspaceOptions 配置 AI 工作区及其配置。可通过该选项类配置默认工作区及独立工作区。必须在服务配置之前,于模块类的 PreConfigure 方法中进行配置,这一点很重要,因为服务注册在配置应用之后进行。

  • AbpAIWorkspaceOptions 具有 Workspaces 属性,类型为 WorkspaceConfigurationDictionary(工作区名称与其配置的字典)。提供 Configure<T>ConfigureDefault 方法,用于通过工作区类型配置默认工作区和独立工作区。

  • Configure 方法将 WorkspaceConfiguration 对象传递给配置操作。可通过 ConfigureKernel 方法配置 Kernel

  • ConfigureKernel() 方法将 KernelConfiguration 参数传递给配置操作。可通过 ConfigureBuilder 方法配置 BuilderBuilderConfigurers

    • Builder 一次性设置,用于构建 Kernel 实例。
    • BuilderConfigurers 是一系列作用于 Builder 实例以实现增量更改的操作列表,这些操作按添加顺序执行。

配置 Kernel 需安装 Kernel 连接器包,例如 Microsoft.SemanticKernel.Connectors.OpenAI,以配置使用特定 LLM 提供程序的 Kernel。

以下示例需安装 Microsoft.SemanticKernel.Connectors.AzureOpenAI 包。

默认工作区配置示例:

[DependsOn(typeof(AbpAIModule))]
public class MyProjectModule : AbpModule
{
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        PreConfigure<AbpAIOptions>(options =>
        {
            options.Workspaces.ConfigureDefault(configuration =>
            {
                configuration.ConfigureKernel(kernelConfiguration =>
                {
                    kernelConfiguration.Builder = Kernel.CreateBuilder()
                        .AddAzureOpenAIChatClient("...", "...");
                });
                // 注意:此处未配置聊天客户端
            });
        });
    }
}

独立工作区配置示例:

[DependsOn(typeof(AbpAIModule))]
public class MyProjectModule : AbpModule
{
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        PreConfigure<AbpAIOptions>(options =>
        {
            options.Workspaces.Configure<CommentSummarization>(configuration =>
            {
                configuration.ConfigureKernel(kernelConfiguration =>
                {
                    kernelConfiguration.Builder = Kernel.CreateBuilder()
                        .AddAzureOpenAIChatClient("...", "...");
                });
            });
        });
    }
}

另请参阅

在本文档中