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方法配置Builder和BuilderConfigurers。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("...", "...");
});
});
});
}
}
抠丁客


