
Dify(ディファイ)をGoogle Cloudにデプロイしてみた

プログラミングなしで生成AIアプリケーションを開発できるとあって話題になっている「Dify(ディファイ)」。今回は、社内でフローなどを共有しながら検証するために、クラウド上に検証環境を作ってみました。
Difyとは?
Difyは、LangGenius, Inc.が提供するオープンソースのLLMアプリ開発プラットフォームです。LLMに特化したノーコードツールということで、現在、非常に盛り上がっているLLM関連OSSの1つです。
また、開発元がSaaSとしても提供[1]しています。フリー版もありますのでこちらでお試しするのがもっとも簡単です。
上記のようなかたちで、LLMアプリケーションをノードとフローで記述します。
個人的にGoogle Cloudを勉強しておく用事もあったのでGoogle Cloud上に構築してみましたが、バグを踏んでしまい、中々大変でした。(バグについては後述します)
構成
構成図は以下で、VM上でdocker-composeを使い、データベースとストレージにGoogleのマネージドサービスを使っています。
ちなみにこちらの図はEraser AI[2]を使って書きました。言葉で指示をだして図を書かせることができます。
図でWeb Applicationと省略しているコンテナ部分ですが、VM上で動かしているコンテナは以下の7つです。
- api
- worker
- web
- redis
- sandbox
- ssrf_proxy
- nginx
Difyのコンテナ構成はこちらで、本家のリポジトリ[3] にあります。
Cloud Runを使って構成することもできるそうですが、状態を持つredisはCloud Runには載せられません。これもマネージドサービスを使うとちょっと試すにしてはお高くなっていくのでやめました。お試し用途では、全部VMでも、もちろん問題ないと思います。
Google SQL (PostgreSQL)はベクトル検索の拡張機能もサポートしていますので、デフォルトのweaviateの替わりになります。psqlなどで入って以下のようなSQLで機能を有効化します。
CREATE EXTENSION IF NOT EXISTS vector;
あとは、SSL用の証明書を作ってnginxに設定したら完成です。
…というほどすんなりとはいかず、2つほどトラブルが起きました。
お試し中に起きた2つのトラブル
1)workerが動かない
結論から言うとDBのパスワードに記号が入っていると、celeryに与えるDBのアクセス情報をceleryがパース出来ずworkerが起動しません。「今時、こんな仕様があるのか」と驚いたのですが、界隈では常識でしょうか。
うっかりパスワード管理ツールなどで記号入りのパスワードを作ると、はまってしまうのでした。
2)Google Storageが使えない
こちらも結論から言うと、Dify側のバグでした。
Google Storageを使う際に特定のサービスアカウントを使う構成をとった場合、環境変数で与えたキー情報の読み込みに失敗するバグと、ファイルのアップロード時にもバグがあり、ソースコードを修正する必要がありました。
コンテナをビルドしコンテナレジストリをGCPに建て、そちらにpushしたコンテナを使って、ようやく期待の動作ができました。
提出したPull Request[4]は、最新のv0.6.11 にマージされています。
Difyを上手に活用していく
Difyを使いこなすまでの紆余曲折を書きましたが、Dify自体はLLMを始めるツールとして、とても優れたツールです。当社でも技術検証などで活用していく予定です。
【参考文献】
[3]https://github.com/langgenius/dify/blob/main/docker/docker-compose.png

研究開発部 部長。言語系AIとプロダクトを管轄。2001年に当社の母体である北海道大学 調和系研究室を卒業(修士)。B2Bミドルウェアの開発、通信関連の研究開発を経て、AI研究が再度の盛り上がりを見せてきた2019年1月、調和技研に参加。大きなうねりの中にあるAI業界に身を置くことができて、毎日スリリングです。
関連記事


2024年 年末のAI関連発表について
- ChatGPT
- 生成系AI
- 言語系AI

OpenAIが公開したLLMの事実性を評価する指標「SimpleQA」でモデルを測定してみた
- 生成系AI
- 言語系AI
- ChatGPT

AI導入に必須!PoC(概念実証)を成功させる進め方とポイント

The AI Scientist:AIによる論文の自動生成|さまざまな研究テーマを提案させてみる
- 生成系AI
- ChatGPT
- 言語系AI

AI Agent Vol. 1【Single AgentとMulti Agent】
- ChatGPT
- 生成系AI
- 言語系AI

AI活用成功に導く「AI導入アセスメント」とは――数理最適化AI事例をもとにポイントを解説

Llama 3 の日本語継続事前学習モデル「Llama-3-ELYZA-JP-8B」を試してみる
- 生成系AI
- 言語系AI
- ChatGPT

「戻れない変化」を生み出し続ける。コンサルを通して見極める業界DX実現への道筋
- インタビュー
- 生成系AI
- ChatGPT

サステナビリティ領域で活躍するAI―SDGs×AI活用事例
- 数値系AI
- 画像系AI

MetaのオープンLLM「Llama3.2 3B-Instract」の精度を検証してみた|GPT4o-miniとの比較あり
- 生成系AI
- 言語系AI

OpenAIの軽量モデル「GPT-4o mini」を試してみる
- 生成系AI
- 言語系AI
- ChatGPT

Microsoft「GraphRAG」とLangchainの知識グラフを活用したRAGを比較
- ChatGPT
- 言語系AI
- 生成系AI

ChatGPTのAPI利用料金比較|最新モデルGPT-4o miniも検証
- ChatGPT
- 言語系AI
- 生成系AI

Langchain+Neo4j で「GraphRAG」を実装してみる
- ChatGPT
- 生成系AI
- 言語系AI

数理最適化ソルバー活用事例|組合せ最適化で社内交流会の班分けを自動化
- 数値系AI

GoogleのマルチモーダルLLM「Gemini.1.5 Flash」の精度を検証してみる
- ChatGPT
- 生成系AI
- 言語系AI

3次元点群データを用いた物体検出
- 画像系AI

GPT-4oを活用した画像検索システムの構築方法
- 画像系AI
- ChatGPT

Pythonコーディングを簡単に|LangChainで効率化【LLMことはじめ Vol.2】
- ChatGPT
- 言語系AI
- 生成系AI

Copilot for Microsoft 365で「PowerPoint」を使いこなす
- 生成系AI

Google のオープンLLM「Gemma」を試してみる|GPT-3.5 Turboとの比較あり
- ChatGPT
- 生成系AI
- 言語系AI

3次元点群データとAIを用いたオガ粉の体積計測
- 画像系AI

Llama 3 の日本語継続事前学習モデル「Llama 3 Youko 8B」を試してみる|他LLMとの比較あり
- ChatGPT
- 言語系AI
- 生成系AI

RAG(Retrieval Augmented Generation)を「Command R+」で試してみた|精度をGPT-4 Turboと比較
- ChatGPT
- 生成系AI
- 言語系AI

Wood Powder Volume Calculation using Point Cloud Data and AI
- 画像系AI

“Azure OpenAI”で始めるPythonプログラミング【LLMことはじめ Vol.1】
- 生成系AI
- 言語系AI
- ChatGPT

Combating the Malicious Use of AI-Powered Image Editing: A Deep Technical Dive
- 生成系AI
- 画像系AI

最新版「GPT-4 Turbo」を試してみた|GPT-4oとの比較あり(5/14追記)
- ChatGPT

PrecisionとRecallを何度も調べ直さないために
- 言語系AI

Stable Diffusion+LoRAを使って異常画像データを生成できるか検証してみた
- 生成系AI
- 画像系AI

大規模言語モデルによるソースコード生成:GitHub CopilotからCopilot Xへの進化と未来
- 生成系AI
- 言語系AI

AI導入の前に知っておくべき基礎知識(後編)――効率的に自業務にAIを導入するための4ステップ
- 数値系AI
- 画像系AI
- 言語系AI

配達ルート最適化AIにより作業時間80%削減を実現。成功の鍵は“人とAIの調和”
- インタビュー
- 数値系AI

AI画像生成の法的リスク(後編):著作権侵害を回避するために
- 生成系AI
- 画像系AI

AI画像生成の法的リスク(前編):著作権法の基本を学ぼう
- 画像系AI
- 生成系AI

AIというツールを使い 「生命たらしめるもの」が何かを見つけたい【調和技研✖️AIの旗手 Vol.4】
- インタビュー

AI導入の前に知っておくべき基礎知識(前編)――AIのキホンと活用事例
- 数値系AI
- 画像系AI
- 言語系AI

AIアルゴリズムの構築には、 課題の本質を見極めることが重要 【調和技研✖️AIの旗手 Vol.3】
- インタビュー

CNNで浮世絵画風変換はできるのか――Ukiyolator開発ストーリー Vol.2
- 画像系AI
- 生成系AI

住宅写真という資産をAIで利活用し、工務店とお客様をつなぐ新たなビジネスを創造
- インタビュー
- 画像系AI
- ChatGPT

シフト最適化への応用が期待される強化学習を用いた組合せ最適化の解法
- 数値系AI

多彩なサービスと紐づく「交通」の課題解決で地域の活性化や住みやすさの向上を【調和技研×AIの旗手 Vol.2】
- インタビュー

AIプロダクトを開発する際に考えるべき品質保証のキホン
- 数値系AI
- 生成系AI
- 画像系AI
- 言語系AI

Microsoft GuidanceでのFunction Calling機能の使い方とその特徴
- ChatGPT
- 言語系AI

Segment Anything Model(SAM)を使いこなそう!パラメータ設定のポイントも徹底解説
- 画像系AI

Stable Diffusionを使って異常画像データを生成できるか検証してみた
- 画像系AI
- 生成系AI

基礎から解説!数値系異常検知の概要と代表的な手法
- 数値系AI

実践!ChatGPT×Slackの具体的な連携方法と日常業務での効果的な活用事例
- ChatGPT
- 言語系AI
- 生成系AI

最先端AI技術で浮世絵を現代に再現する――Ukiyolator開発ストーリー Vol.1
- 画像系AI
- 生成系AI

PaDiMとPatchCoreどちらを選ぶべき?異常検知モデルの選択肢を見極めるポイント
- 画像系AI

社内の暗黙知を可視化するナレッジネットワークでイノベーションが生まれやすい環境に
- インタビュー
- 言語系AI

人の幸せや社会の豊かさに、AIをいかに「調和」させるか【調和技研×AIの旗手 Vol.1】
- インタビュー