目录
一、引言
在AI应用开发领域,团队协作效率与开发环境管理始终是制约项目质量的关键因素。当多个开发者同时进行知识库管理、AI应调试和功能开发时,传统的单一工作区模式往往导致配置冲突、测试污染和权限混乱等问题。本文将深入解析如何在Dify平台中构建多工作区体系,通过项目工作区与私有工作区的分离管理,作为实现企业级AI应用开发的标准化流程有益的实践。
注意:如果组织计划在生产和开发环境中真正实现Dify多租户,本人建议联系Dify商务部门购买企业版本。下文作为研究测试过程的记录,仅限探索多租户模式下是否符合团队协作开发要求。
二、多工作区的核心价值
在使用Dify进行AI应用开发实践中,我们观察到传统协作模式存在不足:
Dify没有资源权限的管理机制,默认配置仅有一个工作区,由项目团队大家共用。每位成员各自完成开发应用、工作流配置、模型优化与调参等工作。对于其他成员开发的应用,可以任意修改,存在一定危险性,项目因共用开发环境混乱导致代码污染。Dify的单工作区设计虽然降低了使用门槛,却让团队陷入"既要开放协作,又要避免误操作"的两难境地。
传统解决方案:部署两套Dify环境,一套作为基线版本,由配置管理员统一管理,另一套作为开发版本,供项目组共用。然而,在开发环境中,上述问题仍然存在。
为此,本文尝试在一套Dify环境中,建立开发沙箱,为每位成员建立私有工作区,用于开发测试,另外设置一个项目工作区,用于部署单元测试后的应用。每位成员是私有工作区的所有者,拥有完全的管理权限,而在项目工作区,进作为成员身份,权限受限,能够实现一定程度的应用安全管理机制。
三、实现思路
通过研读Dify源代码,我们了解到在/app/api/services目录中的account_service.py中实现了用户注册、认证、工作区管理等功能,通过修改认证代码,可在用户登录后,为没有私有工作区的用户自动建立工作区实现。
四、实施方法
1.备份源代码
进入Api Docker中的目录/app/api/services(注意不是宿主机,这也是许多兄弟不成功的原因),备份feature_service.py和account_service.py
cp account_service.py account_service2.py
cp feature_service.py feature_service2.py
2.修改源代码(需要将docker中的代码copy回宿主机修改)
2.1 修改/app/api/services/feature_service.py:
一:修改第65行(v0.15.3),或修改74行(v1.1.3):
修改Dify默认设置,设置允许建立工作区。
二(测试可行):修改101行(v0.15.3),或修改123行(v1.1.3):
2.2 修改/app/api/services/account_service.py,在171行(v0.15.3、v1.1.3)上方添加代码:
即,在用户成功登录后,如果平台没有自己的工作区,则新建一个私有工作区。
3.重启动Api Docker(如果采用Docker部署Dify)
4.项目成员退出并重新登录Dify平台,即可看到自己的工作区
v0.15.3效果
v1.1.3效果
如上图,第一个是项目工作区,第二个是私有工作区。
2025年3月26日补充
评论区部分兄弟反映:在自己的Dify环境中,按如上方法设置后并未自动建立私有工作区。经本人测试:0.15.3、1.1.3版本均可实现。需要说明的是:
1.修改上述代码不是指git下来的代码,而是docker中的代码,兄弟们需要docker ps,找到Dify的名为“docker-api-1”、“docker-worker-1”两个docker,然后进入其中:
docker exec -it 883 bash #比如“docker-api-1”的conainer id为883
cd /app/api/services
cp account_service.py account_service2.py
cp feature_service.py feature_service2.py
exit #返回宿主机
sudo docker cp 883:/app/api/services/account_service.py account_service.py #把文件copy到宿主机
sudo vi account_serivce.py #按上面步骤修改代码,然后w保存退出
sudo docker cp feature_service.py 883:/app/api/services/feature_service.py #把文件copy到宿主机
sudo vi feature_service.py #按上面步骤修改代码,然后w保存退出
sudo docker cp account_service.py 883:/app/api/services/account_service.py #copy并覆盖docker中的代码
sudo docker cp feature_service.py 883:/app/api/services/feature_service.py #copy并覆盖docker中的代码
docker ps #找到“docker-worker-1”的container id ,比如是c8c
sudo docker cp account_service.py c8c:/app/api/services/account_service.py #copy并覆盖docker中的代码
sudo docker cp feature_service.py c8c:/app/api/services/feature_service.py #copy并覆盖docker中的代码
#重新启动两个docker
sudo docker restart 883
sudo docker restart c8c
另外,如果新邀请加入的成员登录后,没看到私有工作区时(v1.1.3),可由公共工作区所有者,现将加入的成员移除,然后成员重新登录Dify(此时系统会自动建立成员私有工作区),然后公共工作区所有者,再次邀请这些有了私有工作区的成员加入即可。
五、管理跟进
1.项目工作区所有者,将团队成员身份设置为“编辑”,便于其后续导入开发好的应用DSL
2.团队成员在私有工作区完成应用开发与调试,并完成单元测试后,将应用导出为DSL,进入项目工作区导入。
六、注意事项与不足
各个工作区的知识库、模型配置彼此隔离,如果存在公用知识库和模型的话,需要多次配置
上述方法在v0.15.3、v1.1.3版本上测试通过。