Dify架构分析

Dify系列推荐阅读:

Dify 0.15.3版本 本地部署指南_dify0.15.3-CSDN博客

使用pycharm社区版调试DIFY后端python代码_dify项目debug-CSDN博客

Dify内部工具实现过程-CSDN博客

背景

在AI技术快速发展的背景下,开发者面临着众多选择。Dify作为主流的AI开发平台工具,具有独特的优势。通过Dify系统架构分析,有助于用户更好地了解工具,从而为研发过程提供有力支持。

Dify是一款功能强大的AI开发平台工具,它以其简洁的界面设计和强大的实用性著称。平台提供了丰富且强大的算法库和模型训练功能,使得用户能够快速上手,轻松构建出符合需求的AI应用。这些算法库涵盖了图像识别、语音识别、自然语言处理等多个方面,为用户提供了全面的AI解决方案。用户可以通过简单的拖拽和点击,快速搭建出完整的AI应用,极大地提高了开发效率。

Dify架构特点

在人工智能领域,模型的复杂度和大规模数据的需求是两大核心挑战。为了有效应对这两大挑战,Dify采取了一系列独特的策略,特别是在模块化设计、可扩展性以及兼容性方面展现出了显著的优势。

  • 在模块化设计方面,Dify将系统划分为多个独立的功能模块。这些模块包括数据预处理、模型训练、模型部署等,每个模块都有其特定的功能和接口。这种设计使得这些模块可以独立开发和测试,也可以根据业务需求进行组合和扩展。通过灵活的组合和扩展,Dify能够快速地适应不同的业务场景,满足不同的需求。
  • 在可扩展性方面,Dify的架构支持根据需求动态添加或删除模块。随着业务的发展,如果原有的模块已经无法满足需求,Dify可以快速地添加新的模块,而不需要对原有的系统进行大规模的修改。Dify的计算资源也可以进行动态扩展。通过调整计算资源的分配,可以优化系统,以满足不同场景下的性能要求。
  • 在兼容性方面,Dify展现出了强大的能力。它能够兼容多种数据来源和格式,如结构化数据、非结构化数据、文本数据等。这意味着Dify可以灵活地处理各种类型的数据,而不需要对原有的数据进行特殊的处理或转换。

Dify核心架构

dify一共有三个核心服务:前端、接口服务dify api、异步任务服务dify worker

这里主要介绍一下技术栈:

  • Flask:Python的web的开发框架
  • Celery:Python的分布式消息队列框架,用于异步任务开发
  • Poetry:Python的依赖管理工具
  • Docker:容器化
  • LLM:各种大模型的对接
  • PGSql:关系型数据库
  • Redis:缓存中间件
  • weaviate:向量数据库

Dify核心模块

RAG模块

rag模块实现了多种文档格式的解析、清洗、分段、关键字提取以及向量语义入库。核心模块可以细分为文档解析、索引构建、召回测试、对接大模型。

● 文档解析:

支持txt、pdf、word等等多种文件,使用的是python里面的各种开源框架进行解析。

● 索引构建:

将文档解析的文本提取关键字,清洗、分段,然后根据配置进行语义向量计算并保存到向量数据库。

● 召回:

根据配置的TopN实现多路的召回测试,在agent使用时,提供Top N个文本片段作为prompt的上下文,放到<Context>标签中

● 对接大模型:

配置embadding模型,调用embadding模型的通用REST接口,获取对应文本片段的语义向量并进行保存。

工作流模块

● 工作流的特性

主要有节点自动流转、节点停留、条件流转,同时支持不同节点类型,每个节点有对应的输入和输出。

● 支持的节点类型

目前已知的节点类型如下,无实现的技术难度。

这里核心的节点是LLM节点,用于编辑使用什么模型以及需要提什么问题给大模型。

知识检索节点,用于将用户的提问问题和知识库的知识进行匹配的节点,使大模型拥有知识库上下文的节点。

问题分类器,根据节点配置,配置大模型对应的分类输出。

● 变量系统

如下图,用于提供每个节点配置prompt、配置输入、配置输出的一项核心功能,核心本质是根据不同的节点类型,作为节点的上下文,对这个节点的输入和输出进行字符串替换,无实现的技术难度。

扩展发散一下,这里的变量也可能是低代码平台的字段

● 调试

实际上调试使用的功能就是工作流节点的节点停留,可以调试从开头节点到当前节点的实现逻辑,并将每个节点的运行信息显示在前端的一个基础功能,无实现的技术难度。

大模型对接与管理

市面大模型的配置与接入,也不存在技术难度。

每个模型的运行时都会提供Rest API以及对应的SDK,例如ollama作为模型的运行框架,只需要接入ollama的REST API,以及完成页面配置需要的文件即可。

插件实现模块

● 核心实现过程如下:

使用python作为插件语言,扫描内部的dify/api/core/tools/provider/builtin目录,以获取内置插件,开源版本需要重启核心api服务。本质上是使用脚本引擎实现的,组件定义使用的是yaml作为格式。我们可以自研实现这块完全的逻辑,或者实现其他类似的插件系统,以复用当前的dify插件。

插件的本质是通过YAML文件定义插件的服务名、组织、以及对应的实现脚本。

如下:

aws.yaml的内容

identity:
  author: AWS
  name: aws
  label:
    en_US: AWS
    zh_Hans: 亚马逊云科技
    pt_BR: AWS
  description:
    en_US: Services on AWS.
    zh_Hans: 亚马逊云科技的各类服务
    pt_BR: Services on AWS.
  icon: icon.svg
  tags:
    - search
credentials_for_provider:

aws.py的内容

from core.tools.errors import ToolProviderCredentialValidationError
from core.tools.provider.builtin.aws.tools.sagemaker_text_rerank import SageMakerReRankTool
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController


class SageMakerProvider(BuiltinToolProviderController):
    def _validate_credentials(self, credentials: dict) -> None:
        try:
            SageMakerReRankTool().fork_tool_runtime(
                runtime={
                    "credentials": credentials,
                }
            ).invoke(
                user_id="",
                tool_parameters={
                    "sagemaker_endpoint": "",
                    "query": "misaka mikoto",
                    "candidate_texts": "hello$$$hello world",
                    "topk": 5,
                    "aws_region": "",
                },
            )
        except Exception as e:
            raise ToolProviderCredentialValidationError(str(e))

总结

Dify 是一款功能强大的 AI 开发平台工具,以其模块化设计、高可扩展性和广泛兼容性著称。其架构分为应用服务、核心模块和基础设施三部分,支持从数据预处理到模型部署的全流程开发。核心模块包括 RAG(支持多格式文档解析、索引构建和语义向量入库)、工作流(支持节点自动流转和条件分支)以及插件系统(基于 YAML 和 Python 实现)。Dify 兼容多种数据格式和大模型(如通过 REST API 对接 LLM),并利用 Flask、Celery、Docker 等技术栈实现高效开发与部署。此外,平台通过 PGSQL、Redis 和向量数据库(如 Weaviate)管理数据,满足高性能需求。Dify 的灵活性和易用性使其能够快速适应不同业务场景,显著提升 AI 应用的开发效率。


作者:道一云低代码

作者想说:喜欢本文请点点关注~

更多资料分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道一云黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值