项目

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
{
}

[!注意] 如果您未指定工作空间名称,类的完整名称将被用作工作空间名称。

您可以为特定工作空间解析IChatClientIChatClientAccessor服务的泛型版本。如果未为工作空间配置聊天客户端,您将从访问器服务中获取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方法配置BuilderBuilderConfigurers

    • Builder设置一次,用于构建ChatClient实例。
    • BuilderConfigurers是一个操作列表,用于对Builder实例进行增量更改。这些操作按添加顺序执行。

要配置聊天客户端,您需要一个LLM提供程序包,例如Microsoft.Extensions.AI.OpenAIOllamaSharp

以下示例需要安装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")
                    );
                });
            });
        });
    }
}

另请参阅

在本文档中