こんにちは、スクーティー代表のかけやと申します。
弊社は生成AIを強みとするベトナムオフショア開発・ラボ型開発や、生成AIコンサルティングなどのサービスを提供しており、最近はありがたいことに生成AIと連携したシステム開発のご依頼を数多く頂いています。 Difyが話題になっています。DifyとはオープンソースのLLMアプリ開発プラットフォームで、様々なLLMを使用してChatGPTのGPTsのようなものがノーコードで簡単に作れます。 私も早速つかってみましたが、控えめにいって最高です・・・! Difyには機能がかなりたくさん実装されているため、まだまだ検証し尽くせてはいませんが、とりあえずローカル環境に構築し、一通りの動作を確認し、デモとしてSEO記事を作成させてみる、ということをやってみました。 環境構築から動作確認までの一通りの作業内容を本記事で紹介いたします。 目次
本題に入る前に、生成AIとは何か?ChatGPTとは何か?を確認しておきたい方は、下記の記事を御覧ください。
DifyとはDifyの概要
DifyはオープンソースのLLMアプリ開発プラットフォームです。プログラミングの知識がなくても、直感的なテンプレートやドラッグ&ドロップのフロー図を使ってアプリケーションを開発できるのが特徴です。
主にGPT-4やClaude 3、Llama 3などの大規模言語モデルを組み込んだチャットボットやエージェント、AIを使ったワークフローの構築が可能です。DifyはGitHubからリポジトリをクローンしてローカルで利用することも、SaaS形式での利用も可能です。また、商用利用についてもApacheライセンスの下、一部条件を満たすことで許可されています。 機能一覧
Difyのプラットフォームには、以下の機能が含まれます。
また、APIも提供されており、作成したエージェントやワークフローの出力をAPI経由で取得するといったことが可能です。 商用利用について
Difyのライセンスに関してはこちらに記載されています。
Dify is licensed under the Apache License 2.0, with the following additional conditions:
DifyはApache 2.0ライセンスを基にしたオープンソースライセンスのもとで提供されており、商用利用が可能ですが、マルチテナント環境でのSaaSサービス提供時にはDifyからの書面による許可が必要とされます。
また、Difyのフロントエンドコンポーネントを使用する際にはロゴや著作権表示の削除や変更が禁止されています。これにより、企業が独自のサーバーを立て、業務改善ツールとして活用する形式での利用が推奨されています。 DifyはSaaS版も提供されているので、それのクローン版を有料で提供してはいけませんよ、ということなのかと理解しました。「マルチテナント」の定義が不明確なので、この解釈が間違えていたらどなたかご指摘いただけると助かります! また、DifyのAPI経由でDifyの機能を外部システムで利用するという形を取れば、上記の1も2とも無関係に商用利用できるように思います。 Difyのローカル環境を構築する
基本的には、このオフィシャルドキュメントに記載されているガイダンスに従えばローカルPC上にDifyのアプリケーションを立ち上げることができます。エンジニアではない私でも一瞬でできました。
ざっと手順は下記になります。 DifyのレポジトリをローカルにCloneする $ git clone https://github.com/langgenius/dify.git ホーム直下に「dify」というディレクトリができているので、そのディレクトリ内の「docker」ディレクトリまで移動する。 $ cd ~ $ cd dify/docker Dockerコンテナを立ち上げる $ docker compose up -d 下記のようにコンソールに表示されれば完了です。 ただし、Difyはオープンソースプロジェクトで常に更新されているようなので、下記メッセージも今後異なるケースがありそうです。実際、スタートガイドに記載されている完了メッセージと、私のコンソールに表示されるメッセージは異なりました。 [+] Running 9/9 ✔ Network docker_default Created ✔ Container docker-weaviate-1 Started ✔ Container docker-sandbox-1 Started ✔ Container docker-web-1 Started ✔ Container docker-redis-1 Started ✔ Container docker-db-1 Started ✔ Container docker-worker-1 Started ✔ Container docker-api-1 Started ✔ Container docker-nginx-1 Started この処理に若干時間がかかりますが、コンテナが立ち上がったことが上記メッセージで確認できたら、下記URLにアクセスするとDifyの画面が開きます。 http://localhost/install
このようなサインアップの画面が開きます。
言語を複数の選択肢から選ぶこともできます。私は英語を選択しましたが、日本語も選択できます。
2 virtual CPUs (vCPUs) and 8 GB of initial memory
これをDockerで設定しておかないと、コンテナがSwapを使いだしてPCがめちゃめちゃ重くなったりするので注意が必要です。
Dockerデスクトップアプリの 設定(右上のギアアイコン)> Resources から、私は下記のように設定しました。
上記はローカルPCにDockerでDifyをインストールしただけですが、例えば御社環境にWebとDBのサーバを分けて冗長化構成にしたいなどの要望があれば、インフラエンジニアに依頼しないと構築が難しかったりします。
そんなリソースないので、Difyの構築から設定、運用までまるっと任せてしまいたいというご要望ございましたら、ぜひお気軽にご連絡ください! Difyの初期設定を行う
DifyはAPIを経由して複数のLLMと連携する仕組みなので、今回使う(と思われる)LLMのサービスプロバイダーのAPI Keyを登録しておきます。
右上のメニューから「Settings」を選択します。
Settings > Model Providorsを選択します。
すると、Difyで使用できる言語モデル(LLM)の一覧が表示されます。OpenAI(GPT)、Anthropic(Claude)、Gemini、Cohere(Command-R)、Groq(Llama 3)など、一通りの主だったモデルを使用できます。 また、Azure OpenAI serviceも選択できるため、Azure上に外部通信せずにモデルを使用する環境も構築できそうです。
使用したいモデルにカーソルを合わせると、上記のように「Setup」というボタンが表示されるのでクリックすると、
API Keyを入力するためのポップアップが表示されます。ここでAPI Keyを入力すれば、Dify内でそのモデルを使用できるようになります。
わたしは今回、OpenAI(GPT)、Anthropic(Claude)、Groq(Llama 3)を設定しました。 これらのモデルのAPI Key取得方法は、「Groqの超高速環境でMetaの最新LLM「Llama 3」を試してみる」に記載していますので、そちらをご覧ください。 Difyを簡単に試してみるとりあえずチャットボットを試してみる
一通りDifyの設定ができたので、さっそく一番シンプルなチャットボット機能を使ってみようと思います。
画面上部の「Studio」を選択すると上記のような画面が開きます。
「Studio」というのが、Difyで作成したチャットボットやワークフローの一覧画面になります。 左のメニューで、全く新規に作成するか、Difyが予め用意しているテンプレートをもとに作成するかを選択できます。 今回はテスト的にちょっと作ってみたいだけなので、「Create from Blank」を選択します。
「Chatbot」を選択し、適当にこのチャットボットに名前をつけ、「Create」ボタンを押します。
するとまっさらな、チャットボットを設定する画面が表示されます。
左上の「Instructions」の欄に、このチャットボットに何をやってもらいたいのかプロンプトを入力します。 「Variables」はチャット開始時に入力する変数です。今回はテスト的に「theme」という変数を設定し、「theme」に入力されたテーマをもとに短編小説を出力するというチャットボットにしてみました。
InstructionsとVariablesは上記画像のような形です。
右上で言語モデルを選択できます。選択肢は上記でAPI Keyを設定済みのもののみになります。今回はLlama 3(Groq)を選択してみました。 画面右半分で、現時点の設定が反映されたチャットボットを試してみることができます。テーマに「会社」と指定した上で「始めてください」とお願いすると、短編小説が出力されました。 ChatGPTのGPTs風のインターフェイスで、一切コードを書かず、一瞬でチャットボットができてしまいました。 とりあえずワークフローを試してみる
とりあえずチャットボットの動きは確認できたので、次にDifyの目玉機能である「ワークフロー」を作ってみたいと思います。
ワークフローは、色々な機能を一つの要素として作成し、それらをつなげることで、複数のステップを踏まないとできないような作業を自動実行できるようにするものです。
ワークフローは作り方がよくわからないので、テンプレートを使ってみることにします。
テンプレートの「Writing」カテゴリーにちょうど「SEO Blog Generator」なるものがあったので、これを使ってみることにします。
作成後、適当に実行してみると、「builtin provider google not found」というエラーがでました。
このワークフローではGoogle検索機能を使用するため、Google検索の「Tool」の設定が必要、というエラーのようです。
「Tool」というのはプラグインのようなもので、Google検索やWebサイトスクレイピング、論文検索などの特定の機能を追加することができます。
Google検索はSerpApiというサービスを経由してAPI連携する仕組みになっており、SerpApiのサービス利用開始には、メールと電話番号の認証が必要でした。
これらの認証完了後にログインすると、左メニューに「Api key」というメニューがあるので、そこからAPI keyを取得し、Dify側のGoogle検索のToolに登録すれば、Google検索のToolが利用できるようになります。
Google検索のToolの設定が完了すると、ワークフローの設定画面が開きました。
ワークフローは上記のように、いくつかの機能が数珠つなぎのようになっています。各要素で何をやっているかはクリックすれば確認することができます。
このテンプレートでは、まず最初にユーザーにいくつかの情報の入力を促し、記事タイトルが空白だったらGoogle検索結果からタイトルをLLMが自動生成し、タイトルから導入文を生成し、、、みたいなことをやっています。 テンプレートとして設定されているものを一つ一つ確認すれば、だいたいワークフローの設定の方法がわかってきました。 ただ、Variable Assignerというものがいまいちわからなかったので、こちらの公式ドキュメントを調べてみました。 The Variable Assigner node serves as a hub for collecting branch outputs within the workflow, ensuring that regardless of which branch is taken, the output can be referenced by a single variable. The output can subsequently be manipulated by nodes downstream.
直前の枝分かれしたタスクの出力を集約して、一つの変数として次のタスクに受け渡す役割のようです。うーん、必要なのか・・・?
とりあえず、このテンプレートを基本的にそのまま使用することにし、せっかくなので、モデルをgpt-3.5-turboからgpt-4-turboに変更してみました。
右上の「Run」をクリックすれば、ワークフローを実行することができます。実行というのは、左から順番に設定された作業を順番に、一番右のものまで実行するということです。
分岐があり、「タイトルが入力されていれば上の処理、されていなければ下の処理」という定義のハズなので、タイトルを入力しなくても実行できるはずと理解していたのですが、「タイトルの入力は必須」というエラーがでました。
よくわからないので、タイトルを入力して再実行しました。
そうすると、無事、一番右の処理まで進み、記事(らしきもの)が出力していることが確認できました。記事の質はまだなにもチューニングしていないのでさておき、これが無料でできるのはすごいな!
どうでしょうか?ここまで一切プログラムを書かず、かつ、無料でできてしまうのはすごいですよね!とはいえ、環境構築にはサーバの知識が必要で、Difyの初期設定も結構たいへんということも実感された方もいらっしゃると思います。
Difyを社内で導入したいけど、面倒なものはもう全部まるっと任せてしまいたいというご要望ございましたら、ぜひお気軽にご連絡ください! DifyのワークフローでSEO記事を作ってみる
ワークフローの作り方がだいたいわかったところで、弊社独自の方法を注入したワークフローでSEO記事作成をやってみたいと思います。
公開されているURLの内容をリライトして、新しい記事を作成するというワークフローを想定してみました。ただ、これをちゃんとワークフローで作ろうと思うとちょっと長くなりそうだったので、今回はタイトル、導入文、見出し構成のみ作成するワークフローを作ってみました。
上記のようにそれっぽいものができました!
ワークフローは上記のような感じで作ってみました。
作成したワークフローにはAPIが自動生成され、ワークフローの出力をAPI経由で取得することもできて便利そうです。 ただ、Difyの画面内では、ワークフローの出力がJSONのため、そのままコピペして使うことができず、微妙な感じなので、「Agent」で同じことをやってみることにしました。 やっぱりDifyのAgentでSEO記事を作ってみる
Difyには似たような機能で「Assitant」と「Agent」というものがあって、正直何が違うのかイマイチわかりませんでした。
しかし、「Agent」のほうだけToolを使用することができ、ワークフローでも使用したWeb Scraperを使用することができるため、「Agent」を選びました。
今回作成してみたAgentの設定です。ざっと下記のような設定をしています。
作成したあとに、右上の「Publish」ボタンから、一般的なチャットインターフェイスが立ち上がり、作ったエージェントを使用することができます。
上記が実際にエージェントが作成したSEO記事になります。
微妙に指示に従っていない部分がありますが、とりあえず一発目作ってみたエージェントの動作としてはいい感じなんじゃないでしょうか!
上記が、エージェントと実際にやり取りしている様子です(2倍速)。
こんなちゃんとしたエージェントを全くプログラムを書かずに作成できるオープンソースって、、、すごすぎます! まとめ
Difyとにかくすごい!
アプリケーションを立ち上げるまでの簡単さ、機能の豊富さ、衝撃! 今回は動作を確認するために細かい設定やプロンプトのチューニングなどは全くしていませんが、もう少し深堀れば業務で結構使えそうです。 また、APIが自動で生成されるという点も非常に大きく、ワークフローを作って、その出力をAPIで外部システムから取得するという方法で用途が結構あると思いました。 生成AIを使用したシステム開発のご要望はこちらから
最後までお読みいただき、ありがとうございます!
弊社では、LLM(大規模言語モデル)やアーキテクチャの選定、技術検証、生成AIを使用したプロトタイピングやシステム開発、お客様社内での啓蒙活動等を対応させていただく「生成AIコンサルティング」サービスを提供しています。 また、業務利用できるChatGPTのような仕組みである「セキュアGAI」も提供しています。 もちろん、Dify導入のお手伝いもさせていただいています! もし本記事で生成AIに興味が湧き、生成AIとのシステム連携などのニーズがございましたら、ぜひ下記フォームからお気軽にお問い合わせください! その他の生成AI関連サービス
|
ベトナムオフショア開発/ラボ型開発
生成AIコンサルティングサービス
安全な環境でChatGPT「セキュアGAI for enterprise」
AIが接客「バーチャルアシスタント」
オフショア開発や生成AIに関する資料はこちらから無料でDLいただけます
アーカイブ
10月 2024
カテゴリー
すべて
最新記事の購読 |
リンクプロダクトブログ株式会社スクーティー生成AIに強みを持つベトナムのオフショア開発サービスを提供しています。優秀なベトナム人エンジニアでチームを組み、安価で高速な開発体制を作りましょう。
|
5/10/2024