news 2026/5/15 4:13:13

dify1.11.1后端api源码编译及调试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dify1.11.1后端api源码编译及调试

1 环境准备

  • OS系统:Windows 10
  • vscode: 1.107.1(user setup)
  • uv:0.9.18

2 依赖安装

  • vscode打开api,调出终端,输入uv sync进行依赖安装
cd api uv sync

3 虚拟环境选择

  • 依赖安装完成后,vscode右下角设置下当前目录下的虚拟环境

4 测试代码是否爆红

  • 此时,先随便打开一个py文件,如下面的redis插件扩展,不出意外报红如下:
  • 上述只是在静态编译期间爆红提示,并不是真正的错误,不影响运行,如果看着难受,可以降低pylance的严格级别,什么是pylance,看下面!

  • 在dify的api根目录下有一个文件是:pyrightconfig.json,修改配置如下(pyrightconfig.json:python的类型检查文件,类似于typescript的tsconfig.json):

  • 再次打开之前的py文件,发现不报错了(强迫症治好了)

5 复制配置文件

  • 复制一份配置文件(不然直接启动app.py会报错,如右边)
cp .\.env.example .env

6 正常启动server

  • api入口文件是app.py,由于是启动文件,代码很简单(有点类似于SpringBoot的App.java中的main函数),如下:
  • 如果系统源码改动期间,可以热启动,可以增加配置如下


7 源码调试

  • 如果系统需要源码调试,则将api根目录下的.vscode/launch.json.example复制一份出来

  • 将其内容中的python一行全部注释掉,总过两处(不注释,启动会报错!!!)

  • 将“justMyCode”由之前的true修改为false,以支持进入第三方库调试,为什么之前设置为true,看下面👇

  • 改为结果如下:

  • 接下来就可以,F5启动调试了,效果如下

  • 继续F5,触发设置条件(数据库的扩展插件)

  • 这里的db是 SQLAlchemy 的实例

  • 因为之前设置过允许跳入到三方包中进行调试,所以按F11可以看到如下

  • 上面这个SQLAlchemy调用init_app函数时,会从当前app的config中读取一个名为"SQLALCHEMY_DATABASE_URI"的属性,这个属性的值默认如下:


  • 那这个值是怎么来的呢?答案Python的多重继承,直接看下面的图

../api/configs/app_config.py

  • 继续
../api/configs/middleware/__init__.py



8 Flask源码调试

  • 上面仅在Python普通代码里打断点是没问题的,如果想进入到Flask里面,比如路由api上的装饰器以及路由内的代码,需要将launch.json中的一个配置修改为false,如下:

  • 最终效果如下(下面是每一个请求前,都要验证下dify是否部署过,一旦部署过,表dify_setups会有一条记录,有记录就放行,否则会抛异常!):

9 总结

  • dify后端的代码写的很漂亮,模块化责职分明、代码高内聚、低耦合,利用插件的可插拔思想可以很容易扩展新的功能需求,等等。一开始调试代码时总感觉有点ioc的影子,flask框架中的app感觉就像ioc中的context,存储了整个web服务运行期间所需的各种数据,有配置、有实例(中间件如redis、db、obs这种的client)等,这些在任何代码可触及的地方都可以随拿随用。当然Flash是轻量级的,虽然比不上SpringBoot框架,但是上手是真的快。
  • 最近在封装一个dify-api-core的组件,npm仓库地址:https://www.npmjs.com/package/dify-api-core,部分演示效果如下:



版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 4:13:05

别再满篇Delve into!过来人实测3种英文论文降AI方法(附工具测评)

马上要临近答辩了,还有的同学在发愁英文摘要和全英文章怎么降低aigc率。英文文本的句式本来就很固定,比如大量的被动语态和从句,这就很容易被系统标记,尤其对于我们这种非英语母语者来说,更是无从下手。 今天我就结合…

作者头像 李华
网站建设 2026/5/15 4:10:16

【附源码】用C语言实现俄罗斯方块

【附源码】用C语言实现命令行版俄罗斯方块 作为经典的益智游戏,俄罗斯方块承载了许多人的童年记忆。本文将详细介绍如何使用纯C语言在Windows控制台环境下实现一个完整的俄罗斯方块游戏,涵盖核心算法、渲染优化和交互设计。一、项目概述 本项目是一个功能…

作者头像 李华
网站建设 2026/5/15 4:09:50

人机协同智能体(Human-in-the-loop)设计模式与最佳实践

从零到落地:构建高效可控的人机协同智能体(Human-in-the-loop)设计模式与最佳实践副标题:从ChatGPT插件监控到企业级合规风控,覆盖全场景的HITL实践指南摘要/引言 问题陈述 2023年被称为大语言模型(LLM&…

作者头像 李华
网站建设 2026/5/15 4:07:49

Go语言ARP工具包:从协议原理到网络诊断实战

1. 项目概述:一个被低估的网络诊断利器 如果你在运维、网络安全或者仅仅是喜欢折腾家庭网络的圈子里混过一段时间,大概率听说过或者用过 arp 命令。但大多数人,包括很多从业者,对它的认知可能还停留在“查看IP和MAC地址对应关系…

作者头像 李华
网站建设 2026/5/15 4:04:12

ARM性能采样机制与PMSFCR_EL1寄存器详解

1. ARM性能采样机制概述在现代处理器性能分析领域,硬件辅助的采样技术已成为不可或缺的工具。ARM架构通过FEAT_SPE(Statistical Profiling Extension)扩展提供了一套完整的性能采样解决方案,其中PMSFCR_EL1寄存器扮演着采样过滤控…

作者头像 李华