1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dify チャットフロー

1
Last updated at Posted at 2025-08-05

Dify のチャットボットでは実現できないことがあったため、チャットフローを使用しました。主に以下の機能を実装しています。

・会話履歴を利用して、「それ」や「この」などのユーザーの質問を補完する。RAG で見つけやすくするため

・質問が短すぎる場合は複数クエリに展開する(MultiQueryRetriever)。RAG で見つけやすくするため

・RAG(知識検索)

・会話履歴の管理

 

特徴としては、IF/ELSEで分岐した後、いずれかのルートを進み、その後 Python コードでルートを結合する構成にしています。Python コードには IF/ELSE と同じ条件を記述しており、どちらのルートからの結果であっても、次の処理へ渡せるようにしています。

 

0222_01.png

 

説明

開始
  ユーザーが入力した文字列は sys.query に格納される

 
IF/ELSE
  会話が1回目(sys.dialogue_count=1)なら、分岐1に進み、2回目以降は分岐2(LLM2)に進む

 
LLM2 (分岐2)
  会話履歴を参照して、「それ」や「この」などのユーザーの質問を補完する。知識検索で見つけやすくするため
  ※ LLM のメモリを ON

 
Python コード実行(分岐1、また、分岐2の出力) … 出力①
   会話が1回目(sys.dialogue_count=1)なら、ユーザー入力(sys.query)をそのまま出力し、2回目以降は LLM2 の結果を出力

 
Python コード実行2
  len(出力①) を出力

 
IF/ELSE2
  出力①が 70 文字未満の場合は、分岐1(LLM3)に進み、それ以外は分岐2に進む

 
LLM3(分岐1)
  出力①から、異なる5つの言い換えを作る。知識検索で見つけやすくするため

 
Python コード実行3(分岐2、また、分岐1の出力) … 出力②
  出力①が 70 文字未満の場合は、LLM3 の結果を出力し、それ以外は出力①を出力

 
知識検索
  △△△△社内規定を登録。出力②を使用して検索。Top K=4、しきい値=0.25

 
LLM
  ユーザー入力(sys.query)と、知識検索の結果を使用して、大規模言語モデルへ問合せ
  システムメッセージを使用して LLM に指示
  ※ LLM のメモリを ON(会話履歴も考慮)

 
回答
  LLM の応答を表示

 

プレビュー

プレビュー画面から問い合せを行うと、フローが順次実行されます。
最初に表示する文言は「オープナー」で指定します。

 
各ブロックをクリックし、「最後の実行」タブを開くと、直前の実行結果を確認できます。

 

LLMブロックのプロンプト

LLM2(応答がより良いため、英語で指示しています)

Given a chat history and the latest user question which might reference context in the chat history, formulate a standalone question which can be understood without the chat history. Do NOT answer the question, just reformulate it if needed and otherwise return it as is. Please speak in Japanese.
チャット履歴と、チャット履歴の文脈を参照している可能性がある最新のユーザーの質問をもとに、チャット履歴なしでも理解できる独立した質問を作成してください。質問に答えてはいけません。必要に応じて再構成し、それ以外の場合はそのまま返してください。日本語で話してください。

 

LLM3(応答がより良いため、英語で指示しています)

You are an AI language model assistant. Your task is to generate five different versions of the given user question to retrieve relevant documents from a vector database. By generating multiple perspectives on the user question, your goal is to help the user overcome some of the limitations of the distance-based similarity search. Provide these alternative questions separated by newlines. Please speak in Japanese.
あなたは AI 言語モデルのアシスタントです。あなたのタスクは、与えられたユーザーの質問に対して、 5つの異なるバージョンを作成するとことです。これらはベクトルデータベースから関連文書を取得するために使用されます。ユーザーの質問を複数の観点から言い換えることで、距離ベースの類似検索における一部の制約を克服できるよう支援します。これらの代替質問を改行で区切って提示してください。日本語で出力してください。
 

LLM

あなたは質問応答タスクのためのアシスタントです。以下に提供されたコンテンツを用いて質問に回答してください。コンテンツに記載がなく答えが分からない場合は、「分からない」と伝えてください。

 

関連するページ

 

v1.8.1 から v1.13.0 へ移行

実行1回目が、sys.dialogue_count は 0 ではなく 1 になる。これは古いバージョンのほうの不具合。sys.dialogue_count が赤字で表示されますが、直せていないものの、動作はしています。

Dify 1.13 以降では、外部 Knowledge API が返す各 record の metadata の中に document_id が必要。faiss_service の /retrieval を修正。

 

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?