菜单

核心系统

相关源文件

本文档详细概述了 Dify 的核心功能系统及其实现。它涵盖了 Dify 的 AI 应用开发平台的主要后端系统,包括知识管理、工作流执行、模型提供商集成和应用编排。

有关部署架构和服务配置的信息,请参阅 系统架构。有关特定 API 端点的详细信息,请参阅 API 参考

系统概览

Dify 的核心系统协同工作,为构建 AI 应用提供了一个全面的平台。该架构围绕几个关键子系统构建,这些子系统处理 AI 应用生命周期的不同方面。

核心系统概述 来源: api/services/dataset_service.py1-100 api/core/workflow/nodes/llm/node.py1-50 api/core/provider_manager.py1-50

知识管理系统

知识管理系统实现了检索增强生成(RAG)能力,处理文档处理、索引和检索,为 AI 应用服务。

知识管理核心组件

该系统以 DatasetService 类为中心,该类管理知识库的完整生命周期

  • 数据集管理DatasetService.create_empty_dataset() 方法创建新的知识库,支持可配置的索引技术(high_quality 用于向量索引,economy 用于关键字索引)
  • 文档处理:文档通过 DocumentService.save_document_with_dataset_id() 管道进行处理,处理文件上传、文本提取和分段
  • 向量索引VectorService 类管理嵌入生成和向量数据库操作,以实现语义搜索
  • 检索配置RetrievalModel 实体定义搜索方法(hybrid_searchsemantic_searchfull_text_search)和重排设置

来源: api/services/dataset_service.py77-237 api/services/vector_service.py19-50 api/controllers/service_api/dataset/document.py33-95

工作流引擎

工作流引擎执行基于图的工作流,具有各种节点类型,通过可视化编程实现复杂 AI 应用逻辑。

工作流引擎实现

核心工作流执行由 LLMNode 类及相关组件处理

  • 节点执行LLMNode._run() 方法协调完整的节点执行生命周期,包括变量获取、模型调用和结果处理
  • 变量管理VariablePool 在工作流执行过程中跟踪变量,支持节点之间复杂的数据流
  • 事件驱动架构:节点发出 RunStreamChunkEvent 等事件以实现实时流式传输,并发出 RunCompletedEvent 以处理完成事件
  • 模型集成LLMNode._invoke_llm() 方法处理模型调用,支持流式响应和结构化输出

来源: api/core/workflow/nodes/llm/node.py110-297 api/core/workflow/entities/variable_pool.py api/core/workflow/nodes/event.py

模型提供商集成

模型提供商系统管理与各种 LLM 提供商的集成,处理凭据、负载均衡和模型生命周期管理。

提供商集成架构

模型提供商系统围绕几个关键组件构建

  • 提供商发现ModelProviderFactory.get_providers() 从插件系统中发现和初始化可用的模型提供商
  • 配置管理ProviderManager.get_configurations() 处理提供商凭据、配额和首选提供商选择
  • 模型实例化ModelManager.get_model_instance() 创建配置好的模型实例,并提供适当的凭据和负载均衡
  • 托管支持HostingConfiguration 管理系统提供的模型,并为不同提供商类型提供配额控制

来源: api/core/provider_manager.py51-243 api/core/model_manager.py30-100 api/core/hosting_configuration.py43-100

应用管理系统

应用管理系统负责 AI 应用的生命周期,包括配置、发布和运行时管理。

应用生命周期管理

Dify 中的应用遵循由应用系统管理的结构化生命周期

  • 应用创建:应用以特定类型和配置创建,这些类型和配置决定了其行为和功能
  • 配置:应用维护模型设置、提示模板和数据集绑定,这些定义了其功能
  • API 访问:每个应用可以拥有多个 API 密钥,用于不同的访问级别和使用情况跟踪
  • 运行时执行:应用通过工作流引擎执行,不同类型的应用遵循不同的执行模式

来源: api/models/model.py api/controllers/service_api/app/ api/services/app_service.py

账号与租户管理

多租户架构支持工作区隔离和跨平台基于角色的访问控制。

多租户架构

账户和租户系统提供工作区隔离和访问控制

  • 租户隔离:所有资源(数据集、应用、对话)都通过 tenant_id 字段限定在特定租户范围内
  • 基于角色的访问:用户在工作区内具有不同的角色(OWNERADMINEDITORNORMALDATASET_OPERATOR
  • 权限管理:细粒度权限控制对数据集等资源的访问,通过 DatasetPermissionEnum 设置
  • 资源范围限定DatasetService.check_dataset_permission() 等方法强制执行租户边界和基于角色的访问

来源: api/services/dataset_service.py472-508 api/models/account.py api/services/account_service.py

集成点

核心系统通过明确定义的接口和共享的数据模型进行集成

系统集成架构

核心系统之间的集成遵循以下模式

  • 事件驱动通信:系统通过诸如 RunRetrieverResourceEventModelInvokeCompletedEvent 等事件进行通信
  • 共享上下文VariablePool 为工作流执行提供共享状态管理
  • 租户范围的服务:所有操作都限定在租户上下文中,以实现适当的隔离
  • 凭证集成:模型提供商与租户特定的凭证管理集成

来源: api/core/workflow/nodes/llm/node.py462-522 api/core/workflow/entities/variable_pool.py api/core/workflow/nodes/event.py