ジェネラティブエージェンツの大嶋です。
もくもくDifyで「Difyソースコードリーディング#1 ―Difyのシステム構成をざっくり把握」というイベントを開催しました。
アーカイブ動画はこちらです。
Difyのソースコードは以下です。
ポイントのまとめ
今回ソースコードリーディングしていて、ポイントだと思った点をまとめます。
docker/docker-compose.yaml
まず、今回は第一回としてDifyのシステム構成(フロントエンド・バックエンド・データベースなどの構成)を把握したかったので、そのあたりが把握できそうなファイルから読んでみました。
Difyのソースツリーを見るとdockerというディレクトリがあり、その中にあったdocker-compose.yamlを読むと、基本的なシステム構成を把握できるようになっていました。
docker/docker-compose.png
同じディレクトリにはとくに中心的な構成要素のつながりを整理した図もあり、参考になりました。
CONTRIBUTING_JA.md
その後、コントリビュータ向けのCONTRIBUTING_JA.mdを開いて読んでみると、ソースコードの構成についての説明もあり、ソースコードリーディングの起点として役立つ内容がたくさん記載されていました。 CONTRIBUTING_JA.mdには、以下のような内容が記載されていました。
- モデルプロバイダーやツールプロバイダーを追加するときに読むべきガイドへのリンク
- バックエンドがFlask・SQLAlchemy・Celeryで作られていること
- フロントエンドがNext.js・Tailwind CSSで作られていること
- バックエンドとフロントエンドのおおまかなディレクトリ構成
Difyのソースコードリーディングに挑戦する方は、まずはこのCONTRIBUTING_JA.md(またはCONTRIBUTING.mdなど)を読んでみるのがおすすめです。
api/core/model_runtime/model_providers/openai/llm/gpt-4o-2024-08-06.yaml
OpenAIのLLMとのインテグレーションについては、モデルごとの機能やコンテキストサイズなどがYAMLファイルに記載されており、モデルの追加時に素早く対応できるようになっていました。
api
その後、apiディレクトリ(バックエンド)のソースコードをざっと見て、雰囲気をつかんでいきました。
api/models
データモデルに対応するコードも簡単に見て、今回のソースコードリーディングは終了となりました。
次回のご案内
Difyソースコードリーディングの第2回として、次回はDifyの開発環境を起動していろいろさわってみるつもりです。 ご興味ある方はぜひ気軽にご参加ください。
また、水曜日にもDifyのもくもく会が開催されます。 こちらではDifyの使い方の解説として、テンプレートをみていく予定となっています。 こちらもご興味ある方はぜひ気軽にご参加ください。