![](/media/0kU5aeZ2MtHOklo6Dqetja7Qpoq6utAj9Cjkp4S5.png)
Dify(ディファイ)をGoogle Cloudにデプロイしてみた
![](/media/9kmjPQYYKH7hBRAwcgAzQqjoLAyilHwwxBPwBKaW.png)
プログラミングなしで生成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
![](/media/g79jGKte0BmkVQYZlVg3EHTMBmU2Qo9a93tZwGsm.jpeg)
研究開発部 部長。言語系AIとプロダクトを管轄。2001年に当社の母体である北海道大学 調和系研究室を卒業(修士)。B2Bミドルウェアの開発、通信関連の研究開発を経て、AI研究が再度の盛り上がりを見せてきた2019年1月、調和技研に参加。大きなうねりの中にあるAI業界に身を置くことができて、毎日スリリングです。
関連記事
![](/media/0kU5aeZ2MtHOklo6Dqetja7Qpoq6utAj9Cjkp4S5.png)
![](/media/U5J2Irg58mBTJtDqqRAY6nTPrkICHsrqxrI24U6A.png)
ChatGPTのAPI利用料金比較|最新モデルGPT-4o miniも検証
- ChatGPT
![](/media/FFvpWH3wQZbiCRpdVqn4WJzcybvAZUzOAlqkMbnQ.png)
Langchain+Neo4j で「GraphRAG」を実装してみる
- ChatGPT
- 生成系AI
![](/media/Gfi2z0OjZhyynoOrREhvuw31wAXiAZeQMWDIK9sl.png)
数理最適化ソルバー活用事例|組合せ最適化で社内交流会の班分けを自動化
- 数値系AI
![](/media/CUN7HwRozmRPfnymOz6CWInO6ZGZfwy4nFVU6EMU.png)
GoogleのマルチモーダルLLM「Gemini.1.5 Flash」の精度を検証してみる
- ChatGPT
- 生成系AI
- 言語系AI
![](/media/5SLAm3C1fbd7cmbeaxSPGAASB7fnX5Zqs2R5Aua5.png)
3次元点群データを用いた物体検出
- 画像系AI
![](/media/4YpBl7V8nRLzGAAeHDVET9kQgjJUzya9AHsdW8Wc.png)
GPT-4oを活用した画像検索システムの構築方法
- 画像系AI
- ChatGPT
![](/media/ZshzC1xHn5P2AHrVbIKsIyzDRf0nhIm1OatlfX6X.png)
Pythonコーディングを簡単に|LangChainで効率化【LLMことはじめ Vol.2】
- ChatGPT
- 言語系AI
![](/media/UWISG91DMtO9RJIZJExWnri0TCTtKIRnPuDHieNQ.png)
Google のオープンLLM「Gemma」を試してみる|GPT-3.5 Turboとの比較あり
- ChatGPT
- 生成系AI
- 言語系AI
![](/media/yJv3iu6XjU2kz1x3YjkEBGgpedN4jk6ZaRnp3i99.png)
3次元点群データとAIを用いたオガ粉の体積計測
- 画像系AI
![](/media/gfJFLuMTGFSiOScnkD7bjZs30SZllLzs4VqAm7y9.png)
Llama 3 の日本語継続事前学習モデル「Llama 3 Youko 8B」を試してみる|他LLMとの比較あり
- ChatGPT
- 言語系AI
- 生成系AI
![](/media/mMySjPBYLVi4y40jdfYtIYmxA6efckvOA1XqVXpc.png)
RAG(Retrieval Augmented Generation)を「Command R+」で試してみた|精度をGPT-4 Turboと比較
- ChatGPT
- 生成系AI
![](/media/ZwWg5OczgP5OMZkT7dfddIUaNcDuWbHrS5oir6FO.png)
Wood Powder Volume Calculation using Point Cloud Data and AI
- 画像系AI
![](/media/V3OZEyye1XjXD2GhIFCTRPSFQdsdOeIU9xTMebHP.png)
“Azure OpenAI”で始めるPythonプログラミング【LLMことはじめ Vol.1】
- 生成系AI
- 言語系AI
- ChatGPT
![](/media/EU2DtcghWlGGoONyB5DhN2EZbxEBSf2cgPEEm6Gs.png)
Combating the Malicious Use of AI-Powered Image Editing: A Deep Technical Dive
- 生成系AI
- 画像系AI
![](/media/RRe5hk4FDI6es5v4XGoSTFQNVySsD2DQgN4bl3Re.png)
最新版「GPT-4 Turbo」を試してみた|GPT-4oとの比較あり(5/14追記)
- ChatGPT
![](/media/S3rIKBSCpgDNC23DSh5PIvj5teVHEcoxCZyQJFhh.png)
PrecisionとRecallを何度も調べ直さないために
- 言語系AI
![](/media/nWUSA1Zqv1vw1znnQEIObgp8aWM5YTeS7hg8nVKw.png)
Stable Diffusion+LoRAを使って異常画像データを生成できるか検証してみた
- 生成系AI
- 画像系AI
![](/media/iRtBf75KhYX251Ii1kVy5QZDEjvZJCB4D8mkP5RQ.png)
大規模言語モデルによるソースコード生成:GitHub CopilotからCopilot Xへの進化と未来
- 生成系AI
- 言語系AI
![](/media/L6XRjNVA7cXbSx12dMXBVIzY8nUAyxng0NwimELV.png)
AI導入の前に知っておくべき基礎知識(後編)――効率的に自業務にAIを導入するための4ステップ
- 数値系AI
- 画像系AI
- 言語系AI
![](/media/xHSvAHeI2HVFe4OIo06Fpcm5oNDCIafkTo50rnBc.png)
配達ルート最適化AIにより作業時間80%削減を実現。成功の鍵は“人とAIの調和”
- インタビュー
- 数値系AI
![](/media/6b03Wy6bdmLKIzKzH5TOQI9kkAi244cGKeoNp12q.png)
AI画像生成の法的リスク(後編):著作権侵害を回避するために
- 生成系AI
- 画像系AI
![](/media/06OgceY26V0caQDuitXYHUjXyta1nnwFDqDoHiqP.png)
AI画像生成の法的リスク(前編):著作権法の基本を学ぼう
- 画像系AI
- 生成系AI
![](/media/wG3wiIj9DHMPltnUnr12CVGlT14xp5PkvjV6bcbw.jpg)
AIというツールを使い 「生命たらしめるもの」が何かを見つけたい【調和技研✖️AIの旗手 Vol.4】
- インタビュー
![](/media/EfNyy9eFyKBx3x8nSWHe0Wz3rdri4yNiVoC7YnUv.png)
AI導入の前に知っておくべき基礎知識(前編)――AIのキホンと活用事例
- 数値系AI
- 画像系AI
- 言語系AI
![](/media/AuRiXSKwcttM5AGZp1cSFtYXowkYfAMYAdBaTr2S.jpg)
AIアルゴリズムの構築には、 課題の本質を見極めることが重要 【調和技研✖️AIの旗手 Vol.3】
- インタビュー
![](/media/qR1vJ91e9UsX9eHEK3wc8i5ewaDBx6LookcnwZhT.png)
CNNで浮世絵画風変換はできるのか――Ukiyolator開発ストーリー Vol.2
- 画像系AI
- 生成系AI
![](/media/Q1Z23PpXv5RlyneQ74XsrETLrCFxdPxINiRo9N3n.png)
住宅写真という資産をAIで利活用し、工務店とお客様をつなぐ新たなビジネスを創造
- インタビュー
- 画像系AI
- ChatGPT
![](/media/MRQknIFug2iq41ft2sxUoIiDVmidoAkSkFo0ip2J.png)
シフト最適化への応用が期待される強化学習を用いた組合せ最適化の解法
- 数値系AI
![](/media/IqBM8Ma4LwFzOvZbl6pDvmhYzidmCIzjeC8xj36l.jpeg)
多彩なサービスと紐づく「交通」の課題解決で地域の活性化や住みやすさの向上を【調和技研×AIの旗手 Vol.2】
- インタビュー
![](/media/TWSKEx9ILntxCsOd4aSIIuzLaGPL9IcFIr3uQmjD.png)
AIプロダクトを開発する際に考えるべき品質保証のキホン
- 数値系AI
- 生成系AI
- 画像系AI
- 言語系AI
![](/media/aQ9UboF9UZ6Srpyd2SJzmZbQhtW7rQEoHHB11B3i.png)
Microsoft GuidanceでのFunction Calling機能の使い方とその特徴
- ChatGPT
- 言語系AI
![](/media/lEljl7p7a5a8W0VGpgNE4SZZVkNU5NaGWc0Vt3RI.png)
Segment Anything Model(SAM)を使いこなそう!パラメータ設定のポイントも徹底解説
- 画像系AI
![](/media/wDIykeD4UKQbn8trExY1lcKuVFj44nrsKakNYfsJ.png)
Stable Diffusionを使って異常画像データを生成できるか検証してみた
- 画像系AI
- 生成系AI
![](/media/mfpZotz74q9yLc65k7g1ElN8lXPlAnn98ievMjcW.png)
基礎から解説!数値系異常検知の概要と代表的な手法
- 数値系AI
![](/media/vWGjafKg2r7BXDp2jR9D6boXc5WLlBXxfCfnDqJj.png)
実践!ChatGPT×Slackの具体的な連携方法と日常業務での効果的な活用事例
- ChatGPT
- 言語系AI
- 生成系AI
![](/media/TpMnQ6BhjAbAZwFBWTv7OTg0l9uvLuAyinlyZz5z.png)
最先端AI技術で浮世絵を現代に再現する――Ukiyolator開発ストーリー Vol.1
- 画像系AI
- 生成系AI
![](/media/ZudTEf6HSeXwzB1XZTyfaOYEoJM4T2BEQcrDK6EJ.png)
PaDiMとPatchCoreどちらを選ぶべき?異常検知モデルの選択肢を見極めるポイント
- 画像系AI
![](/media/Ph3D7hLtDpSexw8drqOD8r3f4BsZPbS5cGWhD1dk.png)
社内の暗黙知を可視化するナレッジネットワークでイノベーションが生まれやすい環境に
- インタビュー
- 言語系AI
![](/media/A5wQ9Hgz9Tqa4yWrXwe0szUzec7fcl7FF0CiBWt0.jpeg)
人の幸せや社会の豊かさに、AIをいかに「調和」させるか【調和技研×AIの旗手 Vol.1】
- インタビュー