Difyでアプリを作ってみよう!(Code Interpreter編)
Code interpreterによるコード実行
Difyはver.0.6.4よりLLMがコードを実行し、ワークフローを通じて結果を取得できるCode interpreterツールが追加されました。
今回はこのCode interpreterツールを実際に試してみます。
ワークフローを準備しよう!
DSLファイルをインポートしよう!
今回は(も)sangminさんがXで共有されていたサンプルのDSLを利用してワークフローをサクッと準備します。
実行環境
Windows11 WSL2 ubuntu
Dify:0.6.5(Docker)
DSLファイルのインポートによるワークフローの作成はこちらの記事で紹介していますので、参考にしてください。
DSLファイルをインポートすると以下のようなワークフローが作成されます。
ワークフローの共有によってすぐに検証ができるのもDifyの強みですね。
ワークフローを確認してみよう!
このCode interpreterツールですが、機能として持っているのは渡されたコードを実行する機能のみです。
つまり、前段のLLMからの出力にコードと全く関係ない情報が入っていると、Code interpreterツールはエラーとなってしまいます。
この点が地味に詰まりポイントでして、LLMにコードを生成させるとコードブロックで出力されることがあり、コードブロックが残ったままCode interpreterツールを実行するとエラーとなってしまいます。
例えば↓の画像のようにChatGPTにコードを書かせてみましょう。
↑の画像のChatGPTの出力をコピーしてテキストファイルに張り付けると、↓の画像のように「```」にコードが囲われているのがわかります。
このため、Code interpreterツールに渡す前にはコードのみの出力を渡す必要があるためプロンプトやLLMの選択を気を付ける必要があります。
実際に筆者はLLMをGPT-3.5を最初を使っていましたが、どうしてもコードブロックを消してくれずに困っていましたが、GPT-4を使ったらあっさりとコードブロックの無いコードのみを出力してくれました。
また、本記事執筆時点(2024/04/30)ではPython3とJavascriptのみが実行可能であり、明確に指定する必要があります。
LLM側では、「会話に返答せずに、print文を含む実行に必要なコードを直接提示してください。」とプロンプトに書かれています。
『コードブロックで囲わないで出力すること』など追加してもいいです。
Code interpreterを試してみよう!
では、今回は「100までの素数を数えて出力するコードを書いて実行して」と依頼してみました。
↓の画像のように計算された結果が表示されています。
ログを確認すると、入力にコードブロックで囲われてないコード(LLMからの出力)が設定され、コード実行結果が出力されていることがわかります。
おわりに
Code interpreterによってDifyの活用の幅が広がりましたが、以下のような課題もあります。
Difyは、本記事執筆時点(2024/04/30)ではファイルのアップロードは画像しかできないようで、例えばエクセルにまとめたデータをアップロードして処理させることができないためCode interpreterの利用する機会自体が少ない
Codeでエラーが起きたとき、コードを修正して再実行するようなループ処理をワークフローで構築することが難しいため、Code生成に失敗してエラーが起きたらワークフローそのものが止まってしまう
一方で、Difyはアップデートの頻度が高いため(0.6.4から0.6.5のアップデートは数日で行われました)これらの課題はすぐに解決される期待も高いです。