GASからDifyのAPIを叩くときにハマったポイント
こんにちは。マインディアでマーケティングを担当している石渡です。
突然ですが、みなさんDify使ってますか?
Difyとは、「先進的なAIアプリケーションのためのイノベーションエンジン」です。もう少し分かりやすく言えば、「ノーコードやローコードで生成AIを組み込んだアプリを作れるプラットフォーム」みたいな感じでしょうか。詳しく解説した記事もたくさん出てますので、初めて聞くという方は検索してみてください。
実際使ってみると思ったより簡単で、「文系管理職なのに〜♪画期的な業務アプリを〜♪シュシュっと作れちゃう、俺〜♪」感が味わえます。
そんなDifyですが、GASと組み合わせて使うときにハマったポイントを書き残しておきます。
書いている人
現在は株式会社マインディアという会社でBtoC・BtoB両方のマーケティングをしています。
何か気になる点があればお気軽に下記Xまでご連絡ください!フォローもしていただけると嬉しいです!
X @takahirostone
なぜGASと組み合わせるのか
日常的にGoogle Workspaceの各種ツールを使っている方は多いのではないでしょうか。GASを組み合わせることで、Difyで作成したアプリへのinput、またアプリからのoutputとして
Googleスプレッドシート
Googleスライド
Googleドキュメント
Gmaiil
などをそのまま活用することができます。例えば「もともと持っているデータがスプレッドシートにあり、それを分析してスライドにテキストを挿入し、スライドが完成したらメールで送る」というユースケースにそのまま使えるようになるんです。
GASからDifyのAPIを叩くときにハマったポイント
GASは実行時間の上限が6分でそれを超えるとタイムアウトする(実際には6分超えても動いていることもあり、よくわからない)というのは、GASをよく使う方であればご存知かと思います(公式リファレンス)。
GASからDifyのAPIを叩くときには通常以下のような流れになります。
GASからDifyにUrlFetchAppでPOSTリクエストを送る
Difyで何らかの処理が走る
レスポンスをGASで受け取る
この流れを6分以内に処理できれば良いのかとDifyでの処理の内容を調整して実行しても、実際にはDifyでの実行時間が100秒を超えるとエラーが返ってきてしまいます。
100秒というのは思ったよりも短く、特にLLMでの処理に数十秒かかることもあるので、ループ(Difyのイテレーション)で同じ処理を何度も回すようになっているとすぐに100秒を超えてしまいます。そもそも、1回LLMに質問を投げて回答を得るくらいの単純なタスクであればわざわざDify使わずにLLMのAPIを直接叩けば良いので、Difyを使っている以上はある程度複雑な処理になっていると思います。
ただし、GASにエラーが返ってきたあとしばらくしてからDify側のログを見ると、100秒を超えても処理は続いていて、最終的にはSUCCESSとなっていました。
解決策
リクエストを送る関数とレスポンスを受け取る関数をGAS側で分ける
上述の通り、GASからリクエストを送ったところにエラーが返ってきたあとも、Difyではアプリの実行が続いています。そのため、リクエストを送る関数がエラーで止まってしまっても、別の関数でレスポンスを受け取ればよいのです。GASには外部から送られたHTTPリクエストを受け取るdoPost関数があります。Dify側で、HTTPリクエストのノードを使ってGASにリクエストを送ればOKです。
Dify内での処理時間を早くするよう調整する
これは処理の内容次第ですが、まったく同じ処理でもLLMのモデルによって精度や実行時間が異なります。下表は、ある2つのタスクを各モデルで3回ずつ実行したときの実行時間と正解数です。モデルによって正解数のバラつきがあり、また、実行時間も6倍ほどの開きが出ています。本来claude 3.5 sonnetはベンチマークのスコアなどを見ても早いはずなのですが、このタスクは苦手だったようですね。また、プロンプトを変えてみたり、LLM以外の部分を調整することでも早くすることはできるかもしれません。
最後に
何か気になることがある方、ぜひお気軽にXで絡んでください!
よろしければサポートお願いします!そのうちオリジナルドメインにしたいなと思っているのでその資金にさせていただきます!