私は、DuckDB を使用してテキストデータに対して SQL クエリ(SELECT 文)を実行するツール/プラグインを実装しようとしています。
ローカル環境で python -m main を実行してプラグインをデバッグしている際には、添付画像に示すようにクエリツールを正常に実行できました。

しかし、このプラグインをパッケージ化して、ローカルの OSS バージョンまたは https://cloud.dify.ai/ にアップロード・インストールすると、DuckDB ノードが約5分間処理した後、ワークフローが終了してしまいます。
DuckDB の大きなバイナリサイズや類似の要因が、私が直面している問題に影響しているのではないかと疑っています。
ツール/プラグイン(サンドボックス内)で使用可能な Python ライブラリに関する制限について教えていただけますか?
私たちのクラウド版では、セキュリティ上の懸念から、ほとんどのライブラリがデフォルトでインストールされていません。データベース接続やHTTP接続などのアクションはデフォルトで無効になっています。デフォルトのssrf_proxyテンプレートを使用していることを考慮してください。
「いいね!」 1
コメントありがとうございます。
私の理解は正しいでしょうか?クラウド版では使用可能なPythonライブラリに制限があり、プラグインではその制限を回避できないということでしょうか?
もしプラグインでは利用できないライブラリを使用するワークフローを構築する必要がある場合、Difyのプラグインではなく、Cloudflare Workersなどの外部APIベースの拡張機能を実装する方がベストプラクティスでしょうか?
また、self-hosted(クラウド版ではない)バージョンの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
サンドボックスに関しては、上記のドキュメントを参照してください。
- これらのシステムコールは、サンドボックスにすでに追加されています:
0,1,3,8,9,10,11,12,13,14,15,16,16,24,25,35,39,60,96,102,105,106,110,131,186,201,202,217,228,230,231,233,234,257,262,270,273,291,318,334。前のステップで追加された追加のシステムコール番号を比較する必要があります。簡単なスクリプトを使用するか、LLMにその作業を依頼することができます。この場合、追加のシステムコール番号は 5, 17, 28, 63, 204, 237, 281, 435 です。
「いいね!」 1
ありがとうございます。
「xxx.so: 共有オブジェクトファイルを開けない: そのようなファイルやディレクトリはありません」とか「操作が許可されていません」といったエラーは発生していません。ただ、5分間待ってから終了するだけなので、実際にはどのシステムコール制限に違反しているのかわかりません。
しかし、問題はパッケージ化した後だけに発生するため(デバッグ実行では問題なく動作するが、パッケージ化したバージョンでは5分間待たされる)、他の原因があるのかもしれません。調査してみます。
おそらく、PLUGIN_MAX_EXECUTION_TIMEOUTに関係しているかもしれませんが、それは600に設定されています。私たちのクラウド環境でのこの値については確信がありませんが、結果を時間内に取得できない場合、この設定によって実行が終了される可能性があります。