Difyのsandboxにライブラリを追加する方法

Posted on
621 words, 3 minutes to read

Contents

Overview

Difyのsandboxは、DifyのAIエージェントがコードを実行するための安全な環境です。

追加でライブラリをインストールしたい場合、sandbox起動時に設定ファイルにライブラリ名を記載しておく必要があります。

一方で、デフォルトでは、実行できるシステムコールがホワイトリスト形式で制限されています

設定ファイルに許可したいシステムコールを追加することで、この制限を緩和することができます。

そこで、以下の方法で、インストールしたいライブラリで利用しているシステムコールを特定し、希望するライブラリを使えるようにしたいと思います。

Preparation

Dockerを使って、dify-sandboxのコンテナを起動します。(Difyのアプリケーションとしてではなく、単独で起動します。)

Terminal window
docker run --rm -it --entrypoint bash langgenius/dify-sandbox:0.2.12

検証に必要なパッケージをインストールします。

Terminal window
apt update
apt install -y golang git sudo vim auditd
pip install -U pip setuptools

テストコードを入手し、追加で必要なパッケージをインストールします。

Terminal window
cd /tmp
git clone https://github.com/langgenius/dify-sandbox
cd dify-sandbox
./install.sh

Add library to test code

以下のファイルに、sandboxに追加したいライブラリをインポートするコードを追加します。

cmd/test/syscall_dig/test.py
import numpy
# 省略
# 既存のコードは変更しません。

プログラムが動作するように、OSにもパッケージをインストールします。

Terminal window
pip install numpy

Run test

以下のコマンドで、テストコードを実行します。

Terminal window
go run cmd/test/syscall_dig/main.go

すると以下のようなエラー出力が発生し、最後に必要なシステムコールの一覧が表示されます。

failed with signal: bad system call
failed with signal: bad system call (core dumped)
...
...
failed with signal: bad system call
Following 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

もし、セキュリティの懸念がなければ、以下のコマンドで利用可能なすべてのシステムコールが出力されます。これらを許可することもできます。

Note

ドキュメント上は必要なシステムコールのみに絞ることが望ましいとされていますが、テストしてみたところ、うまくライブラリが利用できなかったため、結果として、すべてのシステムコールを許可するのがスムーズかもしれません。。

Terminal window
ausyscall --dump

Update config file

上記のシステムコールを、sandboxの設定ファイルに追加します。 Docker composeを使ってDifyを起動している場合、 docker/volumes/sandbox/conf/config.yaml に設定ファイルがあります。

conf/config.yaml
allowed_syscalls:
- 0
- 1
...

Add library to requirements file

追加したいライブラリを、docker/volumes/sandbox/dependencies/python-requirements.txt に追加します。

dependencies/python-requirements.txt
numpy

Start Dify

更新したら、Difyを起動し、コードブロックで追加したライブラリが利用できるか確認します。

このBlogの内容は個人の意見に基づくものであり、 所属組織団体の公式見解とは異なる場合があります点、ご了承ください。