Microsoft.Extensions.AI
Microsoft.Extensions.AI 是一个提供统一API以集成AI服务的库。它是Microsoft AI扩展库的一部分,用于将AI服务集成到您的应用程序中。本文档介绍了如何在ABP框架中使用此库。在阅读本文档之前,请确保您已阅读人工智能文档。
使用方法
您可以通过解析IChatClient从您的服务访问已配置的聊天客户端,并直接使用它。
public class MyService
{
private readonly IChatClient _chatClient;
public MyService(IChatClient chatClient)
{
_chatClient = chatClient;
}
public async Task<string> GetResponseAsync(string prompt)
{
return await _chatClient.GetResponseAsync(prompt);
}
}
您还可以解析IChatClientAccessor来访问IChatClient,这在可选配置的场景中非常有用,例如开发一个可能使用AI功能的模块或服务。
public class MyService
{
private readonly IChatClientAccessor _chatClientAccessor;
public MyService(IChatClientAccessor chatClientAccessor)
{
_chatClientAccessor = chatClientAccessor;
}
public async Task<string> GetResponseAsync(string prompt)
{
var chatClient = _chatClientAccessor.ChatClient;
if (chatClient is null)
{
return "未配置聊天客户端";
}
return await chatClient.GetResponseAsync(prompt);
}
}
工作空间
工作空间是一种为命名范围配置独立AI配置的方法。您可以通过使用带有工作空间名称的WorkspaceNameAttribute属性来装饰类来定义工作空间。
- 工作空间名称必须唯一。
- 工作空间名称不能包含空格(请使用下划线或驼峰命名法)。
- 工作空间名称区分大小写。
using Volo.Abp.AI;
[WorkspaceName("CommentSummarization")]
public class CommentSummarization
{
}
[!注意] 如果您未指定工作空间名称,类的完整名称将被用作工作空间名称。
您可以为特定工作空间解析IChatClient和IChatClientAccessor服务的泛型版本。如果未为工作空间配置聊天客户端,您将从访问器服务中获取null。在使用之前,您应检查访问器。这仅适用于指定的工作空间。另一个工作空间可能已配置了聊天客户端。
IChatClient<TWorkSpace>或IChatClientAccessor<TWorkSpace>可以被解析以访问特定工作空间的聊天客户端。这是一个类型化的聊天客户端,可以与默认聊天客户端分开配置。
解析类型化聊天客户端的示例:
public class MyService
{
private readonly IChatClient<CommentSummarization> _chatClient;
public MyService(IChatClient<CommentSummarization> chatClient)
{
_chatClient = chatClient;
}
public async Task<string> GetResponseAsync(string prompt)
{
return await _chatClient.GetResponseAsync(prompt);
}
}
解析类型化聊天客户端访问器的示例:
public class MyService
{
private readonly IChatClientAccessor<CommentSummarization> _chatClientAccessor;
}
public async Task<string> GetResponseAsync(string prompt)
{
var chatClient = _chatClientAccessor.ChatClient;
if (chatClient is null)
{
return "未配置聊天客户端";
}
return await chatClient.GetResponseAsync(prompt);
}
}
配置
AbpAIWorkspaceOptions配置用于配置AI工作空间及其配置。您可以使用此选项类配置默认工作空间,也可以配置独立工作空间。它必须在您的模块类的PreConfigure方法中在服务配置之前进行配置。这一点很重要,因为服务是在配置应用后注册的。
AbpAIWorkspaceOptions有一个Workspaces属性,类型为WorkspaceConfigurationDictionary,这是一个工作空间名称及其配置的字典。它提供了Configure<T>和ConfigureDefault方法来配置默认工作空间,并使用工作空间类型配置独立工作空间。Configure方法将
WorkspaceConfiguration对象传递给配置操作。您可以使用ConfigureChatClient方法配置ChatClient。ConfigureChatClient()方法将ChatClientConfiguration参数传递给配置操作。您可以使用ConfigureBuilder方法配置Builder和BuilderConfigurers。Builder设置一次,用于构建ChatClient实例。BuilderConfigurers是一个操作列表,用于对Builder实例进行增量更改。这些操作按添加顺序执行。
要配置聊天客户端,您需要一个LLM提供程序包,例如Microsoft.Extensions.AI.OpenAI或OllamaSharp。
以下示例需要安装OllamaSharp包。
默认工作空间配置的演示:
[DependsOn(typeof(AbpAIModule))]
public class MyProjectModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpAIWorkspaceOptions>(options =>
{
options.Workspaces.ConfigureDefault(configuration =>
{
configuration.ConfigureChatClient(chatClientConfiguration =>
{
chatClientConfiguration.Builder = new ChatClientBuilder(
sp => new OllamaApiClient("http://localhost:11434", "mistral")
);
});
});
});
}
}
独立工作空间配置的演示:
[DependsOn(typeof(AbpAIModule))]
public class MyProjectModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpAIWorkspaceOptions>(options =>
{
options.Workspaces.Configure<CommentSummarization>(configuration =>
{
configuration.ConfigureChatClient(chatClientConfiguration =>
{
chatClientConfiguration.Builder = new ChatClientBuilder(
sp => new OllamaApiClient("http://localhost:11434", "mistral")
);
});
});
});
}
}
抠丁客


