ジェネラティブエージェンツの大嶋です。
もくもくDifyで「Difyソースコードリーディング #12 - Dify v1.0.0-beta.1」という勉強会を開催しました。
アーカイブ動画はこちらです。
Difyのソースコードはこちらです。
今回も 戸塚さん と一緒に話しながらコードを読んでいきました!
今回のポイント
今回はDify v1.0.0-beta.1で気になったソースコードを見ていきました。
プラグイン機能
Dify v1.0.0-beta.1の最も大きなアップデートはプラグイン機能です。
公式ドキュメントは以下になります。
この勉強会の時点では、日本語の公式ドキュメントも一部だけGitHub上にありましたが、基本的には英語のドキュメントを見るのがよさそうでした。
dify-plugin-daemon
Difyのプラグイン機能は、DifyのAPIが「dify-plugin-daemon」というコンテナと通信することで実現されています。
「dify-plugin-daemon」というコンテナが追加されたことは、docker/docker-compose.yamlを参照すると分かります。
: plugin_daemon: image: langgenius/dify-plugin-daemon:0.0.1-local :
DifyのAPIのソースコードであるapi/core/plugin/manager/base.pyを参照すると、dify-plugin-daemonに対して通信していることが分かります。
plugin_daemon_inner_api_baseurl = dify_config.PLUGIN_DAEMON_URL plugin_daemon_inner_api_key = dify_config.PLUGIN_API_KEY
dify-plugin-daemonのソースコード
dify-plugin-daemonのソースコードは、Dify本体とは別の以下のGitHubリポジトリで管理されています。
DifyのAPIと異なり、Go言語で実装されています。
dify-plugin-daemonでのPythonコードの実行
DifyのプラグインのPythonコードをアップロードした際、どのように実行されるのか気になったのですが、dify-plugin-daemonのソースコード中でPythonのコードを実行している箇所がなかなか見つかりませんでした。
よくよく見ていくと、DifyのプラグインのPythonコードは、AWS Lambdaで実行されており、dify-plugin-daemonからはLambda関数を呼び出しているようでした。
たとえば以下のファイルは、Lambda関数で動かすコンテナのDockerfileのようです。
cmd/commandline/plugin/templatesディレクトリには、プラグインを実装するためのテンプレートが配置されているようでした。
その他追加されたリポジトリ
Difyのプラグイン機能の追加にあたり、他にもいくつかのGitHubリポジトリが追加されていました。
「dify-official-plugins」は、Difyの公式プラグインが置かれているリポジトリのようです。
「dify-plugins」は、(おそらく)Difyの公式ではないプラグインをMarketplaceに入れたい場合にプルリクエストを出すリポジトリのようです。
「dify-plugin-sdks」は、Difyのプラグインを作成するためのSDKのようです。
「dify-marketplace-toolkit」というリポジトリもありましたが、こちらはよく分かりませんでした。
次回のご案内
以上、今回はDify v1.0.0-beta.1ソースコードを見ていきました。
1時間ほどでしたが、プラグイン機能の実装の雰囲気を把握することができたと思います。
次回の開催日は未定ですが、また大きなアップデートのタイミングで新機能のソースコードリーディングの時間をとりたいです!
また、水曜日にもDifyの活用についてのもくもく会があります。 ご興味ある方はこちらも気軽にご参加ください!