🔒 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 中。
以下是代码中主要方法的讲解:
核心服务注册 (
AddAICoreServices):- 这是模块的基础服务注册方法。
- 它注册了 AI 客户端工厂 (
IAIClientFactory)、语音合成音色解析器 (ISpeechVoiceResolver)、AI 配置档案 (AIProfile) 和提供者连接 (AIProviderConnection) 的存储与管理服务。 - 注册了核心的 AI 补全服务 (
IAICompletionService) 及其上下文构建器。 - 配置了授权处理器 (
AIProfileAuthorizationHandler,AIToolAuthorizationHandler) 和相关的数据存储集合选项。
功能模块服务注册:
AddAIDeploymentServices: 注册 AI 部署 (AIDeployment) 相关的存储、管理和配置源服务。AddAIDataSourceServices: 注册 AI 数据源 (AIDataSource) 的存储和管理服务。AddAIProfileTemplateServices: 注册 AI 配置档案模板 (AIProfileTemplate) 的存储和管理服务。
客户端与配置注册:
AddAIProfile<TClient>和AddAICompletionClient<TClient>: 这两个方法用于注册具体的 AI 客户端实现(需实现IAICompletionClient接口)。AddAIProfile方法被标记为过时,建议使用AddAICompletionClient。它们允许通过一个唯一名称(clientName或implementationName)来注册客户端,并将其配置到AIOptions中。AddAIDeploymentProvider,AddAIConnectionSource,AddAITemplateSource: 这些方法用于向AIOptions中注册不同类型的配置源(部署提供者、连接源、模板源),为系统提供可插拔的配置扩展能力。
文档处理服务注册 (
AddIngestionDocumentReader<T>):- 这是一个通用方法,用于注册文档读取器。它接受一个实现了
IngestionDocumentReader的类型T和一个ExtractorExtension数组(表示支持的文件扩展名)。 - 它会将允许和可嵌入的扩展名配置到
ChatDocumentsOptions中。 - 关键设计是:将
T注册为单例,然后为supportedExtensions中的每个扩展名,注册一个键控服务 (AddKeyedSingleton),其键为扩展名,但解析出的实例是同一个共享的T单例。这样可以根据文件扩展名获取对应的读取器实例。
- 这是一个通用方法,用于注册文档读取器。它接受一个实现了
编排(Orchestration)服务注册 (
AddOrchestrationServices):- 这是最复杂和核心的部分,注册了 AI 智能编排所需的全套服务。
- 基础组件:注册了选项 (
OrchestratorOptions)、共享的分词器 (ITextTokenizer)。 - 上下文构建:注册了默认的编排上下文构建器 (
IOrchestrationContextBuilder) 及其多个处理器 (IOrchestrationContextBuilderHandler),用于处理补全上下文、代理描述、以及预取检索增强生成 等。 - 工具(Tools)系统:注册了工具注册表 (
IToolRegistry) 及其多个提供者(本地、系统、代理),还注册了两个内容生成工具 (GenerateImageTool,GenerateChartTool)。 - 编排器(Orchestrator):通过
AddOrchestrator<DefaultOrchestrator>注册了默认的编排器,并设置了显示标题。 - 解析器与处理器:注册了编排器解析器 (
IOrchestratorResolver)、聊天响应处理器 (IChatResponseHandler) 及其解析器。 - 外部聊天中继:注册了完整的外部聊天中继基础设施,用于与第三方系统集成。包括连接管理、事件处理和一系列针对特定事件类型(如“代理正在输入”、“连接丢失”、“会话结束”等)的键控通知构建器。
编排器注册扩展 (
AddOrchestrator<TOrchestrator>):- 这是一个通用方法,提供了一个流畅的 API(返回
OrchestratorBuilder<TOrchestrator>),允许用户以外挂方式轻松注册自定义的编排器实现(需实现IOrchestrator接口)。 - 每个编排器通过一个唯一的
name来标识,并被注册到OrchestratorOptions的字典中,便于后续由IOrchestratorResolver解析和使用。
- 这是一个通用方法,提供了一个流畅的 API(返回
总结:这段代码是一个典型的 .NET 服务配置类,它采用模块化设计,将 AI 能力分解为配置、客户端、数据源、部署、编排等不同方面,并通过扩展方法提供清晰的注册入口。其设计充分利用了依赖注入、选项模式、键控服务和泛型,使得系统高度可配置、可扩展,并能支持复杂的 AI 智能体编排和工具调用工作流。