Difyのワークフローとは?
Difyで一連の処理を自動化してアプリケーションを作成できる機能のことを指します。
Difyのワークフローを構築するにはノード(ブロックやツール)をマップ上に配置し、各ノードを線で繋いでいくことで構築することができます。
ブロックの種類
現在、ワークフローで実装できるブロックは以下の10種類があります。
- LLM
- 知識取得
- 質問分類器
- IF/ELSE
- イテレーション
- コード
- テンプレート
- 変数集約器
- パラメーター抽出
- HTTPリクエスト
ワークフローの構築
今回は4つのブロックを使って構築します。
開始
開始ブロックは、すべてのワークフローに必要なノードです。ここで入力した値を受け取ります。
関数
LLM は Chatflow/Workflow の中心的なノードであり、大規模言語モデルの会話/生成/分類/処理などの能力を活用して、多様なタスクを提示された指示に基づいて処理し、ワークフローのさまざまな段階で使用することができます。
LLMのモデルを選択することができますが、今回はデフォルトで設定されている「gpt3.5」にしています。
LLM
カスタムロジックの実装のために、PythonまたはNode.jsを使用してコードを記述します。
関数の引数として使用する変数と出力用の変数を定義して使用することができます。
def main(arg1: int) -> dict:
return {
"prompt" : arg1 + "に関する技術的なドキュメントを生成してください。ハルシネーションは出力しないでください。",
}
終了
ワークフローの最終出力コンテンツを定義します。すべてのワークフローには、実行が完了した後に最終結果を出力するために少なくとも 1 つの終了ノードが必要です。
終了ノードはプロセスの終了点です。このノードの後にノードを追加することはできません。ワークフロー アプリケーションでは、終了ノードに到達したときにのみ結果が出力されます。プロセスに条件分岐がある場合は、複数の終了ノードを定義する必要があります。
終了ノードは、上流ノードの出力変数を参照できる 1 つ以上の出力変数を宣言する必要があります。
構築のポイント
①変数の使用
今回のポイントはLLMに渡すプロンプトを変数にしておき、後から編数したり再利用しやすくしています。
同様の目的であれば、「テンプレート」というブロックでも実現可能ですが個人的には関数のブロックの方が使いやすかったので今回はこのような形でワークフローを構築しています。
②プロンプト
今回は、プロンプトの文章に「ハルシネーションを使用しないでください。」という一文を追加しています。これは、AppleがApple interigenceに使用しているプロンプトであり、一定の効果があるようです。