The Three Trees, Bletchley
© Copyright Cameraman and licensed for reuse under this Creative Commons Licence.
「Difyについてーその3」では、まず、最近話題になっているRAG (Retrieval-Augmented Generation) についてClaude3に尋ね、RAGに関する技術動向を確認するとともに、RAGのあるべき姿についてClaude3と議論した模様を、見ていただきました。
そして、Dify.AIが提供する情報による、Difyをよく理解するためのRAGアプリ制作過程の説明に入ったのですが、長くなったので、RAG情報を用意するところまでで終了しました。
今回は、その続きで、用意したRAG情報をDifyに「ナレッジ」として登録し、Difyが用意してくれているRAGアプリ構築用のテンプレートを利用して、チャットボットアプリ「Difyのことなら何でも聞いてください」を動かしてみるまでをご覧いただきたいと思います。
とりあえず、前回定義したナレッジ「1-Welcome to Dify!」の情報を参照してDifyに関する情報提供を行うRAGアプリを作ってみましょう。
Difyのメニュー「探索」で表示されたテンプレートアプリのうち、「Knowledge Retriebal + Chatbot」の「+ワークスペースに追加」をクリックして、これをベースにテストアプリを作ってみましょう。
すると、次のダイアログボックスが表示されました。
このテストRAGアプリの名前と説明を入力して「作成」をクリックすると、
このように、Start(開始)⇒Knowledge Retrieval(RAG情報検索)⇒LLM(生成AI呼出し)⇒Answer(回答)の順にノードがリンクされた状態でテンプレートが表示されました。
Startのボックスをクリックすると、このStartノードの設定ができますが、テンプレートで、すでに入力フィールドとしてsys.queryが設定されているので、そのまま使います。
次に「Knowledge Retrieval」のボックスをクリックします。
「クエリ変数」として、Startノードの入力変数sys.queryがデフォルトで設定されているのが分かります。
その下「知識」の下の段に『ナレッジを追加するには「+」ボタンを押してください」とあるので、クリックすると、前回ナレッジとしてすでに登録してあったものが表示されます。
今回は「1-Welcome to Dify!」のみをクリックして選択し「追加」します。
これで、「知識」として「1-Welcome to Dify!」を参照するように設定ができました。
また、「出力変数」としてデフォルトでresultというArrayオブジェクトも定義されていることが分かります。
で、次に「LLM」のボックスをクリックします。
デフォルトの生成AIモデルが「gpt-3.5-turbo」なので、GPT-4oに変更したいと思います。
まず、モデル「gpt-3.5-turbo」 の横の①あたりをクリックすると、「MODEL gpt-3.5-turbo」の設定画面がポップアップするので、その②の部分をクリックすると、上図のようにモデルのリストが表示されるので、gpt-4o-2024-05-13を選びます。ついでにTemperatureの値をデフォルトの0.7から1にしました。逆でした。Temperatoreの値を大きくすると、生成結果のランダム性が増すので、0.1に訂正しました。
これで、「モデル」はGPT-4oに変更できましたが、その下の段の「コンテキスト」欄が空白なので、ここに、「Knowledge Retrieval」で設定した「1-Welcome to Dify!」を設定します。
「コンテキスト」の下段の「(x) 変数を設定」をクリックすると、設定できる変数のリスト(赤線枠内)が表示されるので、「Knowledge Retrieval」ノードの出力変数「result」を指定しました。
GPT-4oに渡すSYSTEMプロンプトは、テンプレートで
You are a helpful assistant.
Use the following context as your learned knowledge, inside <context> </context> XML tags.
<context>
{コンテキスト}
</context>
When answer to user:
– If you don’t know, just say that you don’t know.
– If you don’t know when you are not sure, ask for clarification.
Avoid mentioning that you obtained the information from the context.
And answer according to the language of the user’s question.
となっているので、「コンテキスト」欄に「Knowledge Retrieval」ノードの出力変数「result」を指定することにより、Startノードでの入力(sys.query)基づいて「1-Welcome to Dify!」でマッチした情報が「result」として生成AIに渡されることになります。
また、LLMの設定画面のさらに下の方を確認すると、下図の通り、①Startノードの入力データであるsys.queryが「USER」プロンプトとして生成AIに渡され、②生成AIの出力は、「出力変数」textに入れられることが分かります。
そして、③「Answer」ノードにLLMの出力であるtextが渡されることが確認できました。
では、「デバッグとプレビュー」ボタンをクリックして表示される「デバッグとプレビュー」画面の下段(チャットボットのデバッグを開始するには、以下のボックスにコンテンツを入力してください)の下の入力欄に「Difyを一言で説明してください」と入力し、送信アイコンをクリックすると以下が表示されました。
回答部分:Difyは、生成AIアプリケーションを迅速に開発するためのオープンソースプラットフォームです。 |
また、「Difyがどういうものか、詳しく教えてください。」と入力すると以下のように詳しい説明が返されました(長すぎて、何度かに分けて出力されました)。
回答部分:Difyは、生成AIアプリケーションを迅速に開発するためのオープンソースの大規模言語モデル(LLM)アプリケーション開発プラットフォームです。以下の特徴があります:
|
そして、Difyに関係のない「明日は何曜日ですか?」という質問に関しては、「1-Welcome to Dify!」に関連情報がないため、以下の「わからない」との回答がGPT-4oから返されました。
回答部分:申し訳ありませんが、私は現在の日付を知ることができないため、明日が何曜日になるかをお答えすることはできません。現在の日付を教えていただけると、そこから計算してお答えできます。 |
ちなみに、Difyからではなく、OpenAIのChatGPT-4oに同じ質問をすると、以下の通り、ちゃんと答えてくれました。
長くなってしまいましたので、一旦終わりにします。
終わり
Pingback: Difyについてーその5(Rerankモデルの利用) – インターテックリサーチ株式会社