見出し画像

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の強みですね。

LLMの次にCode interpreterがある

ワークフローを確認してみよう!

Code interpreterの設定

このCode interpreterツールですが、機能として持っているのは渡されたコードを実行する機能のみです。
つまり、前段のLLMからの出力にコードと全く関係ない情報が入っていると、Code interpreterツールはエラーとなってしまいます。

この点が地味に詰まりポイントでして、LLMにコードを生成させるとコードブロックで出力されることがあり、コードブロックが残ったままCode interpreterツールを実行するとエラーとなってしまいます。
例えば↓の画像のようにChatGPTにコードを書かせてみましょう。

スクリプトの部分がコードブロックになっている場合

↑の画像のChatGPTの出力をコピーしてテキストファイルに張り付けると、↓の画像のように「```」にコードが囲われているのがわかります。

コードブロック以外にもコード前後のメッセージも不要

このため、Code interpreterツールに渡す前にはコードのみの出力を渡す必要があるためプロンプトやLLMの選択を気を付ける必要があります。
実際に筆者はLLMをGPT-3.5を最初を使っていましたが、どうしてもコードブロックを消してくれずに困っていましたが、GPT-4を使ったらあっさりとコードブロックの無いコードのみを出力してくれました。

また、本記事執筆時点(2024/04/30)ではPython3とJavascriptのみが実行可能であり、明確に指定する必要があります。

python3,javascript以外はエラーとなる("python"でもエラーになる)

LLM側では、「会話に返答せずに、print文を含む実行に必要なコードを直接提示してください。」とプロンプトに書かれています。
『コードブロックで囲わないで出力すること』など追加してもいいです。

Systemに役割、Userに出力内容が書かれている

Code interpreterを試してみよう!

では、今回は「100までの素数を数えて出力するコードを書いて実行して」と依頼してみました。
↓の画像のように計算された結果が表示されています。

ログを確認すると、入力にコードブロックで囲われてないコード(LLMからの出力)が設定され、コード実行結果が出力されていることがわかります。

処理が上手くいかないときはログでチェック!

おわりに

Code interpreterによってDifyの活用の幅が広がりましたが、以下のような課題もあります。

  • Difyは、本記事執筆時点(2024/04/30)ではファイルのアップロードは画像しかできないようで、例えばエクセルにまとめたデータをアップロードして処理させることができないためCode interpreterの利用する機会自体が少ない

    • Codeでエラーが起きたとき、コードを修正して再実行するようなループ処理をワークフローで構築することが難しいため、Code生成に失敗してエラーが起きたらワークフローそのものが止まってしまう

一方で、Difyはアップデートの頻度が高いため(0.6.4から0.6.5のアップデートは数日で行われました)これらの課題はすぐに解決される期待も高いです。