![見出し画像](https://assets.st-note.com/production/uploads/images/139015927/rectangle_large_type_2_445ab8e9c71286ee0e721e949b8d840d.png?width=800)
Difyでアプリを作ってみよう!(Code Interpreter編)
Code interpreterによるコード実行
Difyはver.0.6.4よりLLMがコードを実行し、ワークフローを通じて結果を取得できるCode interpreterツールが追加されました。
🍳 Dify v0.6.4 is here with some exciting new integrations. Check out the list we put together for you!
— Dify.AI (@dify_ai) April 22, 2024
New Models & Enhancements
1️⃣ Mistral 8x22B, featuring a 64K tokens context window and support for function calling.
2️⃣ Llama3 for the NVIDIA API catalog is now available,… pic.twitter.com/8cBjfl5mnB
今回はこのCode interpreterツールを実際に試してみます。
ワークフローを準備しよう!
DSLファイルをインポートしよう!
今回は(も)sangminさんがXで共有されていたサンプルのDSLを利用してワークフローをサクッと準備します。
実行環境
Windows11 WSL2 ubuntu
Dify:0.6.5(Docker)
DifyのCode Interpreter(CI)ではLLMが生成した文からコードだけを抜いて、渡すことが大事。サンプル(👉https://t.co/K7B8yUEtoc)をシェアしますので「Import from DSL」で試してみてください😇。精度をさらにあげたい方は、LLMとCIの間に追加のチェックポイントを入れるのもありかと👀。#Dify部 https://t.co/cqkisc8q0H pic.twitter.com/J9mg5t2BQg
— sangmin.eth @ChoimiraiSchool (@gijigae) April 23, 2024
DSLファイルのインポートによるワークフローの作成はこちらの記事で紹介していますので、参考にしてください。
DSLファイルをインポートすると以下のようなワークフローが作成されます。
ワークフローの共有によってすぐに検証ができるのもDifyの強みですね。
![](https://assets.st-note.com/img/1714462898836-wyUfkGv8p3.png?width=800)
ワークフローを確認してみよう!
![](https://assets.st-note.com/img/1714464593818-56IWFwqWSq.png?width=800)
このCode interpreterツールですが、機能として持っているのは渡されたコードを実行する機能のみです。
つまり、前段のLLMからの出力にコードと全く関係ない情報が入っていると、Code interpreterツールはエラーとなってしまいます。
この点が地味に詰まりポイントでして、LLMにコードを生成させるとコードブロックで出力されることがあり、コードブロックが残ったままCode interpreterツールを実行するとエラーとなってしまいます。
例えば↓の画像のようにChatGPTにコードを書かせてみましょう。
![](https://assets.st-note.com/img/1714463651558-zxLw7BqUxE.png?width=800)
↑の画像のChatGPTの出力をコピーしてテキストファイルに張り付けると、↓の画像のように「```」にコードが囲われているのがわかります。
![](https://assets.st-note.com/img/1714463858964-SCwYnzXm7F.png?width=800)
このため、Code interpreterツールに渡す前にはコードのみの出力を渡す必要があるためプロンプトやLLMの選択を気を付ける必要があります。
実際に筆者はLLMをGPT-3.5を最初を使っていましたが、どうしてもコードブロックを消してくれずに困っていましたが、GPT-4を使ったらあっさりとコードブロックの無いコードのみを出力してくれました。
また、本記事執筆時点(2024/04/30)ではPython3とJavascriptのみが実行可能であり、明確に指定する必要があります。
![](https://assets.st-note.com/img/1714464504036-YhFw0Dfim0.png)
LLM側では、「会話に返答せずに、print文を含む実行に必要なコードを直接提示してください。」とプロンプトに書かれています。
『コードブロックで囲わないで出力すること』など追加してもいいです。
![](https://assets.st-note.com/img/1714464661810-y3FR0gq9RV.png?width=800)
Code interpreterを試してみよう!
では、今回は「100までの素数を数えて出力するコードを書いて実行して」と依頼してみました。
↓の画像のように計算された結果が表示されています。
![](https://assets.st-note.com/img/1714464994027-PYLrs8nakp.png?width=800)
ログを確認すると、入力にコードブロックで囲われてないコード(LLMからの出力)が設定され、コード実行結果が出力されていることがわかります。
![](https://assets.st-note.com/img/1714465096081-Kz24dTlTmk.png?width=800)
おわりに
Code interpreterによってDifyの活用の幅が広がりましたが、以下のような課題もあります。
Difyは、本記事執筆時点(2024/04/30)ではファイルのアップロードは画像しかできないようで、例えばエクセルにまとめたデータをアップロードして処理させることができないためCode interpreterの利用する機会自体が少ない
Codeでエラーが起きたとき、コードを修正して再実行するようなループ処理をワークフローで構築することが難しいため、Code生成に失敗してエラーが起きたらワークフローそのものが止まってしまう
一方で、Difyはアップデートの頻度が高いため(0.6.4から0.6.5のアップデートは数日で行われました)これらの課題はすぐに解決される期待も高いです。