見出し画像

【最新】Difyのワークフローで使えるコードブロックまとめ(2024-09-11)

ワークフローがだいぶ使えるようになってきましたので、コードブロックをまとめてみました。
手持ちのカード(ブロック)でなにが作れるかで、遊んでいるような気になり、楽しくなります。

説明内容ですが、もしかしたら、間違っているところがあるかもしれません。ご容赦ください。
とくに入力型と出力型は、使っている時の記憶で書いているので、他の型もOKな場合があるかもしれませんので、参考程度にしてください。

変数の型を書いたのは、型がブロック間で合ってないとエラーになるので、かなり気をつけないといけないからです。


1. LLM

  • 機能: 大規模言語モデル(AI)に対して処理を依頼し、結果を得る

  • 入力: string/コンテキスト

  • 出力: string

  • 注意点: コンテキストはナレッジのこと

  • APIKEYを設定すると、選べるAIが豊富になります。

2. 知識取得

  • 機能: 事前に登録されたナレッジ(知識ベース)から情報を取得し利用する

  • 入力: string(データに対してのクエリのことです) 

  • 出力: オブジェクト

  • 注意点: 事前にナレッジデータの登録や設定が必要

  • エンベッティング、セマンティックサーチの設定などもありますが、それがまたとても簡単です。

3. 終了

  • 機能: ワークフローの終了を表示するか、最終的なデータを取得する

  • 入力: any

  • 出力: any

  • 注意点: 表示する場合はstringであることが必要

  • ワークフローをAPIとして利用する場合、出力の型をカスタマイズできます。

4. 質問分類器

  • 機能: AIを使用して入力を分析し、適切な処理分岐を判断する

  • 入力: string

  • 出力: クラス名(string)

  • 注意点: AIの判断によるということ

  • シンプルな機能です。設定も簡単です。「IF/ELSE」が使えないケースで使うのがよいでしょう。

5. IF/ELSE

  • 機能: 条件に基づいて処理を分岐させる

  • これは通常のプログラム処理です。AIと違って切れ味抜群。

6. イテレーション

  • 機能: 配列の要素に対して繰り返し処理を行う

  • 入力: array

  • 出力: array

  • 注意点: 配列が最初に必要。繰り返しなにをするのかをブロックで選ぶ必要があります。他よりブロックが大きくなります。

7. コード

  • 機能: PythonまたはJavaScriptのコードを実行し、結果を得る

  • 入力: any

  • 出力: any

  • 注意点: 利用ライブラリに制限あり

  • コードでなんでもかけます。コードに頼りすぎると、このノーコードツールの意味がないので、仕方ない時に使います。でも、出番は結構あるかと。

8. テンプレート

  • 機能: 事前に定義された文字列やコードのテンプレートを使用して、動的にコンテンツを生成する

  • 入力: any

  • 出力: string

  • いろいろな書き方があるので、一度マニュアル見てもいいかと。
    シンプルな書き方だと、マニュアルなしでも書けます。

9. 変数集約器

  • 機能: 複数の変数をまとめて一つの変数として扱う

  • 入力: any

  • 出力: any

  • シンプルです。分岐した後に変数をまとめるのに使うのがよいでしょう。

10. 変数代入

  • 機能: チャット内での一時的な情報を変数として保存する

  • 注意点: ワークフローではまだ使えない

  • 調べましたが、チャットフローなどで使えるみたいです。「会話記憶」などで。ワークフローでは使えないようです。

11. パラメーター抽出

  • 機能: AIを使用してテキストから特定の情報やパラメーターを抽出する

  • 入力: string

  • 出力: string/array

  • 注意点: プログラム的ではなくAIに依頼していること

  • 最初はプログラム的にJSONデータから、キー名などでデータを抽出するのかと思ったら、AI頼みのツールでした。楽でいいです。

12. HTTPリクエスト

  • 機能: 外部APIにリクエストを送信し、レスポンスを取得する

  • 入力: any

  • 出力: any

  • 無茶使いでありますよね。他のノーコードツールにも繋げられますし、GASにも繋げられますね。

自分なりの制作時のコツ

  • 変数名は自分にわかりやすくつける
    ブロック名もそのままではなく、カスタマイズしておいた方が判別しやすいかもです。

  • 終了は、outputなどの変数が必要
    なにも入れないと、なにも取得したり、表示してくれないです。

  • ノード間のつながりは、変数の型が一致する必要があり
    stringとarrayがよく使うので、これを区別してください。
    -- arrayをstringにするには、「テンプレート」を使うと簡単(汎用的に使える)
    -- stringをarrayにするには、「パラメーター抽出」を使うと便利(個別に指定が必要)

  • 困った時はLLMで処理する
    「質問分類器」「パラメーター抽出」はLLMでやっています。
    少し時間がかかるけど、AI(LLM)でうまくやるように依頼するのもありです。

  • 要所要所では、出入力値を見て、「コード」で整形する必要があるかもしれません。ブロック間のつながりで、型変換したい時などの細かい修正処理にコードを使うことがありそうです。


子供がブロックを組み合わせて、車や飛行機やいろんなものを自由に作って遊ぶのと、変わらないような楽しさがありますね。Difyって。

いいなと思ったら応援しよう!