バックエンド
貢献
コード構造
以下のコードファイル構造を参照すると、コードの構成をより理解しやすくなります。
原理
現在、コアロジックには2つの主要なエントリーポイントがあります。1つはDifySandbox
のHTTPサービスエントリーポイント、もう1つは動的リンクライブラリのエントリーポイントです。Sandboxがコードを実行する際、まず一時的なコードファイルが生成されます。このファイルの冒頭で動的リンクライブラリを呼び出して実行環境(Sandbox)を初期化し、その後にユーザーコードが実行されます。最終的に、ユーザーが提出したコードを直接実行するのではなく、この一時ファイルを実行することで、システムの安全性を確保します。
動的リンクライブラリでは、Seccomp
(Secure Computing Mode)を使用してシステムコールを制限しています。許可されるシステムコールはstatic
ディレクトリのnodejs_syscall
およびpython_syscall
ファイルに定義されており、ARM64とAMD64の両アーキテクチャ向けのシステムコールホワイトリストを提供しています。特別な理由がない限り、これらのファイルを変更しないでください。
貢献方法
タイポやバグなどの小さな問題については、直接プルリクエスト(PR)を送信してください。大規模な変更や新機能の提案については、まずイシューを作成し、議論を行ってください。
今後の課題
現在検討中の課題がいくつかあります。興味があれば、以下のタスクに取り組んでいただけます:
- 新しいプログラミング言語のサポート:
- 現在、PythonとNodejsをサポートしていますが、他の言語のサポートも検討しています。
- 新しい言語を追加する際は、ARM64とAMD64の両アーキテクチャに対応し、安全性を確保するためのCIテストを提供する必要があります。
- Nodejsの依存関係の問題:
- 現在、Pythonの依存関係のサポートは完了していますが、Nodejsについては
node_modules
の複雑さから、まだ適切な解決策がありません。この課題に取り組んでいただけると助かります。
- 現在、Pythonの依存関係のサポートは完了していますが、Nodejsについては
- 画像処理:
- 将来的にマルチモーダルが主流になると予想されるため、Sandboxでの画像処理のサポートは重要です。
- Pillowなどのライブラリのサポートを追加し、DifyからSandboxに画像を渡して処理できるようにすることを検討しています。
- 包括的なCIテスト:
- 現在のCIテストはまだ不十分で、基本的なケースしかカバーしていません。より広範なテストの追加が必要です。
- マルチモーダルデータの生成:
- Sandboxを使用して、テキストと画像を組み合わせたデータなど、マルチモーダルデータの生成に挑戦してみてください。
このページは役に立ちましたか?