我正在尝试实现一个使用 DuckDB 在文本数据上执行 SQL 查询(SELECT 语句)的工具/插件。
当我在本地环境中运行 python -m main 以调试插件时,能够成功运行查询工具,如附图所示。

然而,当我将此插件打包并上传/安装到我的本地 OSS 版本或 https://cloud.dify.ai/ 上时,工作流在 DuckDB 节点处理约五分钟之后就会终止。
我怀疑 DuckDB 的大二进制文件大小以及类似因素可能影响了我所遇到的问题。
您能否告诉我关于在工具/插件(沙箱)中可以使用的 Python 库的限制?
在我们的云版本中,由于安全考虑,大多数库默认情况下未安装,数据库连接和HTTP连接等操作也默认被禁用,请注意我们正在使用默认的ssrf_proxy模板。
1 个赞
感谢您的评论。
我的理解是否正确:云版本对可以使用的 Python 库存在限制,而插件无法绕过这些限制?
如果我需要构建一个使用插件中不可用的库的工作流,那么最佳实践是否是通过在 Dify 外部实现基于 API 的扩展(例如使用 Cloudflare Workers)来替代使用插件?
在自托管(非云)版本的 Dify 中,是否可以通过修改 ssrf_proxy 设置或其他配置更改来避免这些限制?
我的理解是否正确,即云版本对可以使用的 Python 库有限制,且插件无法绕过这些限制?
我们不会在云版本中限制特定的库,这些限制是在 squid.conf 中配置的,而在运行器(即 AWS Lambda 容器)中,也可能存在其自身的限制。
如果我需要构建一个使用插件无法使用的库的工作流,那么最好是在 Dify 之外通过 API 扩展(例如使用 Cloudflare Workers)来实现,而不是使用插件吗?
很遗憾,是的。
在自托管(非云)版本的 Dify 中,是否可以通过修改 ssrf_proxy 设置或其他配置更改来避免这些限制?
是的,大多数库需要特定的端口来连接其他服务,如数据库、Elasticsearch 等。
感谢您的评论。
DuckDB(https://duckdb.org/)只是一个用于执行查询(SELECT 语句)的引擎,因此它不需要连接任何外部服务,也不需要通过特定端口进行通信。
我已经确认可以在 AWS Lambda 中使用 https://duckdb.org/docs/stable/clients/python/overview 执行查询,所以我怀疑这可能是 Dify 的沙箱环境中的特定问题。
例如,是否存在某些限制,比如无法使用像 pandas 这样的大型库?
1 个赞
谢谢。
没有出现诸如“xxx.so: 无法打开共享对象文件:没有那个文件或目录”或“操作不允许”之类的错误;它只是等待五分钟然后退出,因此我不确定它是否真的违反了任何系统调用限制。
不过,由于问题只在打包后出现——调试运行正常,但打包版本会让我等待五分钟——我会检查是否可能存在其他原因。
也许这与 PLUGIN_MAX_EXECUTION_TIMEOUT 有关,但它的设置值是 600。我不确定在我们的云环境中这个值是否合适,但如果你无法在规定时间内获取结果,那么该设置可能会终止执行。