はじめに
メリークリスマス!
NTTテクノクロスのNitabushiです。
普段はAWSの設計やLLMを用いたアプリケーションの開発に携わっています。
今回は NTTテクノクロス Advent Calendar 2024シリーズ1の17日目(12/17)の記事です。
LLMアプリ開発プラットフォーム「Dify」について、ワークフロー機能における簡単なファイル操作について解説します。
Difyとは
-
OSSとして提供されているノーコードのLLMアプリケーション開発プラットフォームです
-
例えば、LLMの呼び出しや、それに続く分岐処理、ファイル操作、さらにはRAGの利用もサポートしており、誰でも手軽にアプリ開発を始められる仕組みが整っているのが魅力です
-
今回の記事では基礎的な利用方法は省き、v.0.10.0から追加されたファイルアップロード機能について解説します
なぜファイルアップロード機能に着目したのか?
DifyではLLMアプリケーションの動作をワークフローとして定義することができます。
ワークフローとは
- ① ユーザーが入力した情報にNGワードが含まれていないかをチェックする。
- ② ①で問題がなければ、対象のLLMに問い合わせる。
のように段階的な処理を指します。Difyではノードと呼ばれるブロックを組み合わせることで、様々な処理を実現することができます。
以前のバージョンではワークフロー内で扱えるファイルの種類が限られており、テキストファイルを扱うことができませんでした。そのため回避策として以下のような方法がありました。
- ワークフローの入力情報にLLMで生成したい情報をベタ書きする方法
- ワークフローをバッチ処理として実行し、入力情報として利用可能なCSVファイル内にLLMで生成情報を記載する方法
v0.10.0で新しくファイルアップロード機能が追加され、テキスト、PDF、Officeなどのファイル形式がサポートされました。
入力情報を整備する負荷が減っただけでなく、様々な資料をDifyで編集、加工することが可能になり、実現できることが増えました。
Difyワークフローで簡単なファイル操作を実行してみる
それではDifyワークフローでファイル操作可能なフローを作成していきましょう。
Difyワークフローの作成
-
Difyスタジオ > アプリを作成する > 最初から作成 > ワークフローを選択します
開始ノードの作成
-
開始とかかれている場所(正式には開始ノードと呼ぶ)をクリック > 入力フィールドの「+」ボタンを押下 > フィールドタイプ「単一ファイル」を選択します
-
任意の変数名、ラベル名を設定します、ここでは単一ファイルを取り扱うため「single_file」を設定します
※特にこだわりがない場合は、変数名を設定するとラベル名も同内容が入力されます -
サポートされたファイルタイプ >「ドキュメント」にチェックをいれます
※本記事ではテキストファイルを用いますが、他にもMarkdownやPDF、WordやPPT、Excelと幅広いドキュメントに対応しているのがわかりますね
LLMノードの作成
- LLMノードを以下の内容で作成してください
- モデル:gpt-4o-mini※今回はOpenAIの「gpt-4o-mini」を用います
- SYSTEMプロンプト:記載内容はキャプチャを参照してください
- USERプロンプト:記載内容はキャプチャを参照してください
- モデルのパラメータ:編集なし、デフォルト設定を使用しています
※補足事項:各パラメータの設定についてはDifyドキュメントを参考にしてください
終了ノード
ワークフロー完成!
ワークフローの動作確認
それでは早速ワークフローを実行してみましょう。
今回作成したワークフローはプロンプトに書店員という役割を与えておすすめの本を紹介してもらうという簡単な内容にしてみました。
ファイルの中身は以下となります。
「私は高校生です。夏休みの宿題で読書感想文を書く必要があります。おすすめの本を3冊教えてください。」
お手元で試される方は文字コードをUTF-8に修正してください。
画面右上の実行ボタンを押下>ローカルPCからファイルのアップロードが完了したら実行します
失敗しちゃいました。。
結果をみるとファイルの内容が読み取れないため、LLMノードで上手く質問を処理することができないみたいです
再実行
調査の結果、テキスト抽出ツールノードを使用することで解消できることがわかりました。この機能を利用することでアップロードしたファイルからテキストを抽出し、ワークフロー上で利用可能な変数の中に格納してくれます。
開始ノードで指定したファイル(single_file)をそのままDifyワークフローで使うことができないということがわかりましたね。
テキスト抽出ツールについてはこちらに詳しい記載があります。
またLLMノードのUSERプロンプトもテキスト抽出ツールノードの変数に書き換えます
それでは気を取り直して、再実行してみましょう!
無事質問に対する結果が取得できました!
まとめ
このようにDifyでは簡単にLLMをつかったアプリケーションを開発することが可能です。ブラウザベースで直観的に操作しやすく、アイデアを思い付いたらすぐに動くものが作れるのって楽しいですよね!
Difyはバージョンアップや新機能の発表頻度が多いので、気になる方は公式Twitterやリリースノートを定期的にチェックしてみてください。
おわりに
ここまで読んでいただいてありがとうございました!
拙い文章ではございますが、今後も定期的に技術に関する情報を発信していければと考えております。お読みいただけましたら幸いです。
明日はnakasho-devさんによる記事を引き続きお楽しみください。
【参考情報】Dify動作環境
環境情報
- OS:Windows11
- Dify Version:0.12.1
- Difyのデプロイ方法:ローカルデプロイ(WSL2+Docker Engine+Docker Compose)
- 詳しい構築方法は本記事では解説しないため、Difyドキュメントを参考してください
補足事項
- DifyはSaasサービスとして利用することも可能ですが、今回はローカルPCにDifyのコンテナイメージを持ってきて、Docker Composeでデプロイしています。
- Saasサービスとしてのプランにご興味がある方は公式サイトを参照してください。