即刻App年轻人的同好社区
下载
App内打开
张佳的流量常识
10月前
同步一个昨天折腾一下午的 Dify 经验,适合懂点代码的高端玩家折腾:

为解决如下两个问题:
1)代码节点不能使用 pandas、numpy 等库,提示 operation not permitted
2)上传的文件引入代码节点,无法找到路径,提示 No such file or directory

核心原因:
1)sandbox 沙盒环境权限控制太严格,很多 python 依赖需要的权限超限了;
2)上传的文件在本机电脑,需要挂载到 sandbox 虚拟环境,并且做一下文件名匹配

处理步骤:
1)权限问题-粗暴版

在确保你未来在代码节点中运行的程序都靠谱、不会对电脑造成损害的前提下,直接把沙盒环境的所有权限都打开!

配置路径:你 Dify 的存储位置/dify/docker/volumes/sandbox/conf/config.yaml

在allowed_syscalls:后面添加[0,1,2,3……499]

两个注意:
1.是 0-499的全部数字,不要用我这省略号的
2.allowed_syscalls:和[0,1……]之间要有一个空格

(先别着急重启 Docker,后面配完了一起)

2)权限问题-精细版
allowed_syscalls:后面的数字对应着沙盒环境的 500 个权限类型,你可以根据官方项目下 [FAQ.md](FAQ.md)中第二条的方法,测试出你要运行的代码需要哪些权限,把它们添加进数组里
我一下午有 2/3的时间在一遍一遍的找到底需要哪些编号,最后麻了,直接梭哈……

3)文件路径问题
打开 你Dify的存储位置/dify/docker/docker-compose.yaml

在差不多 677 行左右,找到sandbox的配置区域

确保你的 sandbox 版本是0.2.12

划到最后倒数第三个配置信息 volumes

在最下面添加一行 - ./volumes/app/storage/upload_files:/var/sandbox/sandbox-python/tmp/upload_files

以上两项配置,都需要重启容器才能生效(最好是用 down,而不是 restart)

还没完,文件路径问题到这步只是文件夹对上了,文件名还不匹配……

在工作流里上传的文件,提出来的 file.url 没法用,得自己找到正确的文件名。两种方式:

1.找一下源代码,看这部分是怎么命名的,找到对应关系(使用 uuid.uuid4() 生成的唯一标识符)
2.写个代码根据文件大小+创建时间,查找一下(查询范围是'/tmp/upload_files'),把查到的文件名输出自己拼接文件 URL

(我用了第二个)

参考资料:
www.bilibili.com
github.com
03

来自圈子

圈子图片

AI探索站

113241人已经加入