From 2a588fdab278d0d50e3d67709dec0c1bddcb3087 Mon Sep 17 00:00:00 2001 From: MyPrototypeWhat Date: Mon, 23 Jun 2025 19:51:40 +0800 Subject: [PATCH] refactor: restructure AI Core architecture and enhance client functionality - Updated the AI Core documentation to reflect the new architecture and design principles, emphasizing modularity and type safety. - Refactored the client structure by removing obsolete files and consolidating client creation logic into a more streamlined format. - Introduced a new core module for managing execution and middleware, improving the overall organization of the codebase. - Enhanced the orchestration layer to provide a clearer API for users, integrating the creation and execution processes more effectively. - Added comprehensive type definitions and utility functions for better type safety and usability across the SDK. --- packages/aiCore/AI_SDK_ARCHITECTURE.md | 850 ++++++++---------- .../aiCore/src/clients/ApiClientFactory.ts | 223 ----- .../src/clients/PluginEnabledAiClient.ts | 381 -------- .../src/clients/UniversalAiSdkClient.ts | 216 ----- packages/aiCore/src/core/README.MD | 3 + .../src/core/clients/PluginEnabledAiClient.ts | 238 +++++ .../aiCore/src/core/creation/ConfigManager.ts | 37 + .../aiCore/src/core/creation/ModelCreator.ts | 31 + .../src/core/creation/ProviderCreator.ts | 194 ++++ packages/aiCore/src/core/creation/index.ts | 15 + packages/aiCore/src/core/creation/types.ts | 32 + .../aiCore/src/core/execution/AiExecutor.ts | 174 ++++ packages/aiCore/src/core/execution/index.ts | 47 + packages/aiCore/src/core/execution/types.ts | 29 + packages/aiCore/src/core/index.ts | 25 + .../src/core/middleware/MiddlewareManager.ts | 16 + .../src/core/middleware/ModelWrapper.ts | 22 + packages/aiCore/src/core/middleware/index.ts | 8 + packages/aiCore/src/core/middleware/types.ts | 12 + .../aiCore/src/{ => core}/options/examples.ts | 0 .../aiCore/src/{ => core}/options/factory.ts | 0 .../aiCore/src/{ => core}/options/index.ts | 0 .../aiCore/src/{ => core}/options/types.ts | 8 +- .../aiCore/src/{ => core}/plugins/README.md | 0 .../plugins/examples/example-plugins.ts | 0 .../plugins/examples/example-usage.ts | 2 +- .../aiCore/src/{ => core}/plugins/index.ts | 0 .../aiCore/src/{ => core}/plugins/manager.ts | 9 +- .../aiCore/src/{ => core}/plugins/types.ts | 4 +- .../src/{ => core}/providers/factory.ts | 0 .../src/{ => core}/providers/registry.ts | 0 .../aiCore/src/{ => core}/providers/types.ts | 0 .../aiCore/src/{ => core}/providers/utils.ts | 0 packages/aiCore/src/index.ts | 112 ++- packages/aiCore/src/orchestration/api.ts | 148 +++ packages/aiCore/src/orchestration/index.ts | 13 + packages/aiCore/src/orchestration/types.ts | 26 + packages/aiCore/src/{clients => }/types.ts | 4 +- .../src/aiCore/transformParameters.ts | 124 +-- 39 files changed, 1538 insertions(+), 1465 deletions(-) delete mode 100644 packages/aiCore/src/clients/ApiClientFactory.ts delete mode 100644 packages/aiCore/src/clients/PluginEnabledAiClient.ts delete mode 100644 packages/aiCore/src/clients/UniversalAiSdkClient.ts create mode 100644 packages/aiCore/src/core/README.MD create mode 100644 packages/aiCore/src/core/clients/PluginEnabledAiClient.ts create mode 100644 packages/aiCore/src/core/creation/ConfigManager.ts create mode 100644 packages/aiCore/src/core/creation/ModelCreator.ts create mode 100644 packages/aiCore/src/core/creation/ProviderCreator.ts create mode 100644 packages/aiCore/src/core/creation/index.ts create mode 100644 packages/aiCore/src/core/creation/types.ts create mode 100644 packages/aiCore/src/core/execution/AiExecutor.ts create mode 100644 packages/aiCore/src/core/execution/index.ts create mode 100644 packages/aiCore/src/core/execution/types.ts create mode 100644 packages/aiCore/src/core/index.ts create mode 100644 packages/aiCore/src/core/middleware/MiddlewareManager.ts create mode 100644 packages/aiCore/src/core/middleware/ModelWrapper.ts create mode 100644 packages/aiCore/src/core/middleware/index.ts create mode 100644 packages/aiCore/src/core/middleware/types.ts rename packages/aiCore/src/{ => core}/options/examples.ts (100%) rename packages/aiCore/src/{ => core}/options/factory.ts (100%) rename packages/aiCore/src/{ => core}/options/index.ts (100%) rename packages/aiCore/src/{ => core}/options/types.ts (75%) rename packages/aiCore/src/{ => core}/plugins/README.md (100%) rename packages/aiCore/src/{ => core}/plugins/examples/example-plugins.ts (100%) rename packages/aiCore/src/{ => core}/plugins/examples/example-usage.ts (99%) rename packages/aiCore/src/{ => core}/plugins/index.ts (100%) rename packages/aiCore/src/{ => core}/plugins/manager.ts (94%) rename packages/aiCore/src/{ => core}/plugins/types.ts (94%) rename packages/aiCore/src/{ => core}/providers/factory.ts (100%) rename packages/aiCore/src/{ => core}/providers/registry.ts (100%) rename packages/aiCore/src/{ => core}/providers/types.ts (100%) rename packages/aiCore/src/{ => core}/providers/utils.ts (100%) create mode 100644 packages/aiCore/src/orchestration/api.ts create mode 100644 packages/aiCore/src/orchestration/index.ts create mode 100644 packages/aiCore/src/orchestration/types.ts rename packages/aiCore/src/{clients => }/types.ts (92%) diff --git a/packages/aiCore/AI_SDK_ARCHITECTURE.md b/packages/aiCore/AI_SDK_ARCHITECTURE.md index b091a57a41..6e540265d6 100644 --- a/packages/aiCore/AI_SDK_ARCHITECTURE.md +++ b/packages/aiCore/AI_SDK_ARCHITECTURE.md @@ -1,13 +1,14 @@ -# Cherry Studio AI Core 基于 Vercel AI SDK 的技术架构 +# AI Core 基于 Vercel AI SDK 的技术架构 ## 1. 架构设计理念 ### 1.1 设计目标 +- **分层架构**:orchestration(编排层)→ core(核心层),职责分离 - **统一接口**:使用 Vercel AI SDK 统一不同 AI Provider 的接口差异 - **动态导入**:通过动态导入实现按需加载,减少打包体积 - **最小包装**:直接使用 AI SDK 的类型和接口,避免重复定义 -- **插件系统**:基于钩子的插件架构,支持请求全生命周期扩展 +- **插件系统**:基于钩子的通用插件架构,支持请求全生命周期扩展 - **类型安全**:利用 TypeScript 和 AI SDK 的类型系统确保类型安全 - **轻量级**:专注核心功能,保持包的轻量和高效 - **包级独立**:作为独立包管理,便于复用和维护 @@ -15,30 +16,57 @@ ### 1.2 核心优势 - **标准化**:AI SDK 提供统一的模型接口,减少适配工作 -- **简化维护**:废弃复杂的 XxxApiClient,统一为工厂函数模式 +- **分层设计**:清晰的职责分离,便于维护和扩展 - **更好的开发体验**:完整的 TypeScript 支持和丰富的生态系统 - **性能优化**:AI SDK 内置优化和最佳实践 - **模块化设计**:独立包结构,支持跨项目复用 -- **可扩展插件**:基于钩子的插件系统,支持灵活的功能扩展和流转换 +- **可扩展插件**:通用的流转换和参数处理插件系统 ## 2. 整体架构图 ```mermaid graph TD - subgraph "Cherry Studio 主应用" + subgraph "用户应用 (如 Cherry Studio)" UI["用户界面"] - Components["React 组件"] + Components["应用组件"] end subgraph "packages/aiCore (AI Core 包)" - ApiClientFactory["ApiClientFactory (工厂类)"] - UniversalClient["UniversalAiSdkClient (统一客户端)"] - ProviderRegistry["Provider 注册表"] - PluginManager["插件管理器"] - end + subgraph "Orchestration Layer (编排层)" + OrchAPI["api.ts (用户API)"] + OrchTypes["types.ts (编排类型)"] + end - subgraph "动态导入层" - DynamicImport["动态导入"] + subgraph "Core Layer (核心层)" + subgraph "Creation (创建层)" + ConfigManager["ConfigManager (配置管理)"] + ModelCreator["ModelCreator (模型创建)"] + ProviderCreator["ProviderCreator (提供商创建)"] + end + + subgraph "Execution (执行层)" + AiExecutor["AiExecutor (执行器)"] + end + + subgraph "Clients (客户端层)" + PluginClient["PluginEnabledAiClient (插件客户端)"] + end + + subgraph "Middleware (中间件)" + MiddlewareManager["MiddlewareManager (中间件管理)"] + ModelWrapper["ModelWrapper (模型包装)"] + end + + subgraph "Plugins (插件)" + PluginManager["PluginManager (插件管理)"] + StreamTransforms["Stream Transforms (流转换)"] + end + + subgraph "Providers (提供商)" + Registry["Provider Registry (注册表)"] + Factory["Provider Factory (工厂)"] + end + end end subgraph "Vercel AI SDK" @@ -50,61 +78,78 @@ graph TD Others["其他 19+ Providers"] end - subgraph "插件生态" - FirstHooks["First Hooks (resolveModel, loadTemplate)"] - SequentialHooks["Sequential Hooks (transformParams, transformResult)"] - ParallelHooks["Parallel Hooks (onRequestStart, onRequestEnd, onError)"] - StreamHooks["Stream Hooks (transformStream)"] - end + UI --> OrchAPI + Components --> OrchAPI + OrchAPI --> AiExecutor + AiExecutor --> PluginClient + PluginClient --> PluginManager + PluginClient --> ConfigManager + ConfigManager --> ModelCreator + ModelCreator --> ProviderCreator + ModelCreator --> MiddlewareManager + MiddlewareManager --> ModelWrapper + ProviderCreator --> Registry + Registry --> Factory + Factory --> OpenAI + Factory --> Anthropic + Factory --> Google + Factory --> XAI + Factory --> Others - UI --> ApiClientFactory - Components --> ApiClientFactory - ApiClientFactory --> UniversalClient - UniversalClient --> PluginManager - PluginManager --> ProviderRegistry - ProviderRegistry --> DynamicImport - DynamicImport --> OpenAI - DynamicImport --> Anthropic - DynamicImport --> Google - DynamicImport --> XAI - DynamicImport --> Others - - UniversalClient --> AICore + PluginClient --> AICore AICore --> streamText AICore --> generateText + AICore --> streamObject + AICore --> generateObject - PluginManager --> FirstHooks - PluginManager --> SequentialHooks - PluginManager --> ParallelHooks - PluginManager --> StreamHooks + PluginManager --> StreamTransforms ``` ## 3. 包结构设计 -### 3.1 包级文件结构(当前简化版 + 规划) +### 3.1 当前架构文件结构 ``` packages/aiCore/ ├── src/ -│ ├── providers/ -│ │ ├── registry.ts # Provider 注册表 ✅ -│ │ └── types.ts # 核心类型定义 ✅ -│ ├── clients/ -│ │ ├── UniversalAiSdkClient.ts # 统一AI SDK客户端 ✅ -│ │ └── ApiClientFactory.ts # 客户端工厂 ✅ -│ ├── middleware/ # 插件系统 ✅ -│ │ ├── types.ts # 插件类型定义 ✅ -│ │ ├── manager.ts # 插件管理器 ✅ -│ │ ├── examples/ # 示例插件 ✅ -│ │ │ ├── example-plugins.ts # 示例插件实现 ✅ -│ │ │ └── example-usage.ts # 使用示例 ✅ -│ │ ├── README.md # 插件系统文档 ✅ -│ │ └── index.ts # 插件模块入口 ✅ -│ ├── services/ # 高级服务 (规划中) -│ │ ├── AiCoreService.ts # 统一服务入口 -│ │ ├── CompletionsService.ts # 文本生成服务 -│ │ ├── EmbeddingService.ts # 嵌入服务 -│ │ └── ImageService.ts # 图像生成服务 +│ ├── orchestration/ # 编排层 - 用户面向接口 +│ │ ├── api.ts # 主要API函数 ✅ +│ │ ├── types.ts # 编排类型定义 ✅ +│ │ └── index.ts # 编排层导出 ✅ +│ ├── core/ # 核心层 - 内部实现 +│ │ ├── creation/ # 创建层 +│ │ │ ├── types.ts # 创建类型定义 ✅ +│ │ │ ├── ConfigManager.ts # 配置管理器 ✅ +│ │ │ ├── ModelCreator.ts # 模型创建器 ✅ +│ │ │ ├── ProviderCreator.ts # 提供商创建器 ✅ +│ │ │ └── index.ts # 创建层导出 ✅ +│ │ ├── execution/ # 执行层 +│ │ │ ├── types.ts # 执行类型定义 ✅ +│ │ │ ├── AiExecutor.ts # AI执行器 ✅ +│ │ │ └── index.ts # 执行层导出 ✅ +│ │ ├── clients/ # 客户端层 +│ │ │ ├── PluginEnabledAiClient.ts # 插件客户端 ✅ +│ │ │ └── index.ts # 客户端导出 ✅ +│ │ ├── middleware/ # 中间件系统 +│ │ │ ├── types.ts # 中间件类型 ✅ +│ │ │ ├── MiddlewareManager.ts # 中间件管理器 ✅ +│ │ │ ├── ModelWrapper.ts # 模型包装器 ✅ +│ │ │ └── index.ts # 中间件导出 ✅ +│ │ ├── plugins/ # 插件系统 +│ │ │ ├── types.ts # 插件类型定义 ✅ +│ │ │ ├── manager.ts # 插件管理器 ✅ +│ │ │ ├── examples/ # 示例插件 ✅ +│ │ │ │ ├── example-plugins.ts +│ │ │ │ └── example-usage.ts +│ │ │ ├── README.md # 插件文档 ✅ +│ │ │ └── index.ts # 插件导出 ✅ +│ │ ├── providers/ # 提供商管理 +│ │ │ ├── registry.ts # 提供商注册表 ✅ +│ │ │ ├── factory.ts # 提供商工厂 ✅ +│ │ │ ├── types.ts # 提供商类型 ✅ +│ │ │ └── utils.ts # 工具函数 ✅ +│ │ └── index.ts # 核心层导出 ✅ +│ ├── types.ts # 全局类型定义 ✅ │ └── index.ts # 包主入口文件 ✅ ├── package.json # 包配置文件 ✅ ├── tsconfig.json # TypeScript 配置 ✅ @@ -112,511 +157,348 @@ packages/aiCore/ └── AI_SDK_ARCHITECTURE.md # 本文档 ✅ ``` -**图例:** +## 4. 架构分层详解 -- ✅ 已实现 -- 规划中:设计完成,待实现 +### 4.1 Orchestration Layer (编排层) -## 4. 核心组件详解 +**职责**:面向用户的主要API接口,提供简洁的使用体验 -### 4.1 Provider 注册表 (`providers/registry.ts`) +**核心文件**: -统一管理所有 AI Provider 的注册和动态导入。 +- `api.ts`: 主要API函数 (`streamText`, `generateText`, `streamObject`, `generateObject`) +- `types.ts`: 编排配置类型定义 -**主要功能:** +**设计特点**: -- 动态导入 AI SDK providers -- 提供统一的 Provider 创建接口 -- 支持 19+ 官方 AI SDK providers -- 类型安全的 Provider 配置 +- 支持两种使用方式:配置模式和直接AI SDK模式 +- 统一的函数重载设计 +- 自动处理执行器创建和调用 -**核心 API:** +**核心API**: ```typescript -export interface ProviderConfig { - id: string - name: string - import: () => Promise - creatorFunctionName: string -} +// 配置模式 - 推荐使用 +export async function streamText( + config: OrchestrationConfig, + modelId: string, + params: StreamTextParams +): Promise> -export class AiProviderRegistry { - getProvider(id: string): ProviderConfig | undefined - getAllProviders(): ProviderConfig[] - isSupported(id: string): boolean - registerProvider(config: ProviderConfig): void +// 直接AI SDK模式 - 兼容原生使用 +export async function streamText(params: Parameters[0]): Promise> +``` + +### 4.2 Core Layer (核心层) + +#### 4.2.1 Creation Layer (创建层) + +**职责**:负责配置解析、模型创建和提供商管理 + +**核心组件**: + +- `ConfigManager`: 配置解析和中间件收集 +- `ModelCreator`: 高级模型创建逻辑 +- `ProviderCreator`: 底层提供商导入和模型创建 + +**关键功能**: + +```typescript +// 配置管理 +export function resolveConfig( + providerId: ProviderId, + modelId: string, + userOptions: ProviderSettingsMap[ProviderId], + plugins: AiPlugin[] = [] +): ResolvedConfig + +// 模型创建 +export async function createModel( + providerId: ProviderId, + modelId: string, + userOptions: ProviderSettingsMap[ProviderId], + plugins: AiPlugin[] = [] +): Promise +``` + +#### 4.2.2 Execution Layer (执行层) + +**职责**:AI执行引擎,封装插件处理逻辑 + +**核心组件**: + +- `AiExecutor`: 主要执行器类 + +**设计特点**: + +- 构造时确定插件配置,运行时不可变更 +- 内部使用 `PluginEnabledAiClient` 处理插件 +- 提供类型安全的API接口 + +**核心API**: + +```typescript +export class AiExecutor { + static create( + providerId: T, + options: ProviderSettingsMap[T], + plugins: AiPlugin[] = [] + ): AiExecutor + + async streamText(modelId: string, params: StreamTextParams): Promise> + async generateText(modelId: string, params: GenerateTextParams): Promise> + async streamObject(modelId: string, params: StreamObjectParams): Promise> + async generateObject(modelId: string, params: GenerateObjectParams): Promise> } ``` -**支持的 Providers:** +#### 4.2.3 Clients Layer (客户端层) + +**职责**:插件处理,连接插件系统和AI SDK + +**核心组件**: + +- `PluginEnabledAiClient`: 处理插件执行和AI SDK调用 + +**设计特点**: + +- 使用 core/creation 层创建模型 +- 区分 streaming 和 non-streaming 插件处理 +- 支持 `streamText` 的流转换和其他方法的常规插件处理 + +#### 4.2.4 Middleware Layer (中间件层) + +**职责**:AI SDK原生中间件支持 + +**核心组件**: + +- `MiddlewareManager`: 中间件管理 (函数式) +- `ModelWrapper`: 模型包装器 (函数式) + +**设计哲学**: + +- 使用函数而非类,简化设计 +- 直接使用AI SDK的 `wrapLanguageModel` +- 与插件系统分离,职责明确 + +#### 4.2.5 Plugins Layer (插件层) + +**职责**:特定的插件功能 + +**核心组件**: + +- `PluginManager`: 插件管理器 +- 流转换收集:`collectStreamTransforms` + +**设计特点**: + +- 支持流转换 (`experimental_transform`) +- 与AI SDK中间件分离 +- 专注于特定需求 + +#### 4.2.6 Providers Layer (提供商层) + +**职责**:AI Provider注册表和动态导入 + +**核心组件**: + +- `registry.ts`: 19+ Provider配置和类型 +- `factory.ts`: Provider配置工厂 + +**支持的Providers**: - OpenAI, Anthropic, Google, XAI - Azure OpenAI, Amazon Bedrock, Google Vertex - Groq, Together.ai, Fireworks, DeepSeek -- Cerebras, DeepInfra, Replicate, Perplexity -- Cohere, Fal AI, Vercel (19+ providers) - -### 4.2 统一AI SDK客户端 (`clients/UniversalAiSdkClient.ts`) - -将不同 AI providers 包装为统一接口。 - -**主要功能:** - -- 异步初始化和动态加载 -- 统一的 stream() 和 generate() 方法 -- 直接使用 AI SDK 的 streamText() 和 generateText() -- 配置验证和错误处理 - -**核心 API:** - -```typescript -export class UniversalAiSdkClient { - async initialize(): Promise - isInitialized(): boolean - async stream(request: any): Promise - async generate(request: any): Promise - validateConfig(): boolean - getProviderInfo(): { id: string; name: string; isInitialized: boolean } -} -``` - -### 4.3 客户端工厂 (`clients/ApiClientFactory.ts`) - -统一创建和管理 AI SDK 客户端。 - -**主要功能:** - -- 统一的客户端创建接口 -- 智能缓存和复用机制 -- 批量创建和健康检查 -- 错误处理和重试 - -**核心 API:** - -```typescript -export class ApiClientFactory { - static async createAiSdkClient(providerId: string, options: any): Promise - static getCachedClient(providerId: string, options: any): UniversalAiSdkClient | undefined - static clearCache(): void - static async healthCheck(): Promise - static getSupportedProviders(): ProviderInfo[] -} -``` - -### 4.4 钩子风格插件系统 ✅ - -基于钩子机制的插件架构设计,提供灵活的扩展系统。 - -**钩子类型:** - -1. **First Hooks**:执行到第一个有效结果就停止 -2. **Sequential Hooks**:按序链式执行,可变换数据 -3. **Parallel Hooks**:并发执行,用于副作用 -4. **Stream Hooks**:流转换,直接传递给 AI SDK - -**优先级系统:** - -- `pre`:前置处理(-100 到 -1) -- `normal`:标准处理(0 到 99) -- `post`:后置处理(100 到 199) - -**核心钩子:** - -**First Hooks (第一个有效结果):** - -- `resolveModel`:模型解析,返回第一个匹配的模型 -- `loadTemplate`:模板加载,返回第一个找到的模板 - -**Sequential Hooks (链式变换):** - -- `transformParams`:参数转换,依次变换请求参数 -- `transformResult`:结果转换,依次变换响应结果 - -**Parallel Hooks (并发副作用):** - -- `onRequestStart`:请求开始时触发 -- `onRequestEnd`:请求结束时触发 -- `onError`:错误发生时触发 - -**Stream Hooks (流转换):** - -- `transformStream`:流转换,返回 AI SDK 转换函数 - -**插件 API 设计:** - -```typescript -export interface Plugin { - name: string - enforce?: 'pre' | 'normal' | 'post' - - // First hooks - 执行到第一个有效结果 - resolveModel?(params: ResolveModelParams): Promise - loadTemplate?(params: LoadTemplateParams): Promise