Difyって何ができるの?!すべて無料で生成AIを使ったツールを作ってみた
はじめに
最近「Dify」という名前をよく耳にするようになりました。Difyは生成AIを使ったアプリを簡単に作成することができるOSS(オープンソースソフトウェア)です。
https://github.com/langgenius/dify
Difyのサービス形態を簡単に説明すると、運営組織は有償でサービスを提供していますが、ソフトウェア自体は 無償で利用 できます。これは、GitLabと同様の形態です(GitLabは、ソフトウェア開発プロジェクトを管理するためのプラットフォームです)。
有償サービス では、ソフトウェアが稼働するサーバーが提供され、アプリケーションをデプロイして公開するところまでが行えます。注目すべきは、10個のアプリまでであれば無償で利用できる 点です。
Difyは収益性のある団体が管理しているため、今後の継続性も期待できます。何より、実際に使ってみた感想としては かなり良く出来ていると感じました。
そこで今回は、Difyを使って生成AIを使ったツールを作っていきたいと思います。
ソースコードを図に変換するアプリ
前回「Gemini 1.5 Pro」を使ってソースコードをシーケンス図やクラス図に置き換えるという試みを行ってみましたが、今回は「Google AI Studio」を使うのではなく「Dify」を使ってそれを実現してみたいと思います。
アプリの概要
このアプリはソースコードを入力するとMermaid形式で図を作成してくれます。下記のURLからアクセスできます。
https://udify.app/chat/yns1HrNVnLvGtvQg
アクセスすると、以下のような画面が表示されます。
アプリの使い方
ざっくりとしたアプリの使い方を記載します。
図の種類を選択: 変換したい図の種類を選択してチャットを開始します。
エージェントとの会話: エージェントが使い方を説明してくれます。
ソースコードの入力: ソースコードを貼り付けます。
Mermaidコードの出力: アプリが Mermaid のコードを出力します。
図の確認: 出力されたコードを https://mermaid.live/ で確認できます。
では、具体的な画面キャプチャを使いながらアプリの操作を行ってみたいと思います。まず、変換したい図の種類を選択してチャットを始めます。
すると、エージェントが使い方を説明してくれます。
挨拶すると、更に詳細なツールの使い方を説明してくれます。
ソースコードを貼り付けてみます。
この際、ソースコードを ``` で括ると精度が上がります。
うまくMermaidのコードを出力してくれました。
出力されたコードを https://mermaid.live/ でチェックしてみます。
以上のような流れで生成AIを使ったアプリケーションを使うことができます。
たまにエラーに成ってしまうものが出力される場合もあるのですが、そこは生成AIガチャを楽しんでください。
Difyによるアプリ実装
ここでは、Difyで行った設定内容に基づいて、アプリがどのように実装されているのか説明します。
アカウント作成とAPI設定
Difyを使用するにはアカウントを作成し、生成AIのモデルを使用するためのAPIを設定する必要があります。使用するモデルによってAPIキーの発行方法は様々ですが、取得したAPIキーをコピペで貼り付けるだけで設定できるので、そこまで難しくはありません。
「Gemini 1.5 Pro」は2024年5月現在無料で使えるため、今回はGeminiのAPIを登録して使用します。
アプリケーションの作成
アプリケーションを作成する形式はたくさんあるのですが、今回使用したのは 「エージェント」 と呼ばれるものです。
まずは適当にアプリの名前を入れて、「作成する」ボタンを教えてみてください。できあがったアプリの設定画面はこのようになっています。
使用するAIのモデルについて
画面右上に設定ボタンがあり、使用する生成AIのモデルを選択することができます。今回は 「Gemini 1.5 Pro」 を設定しています。
手順について
「手順」 の部分は生成AIに渡すプロンプトになります。
ソースコードでは無いと生成AIが判断した場合は「フレンドリーに返事をしてソースコードの入力を促すと共にこのツールの使い方の説明を行います。」という部分が動作する事になります。
変数について
ここは最初に図の種類を選択した際に使用したリストのデータが入っています。選択したデータは変数 convert_type に格納され、プロンプトに反映されます。
コンテキストについて
今回は使用していませんが、追加で何か学習した情報を与えたい場合に使用します。 最初Mermaidのシンタックスを学習させて精度を上げようと考えたのですが、シンタックスのデータを与えるとMermaidのコードでは無くシンタックスについて回答するようになってしまったので止めました。
ツールについて
こちらも今回使用していませんが、外部からデータを取得して回答に反映させたい場合に使います。例えばGoogleの検索結果などがそれにあたります。
ビジョンについて
これは画像を生成AIに与えてその内容から回答を得る際に使うものです。もちろん今回は不要なので使っていません。
チャットの強化について
上記以外の設定として、以下のような機能追加が行えます。 今回は会話の開始時に使い方の説明を行いたかったので 「会話の開始」 を使用しています。
会話の開始について
これはチャットを開始した際に投入される文言を指定することができます。どのような図を作れるかは変数を参照して回答するようにしています。
デバッグとプレビューについて
ここでは入力した設定に従い、生成AIがどのように回答してくれるか確認することができます。
DSLについて
作成したアプリは DSL(ドメイン固有言語) として YAML で出力することができます。
出力したYAMLファイルをインポートすることで、作成したアプリを管理することが出来ます。
なお、今回作ったアプリのDSLはGitHubに置いているので、興味があればインポートして使ってみてください。
注釈
DSL (Domain Specific Language) : 特定のドメイン、つまり特定の領域や用途に特化したプログラミング言語のことです。
YAML (YAML Ain't Markup Language) : データを表現するためのシンプルなフォーマットです。人間が読み書きしやすく、様々なプログラミング言語で扱いやすいという特徴があります。
さいごに
私は以前から生成AIを使う上で、「要求」と「データ」は分離すべきだと考えていました。Difyは、まさにそれを実現してくれるツールです。Difyを使うことで「要求」(プロンプト)部分を管理できるようになり、「データ」だけ与えれば望みの成果物を得ることができるようになりました。
アプリの用途を限定することでプロンプトを入力する手間が省かれるため、今後様々な生成AIを活用したツールが生まれるのではないかと期待しています。
また、Difyには「自動アプリケーションオーケストレーション」(長い…)という機能があり、誰をターゲットにどのような処理を行いたいか入力すれば、自動でプロンプトを考えてくれたりもします。
生成AIの使い方が良く分からない、という人でも気軽に使えるDifyに今後も注目したいと思います。
ではまた!