見出し画像

DifyのChat Flowで創ったAIアプリ----黒魔女ベラドンナ様の人生相談01

はじめに

Difyが話題です。このnoteにも記事がいくつかありますが、You TubeやUdemyなどにも関連動画や講座ができています。

Difyとは

Difyは、初めは、Chat GPTのGPTsと同じような機能をChat GPTも含む各社のLLMを使って実現することのできる開発ツール、、だったのですが、比較的最近、ワークフローが導入されました。

これにより、node(ノード)と呼ばれる様々な機能をもつモジュールを接続して、ワークフローとして形成することにより、チャットなどのLLMを使ったアプリケーションを比較的容易に開発することのできる開発ツール、となっています。

それぞれのnodeの定義を日本語などの言語ベースで行うことができるので、ノーコードでアプリを開発できます。
なお、定義をプログラム言語で行うこともできます。

また、RAGを使って、会社の独自の諸規則を引用して回答させたり、グーグル検索やWolframなどによる様々な情報をLLMに提供して回答の内容と精度を飛躍的に高めることができます。

これ以上の、Difyって何?、とか、各種機能の詳細について、などは、YouTubeなどを参照頂くと言う前提で以下のメモを記載します。
なお、いくつか参考とした動画などは、途中でご紹介したいと思います。

本記事の内容

今回は、色々と調べながら具体的にAIアプリとしてチャットボットをDifyのChatFlowを使って創ってみましたので、その制作関連のメモを残すというのが主な目的です。

私は、つい最近、Difyを知りました。PC(MacBookAir)に環境構築して1週間程度です。なお、よく比較されるOpenAIのGPTsを作ったことはありません。
そして、チャットボットとエージェントって、何が違うの?と検索するレベルです。ま、はっきり言って、初心者(以下?)です。

そんなレベルですが、、、

ありていに言えば、初心者ならではの、なんで?とか、なにこれ?の連続だったので、まぁ、忘れないうちにメモっとこうというわけです。

もしかして、他の方にも、少しは役に立つかもしれません。

なお、Difyについては、テンセントの開発チーム出身の人が中心となっているようです。それに関連して様々な情報も飛んでいるようですが、そのあたりをnoteの下記のKyutaroさんの記事が丁寧に調べて纏めて頂いています。

ちなみに、本記事の冒頭の絵は、Leonardo.AIを使って作成しました。
魔女のベラドンナ様の別の背景で作ったオリジナル画像を、Style Referenceで、白い部屋に登場してもらいました。頼んでもいないのに、手から火を出しちゃってます。彼女には、Leonardo.AI関連のブログ記事で、時々出演頂いています。

このメモのポイント

今回のメモのポイントを示します。

1.Dify専用環境の構築(事前設定)
Difyを、dockerでGitHubからPCにインストールして、専用の動作環境を作り動作させました。つまり現在は無料でDifyを使えます。その代わり、クローズドです。同様にして、AWSとかに構築すると、グループワーク等にも展開できるようです。

環境構築にあたっては、KEITOさんのこのYouTube動画がとても参考になりました。Mac用ですが、ほぼ同様の手順でWindowsにも適用できると思います。

ただし、アップデートについては、別途情報が必要です。
インストール直後に、0.6.9から0.6.10に上がったので、対応しようとして結構四苦八苦でした。
ちなみに、今回のAIアプリ程度でしたら、Webアプリの無料版で十分試せると思います。やってませんので、推定ですが。

2.ChatFlowによる開発
Difyの特徴であるワークフロー形式のChatFlowでチャットボットを作成しました。このようなツールは、GPTsにはありません。チャットボットの従来の概念を超えて大幅に機能を拡張できる可能性を秘めた機能だと思います。

LangChainベースのFlowiseAIを連想しますが、それよりも、プログラマー経験の浅い初心者には入りやすいと思います。

なお、ChatFlowについては、後述します。

3.複数のLLM選択が可能
Difyの特徴の一つが多種のLLMを使うことができることです。今回は、開始の時に、5つのLLMから選択できる機能を入れてみました。
各LLMについては、後で少し説明をします。

今回のAIアプリについて

はっきり言って、AIアプリなどという代物ではないのですが、実際に作ろうとすると、こんなことに引っかかった、ということの備忘録メモ集のためのアプリ例その1という位置づけかと思います。

と言いながら、以下では、AIアプリと呼びます。

Difyのワークフローの各node(下のフロー図のそれぞれの小さな四角)の機能と可能性を見ていると、チャットボットとか、エージェントなどといったカテゴライズとかとかが、今後ますます曖昧になる、もしくは拡張されてくるように思えたからです。チャットボットやエージェント等々の上位概念といった位置づけです。

今後nodeの種類も増えてきそうで、楽しみですし、学び甲斐もありそうです。

概要

今回のAIアプリの全体フローを示します。とはいえ、小さくてよく見えないので、それぞれの役割を1から7までで、下に追加記載しました。

今回のAIアプリの全体フロー

今回のAIアプリは、質問者が、黒魔女のベラドンナ様へ、色々な人生の悩みなどを質問して、答えを得る、という機能です。

全体フローは、ざっと以下のような動作の流れとなっています。

1.開始 (Start)
開始で、2つの変数を入力します。質問者側の質問事項をシステム変数(sys.query)に入れます。これはもともと組み込まれています。また、どのLLMを使うかを、選択してもらい、その結果を独自に設定した変数に入力します。

2.検索 (Tool/ Google Search)
関連する機能として、次のステップで、質問事項についてGoogleからの検索結果を得ます。ただし、このあたりは、ちょっと使い方が変かもしれません。

3.LLM分岐 (Question Classifier)
選択されたLLM毎に対応するそれぞれのLLMに接続します。

4.各LLM処理 (LLM)
次に、LLMに2つの変数を引き渡しします。質問者側が開始時に選択したLLMに対して、質問事項と参照データ(Google検索結果)とを引き渡します。

5.各LLM出力の統合 (旧 Variable Assigner、現 Variable Aggregator)
帰ってきたベラドンナ様からのLLMの回答を、一つの変数に組み込みます。

6.翻訳 (LLM)
事前の検証の際に、LLMによっては、回答が英語のケースがあったので、念のため翻訳機能を入れます。
プロンプトに記載しても同じ機能を発揮できますが、学習のために、あえてnodeとしていれました。

7.回答 (Answer)
最終的な回答をテキストで出力します。最後にGoogle検索結果をベースとした参照情報も提示します。

その他のnode(ブロック)

現時点(6/18 2024)ではその他に以下のブロックが可能です。

Chat Flowについて

DifyのChat Flowの注を以下に紹介します。

Chatflow(BETA):上級ユーザー向け
ワークフロー オーケストレートは、ワークフロー形式でチャットボットをオーケストレートし、組み込みのプロンプトを編集する機能を含む高度なカスタマイズを提供します。経験豊富なユーザー向けです。

上級ユーザー向けとのことで、最初はパスして初級者向けの基本を試用してたのですが、、、YouTubeで紹介されている画像では、皆様上級だからか、こちらを使って、サラサラと色んな機能を作って見せてくれてます。それも簡単そうに。

私は、上級でも経験豊富でもありませんが、こっちの方が面白そうだったので触ってみました、という次第です。

したがって、このAIアプリは、動作はしますが、nodeの設定とか使い方が間違っているかもしれません。気づいたら即修正の予定ですが、そのあたりはご容赦ください。

今回用いたLLMsについて

この時点で、私が使うことのできたLLMの一覧を示します。
これは、各ユーザーの設定のモデルプロバイダーという項目の画像です。

それぞれ、APIを設定済みです。この中で、OpenAIとGeminiは、説明の必要がないと思いますが、面白いのが、nvidiaとcohere、groqです。いずれも最初は無料で使えます。

nvideaを使えるようにすると、各社のLLMが使えるようになります。今回は、Llama3-70bをここから使ってます。今でも選べるLLMの数は多いのですが、今後増えるような気がします。なんせ儲かってますし、引いては自社のためにもなるので。

また、同様に、MistralのMixtral8をGroq経由でつかっています。

cohereは、Command R+を使うためにいれましたが、どうやらRAG用のrerank-multilingual-v3.0などが使えるようになる、ということが現時点ではむしろ意味があるようです。

Difyは、RAG(Retrieval-Augmented Generation)が比較的に簡単に構成でき、かつ入力用の文章の分割設定などが結構細かくできるというのが、大きな特徴でもあるからです。

このあたりは、にゃんたさんの下記のYouTube動画に詳しい説明があります。

ちょっと、長くなりそうなので、まずはここで一旦区切ります。

次回、各nodeの内容の説明

次回に、それぞれのnode(四角い枠)とそれぞれの設定を具体的に示したいと思います。本来メモっておきたいのはこちらになります。






この記事が気に入ったらサポートをしてみませんか?