Difyがv0.8.0にアップデートされました。
今回のポイントは「並列処理」パラレルランがポイントです。
特にいままでできなかったことができるようになったというよりかは複雑な処理がきれいに迅速化するようになった感じです。
様々なパターンで可能かと思いますが大きく二つに分かれると思うのでその二つをためしてみました。

Dify(ディファイ)とは?

Dify(ディファイ)生成AIワークフローツールです。LangGenius, Inc.が提供するサービスです。
オープンソース型のためソースが公開されておりアップデートも早くローカルへの対応も可能です。
では早速今回の並列処理をDifyでためしてみました。

Difyパターン1:同時に処理を行う。

この場合今までは直列系統でだら~としたワークフローを書くことで対応していました。
ただこれだと一つ一つの処理が長いとなると時間が結構かかります。

例えばこんな感じ

straight

みためもよくないですね。で今回の機能でこれを並列処理すると

parallel

めちゃ早い。
例えば、テキスト生成中に画像作らせとくことも可能です。

Dify_parallel_run

Difyパターン2:選択肢によりどちらかの処理を行う。

これ地味にDifyで自動化するときにあるあるケースです。
最初に選択しを設けてこれだったら、この処理をして。みたいなケースが多いかなと思います。
あとはhttpリクエストして、ステータスコード自体で分けるとか。

でも、このケースに対応しようとするとすり鉢状にどんどん処理がひろがっていました。
簡単ですが例えばこんな感じ。さっきのを今度はLLMどれかにするというオプションVerです。

mortar

別にこれでもいいんです。この程度のフローの長さなら。
でも、この処理後のテンプレートの内容が一緒なのに変わった場合に4つすべてかえないといけないんです。これがもしもっと10個続くフローだったら、、、地獄の全パターン対応(笑)
普通に20個並ぶフローとか作って最初に分岐すると、、、保守性と「修正時のメンタル」も著しく悪化します。

対応方法

実はこれいままでもできました。「変数集約機」です。ただ一筋縄ではいきません。

aggregation

これでうまくいくとおもいますよね。でもうまくいかないんです。
二つ値がなくて一つしか値がないので。しかも今後何かにはめるときに変数三つともはめるというこれまた保守性最悪になります。また処理によっては値がないものがあると挙動がおかしくなるものもあり。

なのでこの後に「どれか値があればそれを適用する」というコードを組みます。

aggregation_code
def main(A: str, B: str, C: str,) -> dict:
    def is_valid_string(s):
        return s is not None and s.strip() != ""

    variables = [A, B, C]
    
    # 有効な文字列を見つける
    transcript = next((var for var in variables if is_valid_string(var)), "")
    
    return {
        "result": transcript,
    }

これをすることで

aggregation_comp

変数集約機しかラインをまとめれなかったのでしぶしぶ使うことで、うしろの処理を再集合させれます。(ちなみにいままでは編集集約機には適当な開始にあるnullにならない値をいれてました)

それがDify 0.8.0アップデートでどこでもまとめれるので、無駄な編集集約機をつかわなくてよくなりました。美意識の問題です(笑)速度は大して変わりませんが非常にワークフローしてみててスマートで保守性もいいです。

Dify_comp

先ほどの有効なものを選ぶコードはつかえるのでコピペして使ってみてください。
これでどのLLMが回答しても一個の変数として扱うことが可能です。

まとめ

いかがでしたか。どうしてもAIが流行ると0→1がフォーカスされがちです。
でも実際にはそのツールを作った後に以下に保守しやすいか。そういったところはシステム開発の一番のポイントですのでそういうのも意識しながら最初に作りたいですね。