Difyのsandboxにライブラリを追加する方法
Contents
- Overview
- Preparation
- Add library to test code
- Run test
- Update config file
- Add library to requirements file
- Start Dify
Overview
Difyのsandboxは、DifyのAIエージェントがコードを実行するための安全な環境です。
追加でライブラリをインストールしたい場合、sandbox起動時に設定ファイルにライブラリ名を記載しておく必要があります。
一方で、デフォルトでは、実行できるシステムコールがホワイトリスト形式で制限されています。
設定ファイルに許可したいシステムコールを追加することで、この制限を緩和することができます。
そこで、以下の方法で、インストールしたいライブラリで利用しているシステムコールを特定し、希望するライブラリを使えるようにしたいと思います。
Preparation
Dockerを使って、dify-sandboxのコンテナを起動します。(Difyのアプリケーションとしてではなく、単独で起動します。)
docker run --rm -it --entrypoint bash langgenius/dify-sandbox:0.2.12検証に必要なパッケージをインストールします。
apt updateapt install -y golang git sudo vim auditd
pip install -U pip setuptoolsテストコードを入手し、追加で必要なパッケージをインストールします。
cd /tmpgit clone https://github.com/langgenius/dify-sandboxcd dify-sandbox
./install.shAdd library to test code
以下のファイルに、sandboxに追加したいライブラリをインポートするコードを追加します。
import numpy
# 省略# 既存のコードは変更しません。プログラムが動作するように、OSにもパッケージをインストールします。
pip install numpyRun test
以下のコマンドで、テストコードを実行します。
go run cmd/test/syscall_dig/main.goすると以下のようなエラー出力が発生し、最後に必要なシステムコールの一覧が表示されます。
failed with signal: bad system callfailed with signal: bad system call (core dumped)...
...failed with signal: bad system callFollowing syscalls are required: 0,1,3,5,8,9,10,11,13,14,15,16,28,35,39,60,75,105,106,125,195,202,210,217,231,233,234,251,256,257,262,268,280,281,296,300,308,321,325,334,340,342,348,350,355,356,363,378,386,408,417,418,425,434,438,445,453,465,467,471,482,483,488,490,491,492,494,497もし、セキュリティの懸念がなければ、以下のコマンドで利用可能なすべてのシステムコールが出力されます。これらを許可することもできます。
ドキュメント上は必要なシステムコールのみに絞ることが望ましいとされていますが、テストしてみたところ、うまくライブラリが利用できなかったため、結果として、すべてのシステムコールを許可するのがスムーズかもしれません。。
ausyscall --dumpUpdate config file
上記のシステムコールを、sandboxの設定ファイルに追加します。
Docker composeを使ってDifyを起動している場合、 docker/volumes/sandbox/conf/config.yaml に設定ファイルがあります。
allowed_syscalls: - 0 - 1 ...Add library to requirements file
追加したいライブラリを、docker/volumes/sandbox/dependencies/python-requirements.txt に追加します。
numpyStart Dify
更新したら、Difyを起動し、コードブロックで追加したライブラリが利用できるか確認します。