CrestApp AI 服务注册

🔒 You must be logged in as an Administrator or Editor to listen to this audio.

这是一段 C# 代码,定义了一个名为 ServiceCollectionExtensions 的静态扩展类,用于配置和注册一个名为 OrchardCore.AI.Core 的 AI 功能模块所依赖的各种服务。其核心作用是使用 ASP.NET Core 的依赖注入(DI)容器,将所有必要的服务注册到 IServiceCollection 中。

以下是代码中主要方法的讲解:

  1. 核心服务注册 (AddAICoreServices):

    • 这是模块的基础服务注册方法。
    • 它注册了 AI 客户端工厂 (IAIClientFactory)、语音合成音色解析器 (ISpeechVoiceResolver)、AI 配置档案 (AIProfile) 和提供者连接 (AIProviderConnection) 的存储与管理服务。
    • 注册了核心的 AI 补全服务 (IAICompletionService) 及其上下文构建器。
    • 配置了授权处理器 (AIProfileAuthorizationHandler, AIToolAuthorizationHandler) 和相关的数据存储集合选项。
  2. 功能模块服务注册:

    • AddAIDeploymentServices: 注册 AI 部署 (AIDeployment) 相关的存储、管理和配置源服务。
    • AddAIDataSourceServices: 注册 AI 数据源 (AIDataSource) 的存储和管理服务。
    • AddAIProfileTemplateServices: 注册 AI 配置档案模板 (AIProfileTemplate) 的存储和管理服务。
  3. 客户端与配置注册:

    • AddAIProfile<TClient>AddAICompletionClient<TClient>: 这两个方法用于注册具体的 AI 客户端实现(需实现 IAICompletionClient 接口)。AddAIProfile 方法被标记为过时,建议使用 AddAICompletionClient。它们允许通过一个唯一名称(clientNameimplementationName)来注册客户端,并将其配置到 AIOptions 中。
    • AddAIDeploymentProvider, AddAIConnectionSource, AddAITemplateSource: 这些方法用于向 AIOptions 中注册不同类型的配置源(部署提供者、连接源、模板源),为系统提供可插拔的配置扩展能力。
  4. 文档处理服务注册 (AddIngestionDocumentReader<T>):

    • 这是一个通用方法,用于注册文档读取器。它接受一个实现了 IngestionDocumentReader 的类型 T 和一个 ExtractorExtension 数组(表示支持的文件扩展名)。
    • 它会将允许和可嵌入的扩展名配置到 ChatDocumentsOptions 中。
    • 关键设计是:将 T 注册为单例,然后为 supportedExtensions 中的每个扩展名,注册一个键控服务 (AddKeyedSingleton),其键为扩展名,但解析出的实例是同一个共享的 T 单例。这样可以根据文件扩展名获取对应的读取器实例。
  5. 编排(Orchestration)服务注册 (AddOrchestrationServices):

    • 这是最复杂和核心的部分,注册了 AI 智能编排所需的全套服务。
    • 基础组件:注册了选项 (OrchestratorOptions)、共享的分词器 (ITextTokenizer)。
    • 上下文构建:注册了默认的编排上下文构建器 (IOrchestrationContextBuilder) 及其多个处理器 (IOrchestrationContextBuilderHandler),用于处理补全上下文、代理描述、以及预取检索增强生成 等。
    • 工具(Tools)系统:注册了工具注册表 (IToolRegistry) 及其多个提供者(本地、系统、代理),还注册了两个内容生成工具 (GenerateImageTool, GenerateChartTool)。
    • 编排器(Orchestrator):通过 AddOrchestrator<DefaultOrchestrator> 注册了默认的编排器,并设置了显示标题。
    • 解析器与处理器:注册了编排器解析器 (IOrchestratorResolver)、聊天响应处理器 (IChatResponseHandler) 及其解析器。
    • 外部聊天中继:注册了完整的外部聊天中继基础设施,用于与第三方系统集成。包括连接管理、事件处理和一系列针对特定事件类型(如“代理正在输入”、“连接丢失”、“会话结束”等)的键控通知构建器
  6. 编排器注册扩展 (AddOrchestrator<TOrchestrator>):

    • 这是一个通用方法,提供了一个流畅的 API(返回 OrchestratorBuilder<TOrchestrator>),允许用户以外挂方式轻松注册自定义的编排器实现(需实现 IOrchestrator 接口)。
    • 每个编排器通过一个唯一的 name 来标识,并被注册到 OrchestratorOptions 的字典中,便于后续由 IOrchestratorResolver 解析和使用。

总结:这段代码是一个典型的 .NET 服务配置类,它采用模块化设计,将 AI 能力分解为配置、客户端、数据源、部署、编排等不同方面,并通过扩展方法提供清晰的注册入口。其设计充分利用了依赖注入、选项模式、键控服务和泛型,使得系统高度可配置、可扩展,并能支持复杂的 AI 智能体编排和工具调用工作流。