メインコンテンツへスキップ
見出し画像

【ローコード】生成AIアプリケーション開発ツールDifyの主なブロックの使い方

    Difyという生成AIアプリケーションをローコードで開発出来るツールが2ヶ月くらい前から話題になっているようです。
    ChatGPTなどのチャットボットを自分で作れたり(※)、簡単なワークフローを作れたりします。
    ※チャットボットを自分で作る意味としては、自分専用だったり会社専用の情報を保有しているチャットボットを作れるというのがあります!

    1. 環境設定

    まずはDifyを使えるようにする方法を説明します。
    なんと、Difyはオープンソースを提供しているため、自分のPCのローカルに無料で構築することができます!
    具体的な方法については、私は以下の記事を参考にさせていただきました。

    2. 各タブの説明

    Difyにログインすると以下のような画面が広がっています。
    各タブについて軽く説明していきます。

    画像
    Difyの画面

    2-1.探索

    Difyが事前に用意してくれているテンプレートがたくさん用意されています。
    具体的には書籍翻訳、自動メール送信、SEOブログジェネレーター、議事録ジェネレーター、旅行コンサルタント、SQLクリエーター……
    など10数個あります。テンプレートをそのまま使っても十分使えますし、自作する際に「どんな風に作ってるのかなぁ」「このブロックはどういう風に使うのかな?」という参考にもなります。

    2-2.ナレッジ

    LLMだけで回答を作成するのが難しい専門的な質問に対する回答のために、知識を事前に与えておくことができます。
    テキストファイルをアップロードしたりすることで、この知識を習得した上で回答を作成することができます。これが"ナレッジ"です。

    画像
    ナレッジのアップロード画面

    2-3.ツール

    ツールとしてGoogleやBingなどのサーチ、DALL-Eなどの画像生成AI、YahooFinanceなどの金融情報……等々
    外部ツールのAPIKeyを登録することで、ワークフローの中に組み込むことができます。
    これによって、専門的な質問に対してはGoogle検索を行ってから、その検索結果をもとに回答を生成する、みたいなことができます!
    perplexityみたいな感じですね。

    画像
    ツールの一例

    2-4.スタジオ

    このタブで実際に自分用のチャットボットやチャットフロー、ワークフローを作成できます。
    チャットフロー、ワークフローではLLMをただ使うだけでなく、【知識習得】や【質問分類器】といった様々なブロックが用意されています。
    では、さっそくどのようなブロックがあるのか見ていきたいと思います。

    3. 各ブロックの説明

    3-1.LLM

    大規模言語モデルLLMを呼び出すことができます。chatgptだけでなくgeminiやclaudeなどの様々なバージョンが利用可能です。

    画像
    LLMの設定画面
    画像
    モデルの1例

    ただし、利用するためにはアカウントの設定画面からモデルプロバイダーにAPIKeyを設定する必要があります。APIKeyの入手ページリンクが張ってありますのでそこから飛んで入手しましょう。
    2024/7/13現在で無料で利用可能なのはgeminiだけで、他は有料クレジットが必要そうです。

    3-2.知識習得

    LLMが持っていないような専門の知識を先ほど紹介した"ナレッジ"にアップロードしたテキストファイルなどから読み込ませることができます。
    これを使えば、社内の資料などを読み込ませて専用Q&Aボットを作ったりできそうです。

    3-3.回答

    LLMが出力した文章を回答させたり、出力した文章と固定文言をセットにして回答させたりできます。

    画像
    回答の設定画面

    3-4.質問分類器

    入力された質問を大雑把に分類することができます。分類にもLLMを使うので、どのモデルを使うかはLLMブロックと同じように選ぶことができます。
    この分類器を使うことで、
    ・そのまま"LLM"に繋げるか
    ・一旦"知識習得"を挟むか
    などのより良い回答を導き出すための工夫をすることができます!

    画像
    質問分類器の設定画面

    3-4.IF/ELSE

    入力された内容を条件に従って厳密に分岐させることができます。質問分類器よりも明確な決まりを持って分岐を行いたい時に使えそうですね。
    例えば、
    ・youtubeの内容要約アプリでユーザーにyoutubeのURLを入力させる場合に、入力されたURLに"youtube"と含まれていなかった場合は「youtubeのURLを入力してください」と回答する、みたいな制御を入れられそうです!

    画像
    IF/ELSEの設定画面

    3-5.イテレーション

    配列に対して繰り返し処理を行わせることができます。
    大量の文章の翻訳をさせるときなんかに入力文章を分割して配列に格納して、順番に処理する……みたいな利用例が公式では紹介されていました。一度に処理できるトークン数が決まっているので、分割して処理しているということですね!

    画像
    イテレーションの設定画面

    3-6.コード

    名前のとおりコードを書くことができます。利用可能な言語はPython3とJavaScriptです。
    後述する"HTTPリクエスト"というブロックによって取得したJSON 文字列の解析、抽出、変換などの非構造化データ処理を行ったりできます。
    あとは、数学的な計算を実施したい場合や、取得したデータの連結などを行いたい場合にも使えます。

    画像
    コードの設定画面

    3-7.テンプレート

    変数を定義することができます。
    例えば、LLMへの指示文で「あなたは〇〇の専門家です。」といったような文章がよくあると思うのですが、ワークフロー中の全てのLLMにこれを指示するのは手間ですよね。このテンプレートに指示文を変数として定義しておくことで、LLMへの指示文では変数を記述するだけOKとなります。

    画像
    テンプレートの設定画面
    ここではテキストの結合に利用しています

    3-7.変数集約器

    変数を集約できます。ワークフローの前半でIF/ELSEや質問分類器で処理の分岐が発生しているけど回答ブロックはひとつに集約したい時に用います。

    画像
    変数集約器の設定画面
    画像
    使用例

    3-8.パラメータ抽出

    "HTTPリクエスト"や検索ツールの前段として、自然言語からパラメータを抽出できるようです。

    3-9.HTTPリクエスト

    リクエストを特定のURLに送ってそこから何かしらの返却値を受け取るブロックです。
    何かのサイトへアクセスして返却値を利用したい時や、ワークフローでメッセージの自動送信をしたい時などに有用そうですね!

    画像
    HTTPリクエストの設定画面

    4. 実際に作成

    画像
    スタジオの画面

    試しに、入力された文章が
    ・専門的な内容だったらGoogle検索してその内容を踏まえて回答
    ・一般的な内容だったらLLMだけで回答
    ・質問ではなく、会話や悩み相談だったら、質問に回答する堅苦しい文章ではなく会話らしい内容で応答
    というチャットフローを作ってみました。

    かなり簡単に自分用のチャットボットを作成できました!
    (やってみると質問分類器の挙動が若干怪しい部分はあります笑)

    ここまで読んでいただきありがとうございます。
    Difyはこれからどんどん流行っていきそうな予感がしますので、これからもちょっとずつ学んでいきたいと思います!

    <公式ページ>


     
     
    技術力の乏しい自分に不安を覚えているSIerです。仕事は定型的な管理業務が多いので、何か始めたいなと思いnoteを始めました。主に自分が学んだことをアウトプットも兼ねて書いています。アイコンの『sloth(すろーす)』をモチーフとした「SWC」というコミュニティに入ってます!

    あなたへのおすすめ