本文档描述了 AppFlowy 中 AI 功能的核心架构和管理系统,重点关注 AIManager、LocalAIController、模型选择机制和 AI 服务编排。该系统提供了一个统一的接口,用于管理基于云和本地的 AI 服务,同时处理资源管理、模型切换和服务协调。
AppFlowy 的 AI 架构以 AIManager 为核心编排器,协调包括云 AI、通过 Ollama 实现的本地 AI 以及各种外部服务在内的多个 AI 服务。LocalAIController 专门管理本地 AI 操作,而复杂的模型选择系统则允许根据上下文和用户偏好在不同 AI 提供商和模型之间动态切换。
来源
AIManager 是 AppFlowy 中所有 AI 操作的中央协调器。它管理多个 AI 服务,处理模型选择,并协调不同 AI 提供商之间的通信。
AIManager 使用定义其操作范围的几个关键依赖项进行初始化
ChatServiceMiddleware:提供对云和本地 AI 服务的抽象LocalAIController:管理基于 Ollama 的本地 AI 操作DashMap<Uuid, Arc<Chat>>:活动聊天会话的线程安全存储ModelSelectionControl:处理 AI 模型选择和切换逻辑来源
LocalAIController 通过集成 Ollama 管理本地 AI 处理的所有方面。它处理模型管理、资源验证,并协调本地 AI 操作,同时保持与云服务的隔离。
LocalAIController 使用了几个关键模式
来源
LocalAISetting 结构定义了本地 AI 操作的配置
设置通过 LLMResourceService 特性进行管理,该特性提供本地 AI 配置的持久化操作。
来源
AppFlowy 实现了一个复杂的模型选择系统,支持全局默认设置和上下文相关的模型选择。ModelSelectionControl 管理模型的可用性、偏好和切换逻辑。
模型选择系统使用 SourceKey 对象来标识模型使用的不同上下文。全局活动模型键存储为 GLOBAL_ACTIVE_MODEL_KEY,而上下文特定键则使用聊天 ID 或文档 ID 等标识符。
来源
来源
LocalAIResourceController 处理本地 AI 资源的验证,确保在启用本地 AI 功能之前所有必要组件都可用。
资源验证系统检查三种类型的资源
来源
ChatServiceMiddleware 提供了一个统一的接口,抽象了云和本地 AI 服务,根据模型类型和可用性实现智能路由。
该中间件实现了 ChatCloudService 特性,同时根据 AI 模型类型和本地 AI 可用性状态在内部路由请求。
来源
AI 设置在 UI 中组织成一个分层结构
来源
AI 设置状态在前端使用多个 Bloc 类进行管理
来源
AI 设置系统暴露了多个事件处理器,允许前端与后端交互
来源
AI 设置持久化存储在以下几个位置
LOCAL_AI_SETTING_KEY 存储appflowy_local_ai_enabled:{workspace_id} 存储ai_available_models_key 派生的键存储来源
AI 设置在移动界面中也可用,尽管布局简化了
来源
AI 功能可以通过应用程序中的功能标志进行控制。目前,AI 功能没有特定的功能标志,但该系统旨在未来兼容它们。
来源
AppFlowy 中的 AI 设置和配置系统为用户提供了灵活的方式来定制其 AI 体验。它支持基于云和本地的 AI 处理,并提供配置模型选择、服务器设置和特定功能选项的功能。该系统旨在可扩展,以便未来可以轻松集成和配置 AI 功能。