サブプロシージャは複雑なFin Proceduresをより小さく焦点を絞ったフローに分割できます。メインのプロシージャをわかりやすく保ちつつ、ロジックの再利用と重複の削減に役立ちます。
サブプロシージャはコードのヘルパー関数のように考えられます:Finは上から下へ実行し、親プロシージャに戻ります。
主な利点と使用例
読みやすさの向上:詳細なロジックを明確な名前付きステップの背後に隠します。
ロジックの再利用:同じプロシージャ内の複数箇所で使用可能です。
メンテナンスの簡素化:共有ロジックを一箇所で編集できます。
信頼性の向上:複雑または失敗しやすいステップを分離します。
Finにおけるサブプロシージャの動作
サブプロシージャはプロシージャ内のネストされたステップリストのように振る舞います。
Finはサブプロシージャを上から下へ実行します。
完了後、Finは親プロシージャの次のステップに戻ります。
@End sub-procedureを使って早期終了も可能です。サブプロシージャは他のサブプロシージャ内にネスト可能です。
共有コンテキストと分離
共有コンテキスト:コネクタの出力、属性、ユーザーの応答は親とそのサブプロシージャ間で共有されます。
分離:データは親プロシージャ外には保持されません(例:
/Switch procedure使用時)。
注意:サブプロシージャは単一の親プロシージャにスコープされ、異なるプロシージャ間で再利用できません。
サブプロシージャの作成と実行方法
サブプロシージャの作成
Fin AI Agent > Train > ProceduresからFin Procedureを開くか作成します。
左側のメニューに移動します。
+ New sub-procedureをクリックします。
新しいサブプロシージャエディタにリダイレクトされます。
ステップを入力し、サブプロシージャにわかりやすい名前を付けます。
同じメニューでサブプロシージャにカーソルを合わせると削除や並べ替えができます。名前変更はサブプロシージャを開き、エディタ上部のタイトルを編集してください。
サブプロシージャの実行
Fin AI Agent > Train > Proceduresから親プロシージャを開きます。
コマンドメニューを開くには@ を入力します。
Run sub-procedure.を選択します。
実行したいサブプロシージャを選びます。
Finはサブプロシージャを実行し、その後親フローの残りのステップを続行します。
ヒント:コードの関数の戻りのように、@End sub-procedureで早期に戻れます。
サブプロシージャ使用のベストプラクティス
意味のあるロジックにサブプロシージャを使う
サブプロシージャは明確で再利用可能なロジックをカプセル化すると最も効果的です。
効果的な使用例:
条件を煩雑にする複雑な分岐。
プロシージャ内の複数箇所で使われる繰り返しのロジック。
一貫した動作が必要なエスカレーションや引き継ぎフロー。
分離とテストで効果的な失敗しやすいステップ。
効果が薄い使用例:
再利用不要な単純な単一アクション。
1つの
@Instructionまたは@Conditionに収まるロジック。頻繁なコンテキスト切り替えを強いる過剰な断片化。
サブプロシージャのチェーンは浅く保つ
可能な限り、サブプロシージャ→サブプロシージャ→サブプロシージャのような深いネストは避けてください。
注意:深いネストはFinのパフォーマンスに影響しませんが、プロシージャの読みやすさ、デバッグ、メンテナンスを難しくします。
サブプロシージャにはわかりやすい名前を付ける
サブプロシージャが何をするかを説明する、説明的で行動指向の名前を使いましょう。
良い例:
CollectPaymentInfo
VerifyUserIdentity
ResolveDeliveryIssue
避けるべき名前:
Step4
PartB
HandleRefundSectionA
明確な名前は全体のフローをスキャンしやすく理解しやすくします。
使用例
メインフローから複雑なロジックを抽象化する
サブプロシージャは詳細なチェックや検証を隠し、メインプロシージャを読みやすく保ちます。例えば、顧客の保険会社が対応しているかの確認は、主要なロジックを煩雑にせず専用のサブプロシージャに置けます。
共有の引き継ぎロジックを再利用する
プロシージャの複数箇所で同じエスカレーションや引き継ぎ処理が必要な場合、そのロジックをサブプロシージャに置くことで一貫性が保てます。更新が必要な時も一度の変更で済みます。
よくある質問
サブプロシージャは異なるプロシージャ間で再利用できますか?
サブプロシージャは異なるプロシージャ間で再利用できますか?
いいえ、サブプロシージャは定義された親プロシージャ内でのみ再利用可能です。
サブプロシージャは他のサブプロシージャを呼び出せますか?
サブプロシージャは他のサブプロシージャを呼び出せますか?
はい、サブプロシージャ内で他のサブプロシージャを実行できますが、深いネストは可能な限り避けてください。
サブプロシージャ終了後もデータは保持されますか?
サブプロシージャ終了後もデータは保持されますか?
はい、同じ親プロシージャ内では保持されます。異なるプロシージャ間では保持されません。

