アクションノード

決定論的なワークフロー操作のための、非LLMプログラマティックなノードです。アクションノードは、データ変換、APIインテグレーション、制御フロー、および自動化ロジックを処理することで、LLMエージェントを補完します。

概要

アクションノードは、LLMエージェントノードとは視覚的に異なります — ワークフローを簡単にスキャンできるように、独自の色とアイコンを使用しています。各ノードタイプは、HTTPリクエストからデータベースクエリ、条件分岐まで、特定の操作カテゴリを処理します。

すべてのアクションノードは、エラー処理、トレース、実行制御、およびI/Oマッピングのための一連の標準プロパティを共有しています。これらは文字列フィールドでの{{variable}}補間をサポートし、先行ノードの出力を自動的に受け取ります。

アクションノードのワークフロー

利用可能なノード

ノードアイコン説明
トリガー🎯インディゴワークフローのエントリポイント(手動、ウェブフック、スケジュール、イベント)
HTTP🌐外部のAPIsにHTTPリクエストを行う
設定📝ワークフローの状態変数を定義し、操作する
変換⚙️ピンク式または組み込み操作を使用してデータを変換する
スイッチ🔀アンバー条件に基づいた条件分岐
ループ🔄エメラルド配列を反復処理するか、操作を繰り返す
マージ🔗Cyan複数のブランチを単一のフローに結合します
待機⏱️Gray期間または条件に基づいてワークフローを一時停止します
コード💻Redサンドボックス化されたランタイムでカスタムJavaScriptを実行します
データベース🗄️Tealデータベース操作 (PostgreSQL, MySQL, SQLite, MongoDB, Redis)
メール📧RoseSMTP経由でメールを送信するか、IMAP経由で監視します
通知🔔OrangeSlack、Discord、Teams、またはウェブフックに送信します
RSS📡Lime新しいエントリについてRSS/Atomフィードを監視します
ファイル📁Skyローカルまたはクラウドストレージ (S3, GCS, Azure) でのファイル操作

標準プロパティ

すべてのアクションノードは、これらの共有プロパティを継承します。

識別子

プロパティ説明
idstring一意の識別子
namestring表示名
descriptionstring?オプションのツールチップ説明

エラー処理

モード動作
stopエラー時にワークフローを停止 (デフォルト)
continueエラーをログに記録し、次のノードに進む
retry設定可能な回数 (1-10) と遅延 (ミリ秒) で再試行
fallbackエラー時にフォールバック値を使用する

トレース

プロパティ説明
enabledboolean詳細な実行トレースを有効にする
logLevelnone | error | info | debugログの冗長性

実行制御

プロパティ説明
timeoutnumberミリ秒単位のタイムアウト (デフォルト: 30000)
conditionstring?式がfalseと評価された場合、ノードをスキップします

入出力マッピング

プロパティ説明
inputMappingRecord<string, string>?状態フィールドをノード入力にマッピングします
outputKeystring結果がワークフローの状態に保存されるキー

ノードリファレンス

Trigger Node 🎯

ワークフローのエントリポイントです。すべてのワークフローはTrigger nodeから始まります。詳細については、専用のトリガーガイドを参照してください。

トリガータイプ説明
手動チャット入力によるユーザー開始
WebhookHTTP エンドポイント (POST/GET) (オプションの認証付き)
スケジュールCronベースのタイミング (タイムゾーンサポート付き)
イベント外部システムイベント (JSONPathフィルタリング付き)

HTTP ノード 🌐

完全な認証、ヘッダー、ボディ、およびレスポンス処理を備えた外部の APIs に HTTP リクエストを行います。

設定:

プロパティ説明
methodGET, POST, PUT, PATCH, DELETEHTTP メソッド
urlstring{{variable}} 補間を含む URL
authobject認証 (none, bearer, basic, api_key)
headersRecord<string, string>リクエストヘッダー
bodyobjectボディ (none, json, form, raw)
responseobjectレスポンス処理 (json, text, binary) オプションの JSONPath 抽出あり
rateLimitオブジェクト?レート制限(ウィンドウあたりのリクエスト数)

例:

{
  "type": "http",
  "name": "Fetch User Data",
  "method": "GET",
  "url": "https://api.example.com/users/{{userId}}",
  "auth": {
    "type": "bearer",
    "bearer": { "token": "{{API_TOKEN}}" }
  },
  "headers": { "Accept": "application/json" },
  "body": { "type": "none" },
  "response": { "type": "json", "jsonPath": "$.data" },
  "errorHandling": { "mode": "retry", "retryCount": 3, "retryDelay": 1000 },
  "mapping": { "outputKey": "userData" }
}

Setノード 📝

ワークフローの状態変数を定義および操作します。リテラル値、式、およびシークレットをサポートします。

設定:

プロパティ説明
modeset, merge, delete変数操作
variablesVariable[]設定する変数のリスト
envVarsobject?オプションのプレフィックスフィルターを使用して.envファイルからロード

変数型: string, number, boolean, json, expression

isSecret: trueとマークされた変数は、ログとUIでマスクされます。

トランスフォームノード ⚙️

式または組み込み操作を使用してデータを変換します。

トランスフォームの種類:

タイプ説明
jsonpathJSONPath式
jmespathJMESPath式
template補間付き文字列テンプレート
javascriptJavaScript式

組み込み操作: pick, omit, rename, flatten, sort, unique

型強制ターゲット: string, number, boolean, array, object

Switchノード 🔀

複数の出力ポートを持つ条件分岐です。各条件は、ノード上の個別の出力ポートにマッピングされます。

Switchプロパティパネル

設定:

プロパティ説明
evaluationModefirst_match | all_match最初のマッチで停止するか、すべてを評価する
conditionsSwitchCondition[]出力ポートを持つ条件のリスト
defaultBranchstring?条件が一致しない場合の出力ポート

条件演算子: eq, neq, gt, lt, gte, lte, contains, startsWith, endsWith, matches, in, empty, exists

例:

{
  "type": "switch",
  "evaluationMode": "first_match",
  "conditions": [
    { "id": "ok", "name": "Success", "field": "status", "operator": "eq", "value": "success", "outputPort": "success" },
    { "id": "err", "name": "Error", "field": "status", "operator": "eq", "value": "error", "outputPort": "error" }
  ],
  "defaultBranch": "unknown"
}

ループノード 🔄

配列を反復処理したり、固定回数繰り返したり、条件が満たされている間ループしたりします。

ループの種類:

タイプ説明
forEach状態から配列を反復処理する
while条件が真である間ループする
timesN回繰り返す

並列実行: オプションの batchSizedelayBetween を使用して、parallel.enabled を有効にし、並行イテレーションを可能にします。

結果の集約: results.collect が true の場合、イテレーション結果は results.aggregationKey の下に配列として集約されます。

マージノード 🔗

複数の並列ブランチを単一のフローに結合します。複数の入力ポートを持ちます。

マージモード:

モード動作
wait_allすべての入力ブランチの完了を待機
wait_any最初のブランチが完了したときに続行
wait_nN個のブランチが完了した後に続行

戦略を組み合わせる: array, object, first, last

オプションのタイムアウト continue または error の動作。

待機ノード ⏱️

ワークフローの実行を一時停止します。

待機タイプ:

種類説明
fixed固定期間待機 (ミリ秒, 秒, 分, 時間)
until特定のタイムスタンプまで待機
webhook受信ウェブフックを待機
condition一定間隔で条件をポーリング

コードノード 💻

サンドボックス化された boa_engine ランタイムでカスタム JavaScript を実行します。グラフの状態はグローバルな input オブジェクトとして注入されます。

設定:

プロパティ説明
languagejavascript, typescriptコード言語
codestring実行するコード
sandboxobjectセキュリティ制限(ネットワーク、ファイルシステム、メモリ、時間)

サンドボックスのデフォルト:

制限デフォルト
ネットワークアクセスfalse
ファイルシステムアクセスfalse
メモリ制限128 MB
時間制限5000 ms

データベースノード 🗄️

接続プールとパラメータ化されたクエリを使用してデータベース操作を実行します。

サポートされているデータベース:

データベースドライバー機能
PostgreSQLsqlx (postgres)非同期プール、パラメータ化されたクエリ、行からJSON
MySQLsqlx (mysql)非同期プール、パラメータ化されたクエリ、行からJSON
SQLitesqlx (sqlite)非同期プール、パラメータ化されたクエリ、行からJSON
MongoDBmongodbネイティブBSON、find/insert/update/delete
RedisredisGET, SET, DEL, HGET, HSET, LPUSH, LRANGE

接続文字列はシークレットとして扱われ、ログではマスクされます。

メールノード 📧

SMTP経由でメールを送信したり、IMAP経由で受信メールを監視したりします。

送信モード (SMTP):

  • TLS/SSL サポート
  • 認証
  • To/CC/BCC 受信者
  • HTML またはプレーンテキストの本文
  • 件名と本文における{{variable}}補間
  • 状態からのファイル添付

監視モード (IMAP):

  • フォルダー選択 (デフォルト: INBOX)
  • フィルター: 送信者、件名、日付範囲、未読のみ
  • 処理後に既読としてマーク

通知ノード 🔔

メッセージングプラットフォームに通知を送信します。

チャネル: Slack, Discord, Microsoft Teams, カスタムWebhook

メッセージ形式: プレーンテキスト、markdown、プラットフォーム固有のブロック (Block Kit, Embeds, Adaptive Cards)

RSSノード 📡

RSS/Atomフィードの新しいエントリを監視します。

  • 設定可能なポーリング間隔
  • キーワード、作成者、カテゴリ、日付フィルター
  • 重複を避けるための既読アイテム追跡
  • オプションでコンテンツ全体または要約のみ

ファイルノード 📁

ローカルまたはクラウドストレージでのファイル操作。

操作: read, write, delete, list

クラウドプロバイダー: Amazon S3, Google Cloud Storage, Azure Blob Storage

ファイル形式: JSON, CSV, XML, テキスト, バイナリ (区切り文字、ヘッダー、引用符のCSV解析オプション付き)


変数補間

アクションノードのすべての文字列フィールドは、動的な値のために{{variable}}構文をサポートしています。

https://api.example.com/users/{{userId}}
Bearer {{API_TOKEN}}
Hello {{user.name}}, your order {{orderId}} is ready.

変数は実行時にワークフローの状態から解決されます。ドット記法 (user.name) はネストされた値にアクセスします。

マルチポートノード

2つのノードタイプは動的なポート数を持っています。

  • Switch — 条件ごとに1つの出力ポートと、オプションのデフォルトポート
  • Merge — 複数の入力ポート、着信ブランチごとに1つ

これらのポートはノード上に視覚的に表現され、異なるダウンストリーム/アップストリームノードに接続されます。


コード生成

アクションノードは、LLM agents とともに本番環境のRustコードにコンパイルされます。依存関係は自動検出され、生成されたCargo.tomlに追加されます。

ノードCrate生成するもの
HTTPreqwest認証、ヘッダー、ボディ、JSONPath抽出を含むAsync HTTPリクエスト
データベースsqlx / mongodb / redisコネクションプール、パラメータ化されたクエリ、Redisコマンド
メールlettre / imapSMTP TLSでの送信; 検索フィルター付きIMAP監視
コードboa_engineグラフの状態をinputオブジェクトとして使用した組み込みJavaScript実行
設定native変数割り当て (リテラル、式、シークレット)
変換nativeマップ、フィルター、ソート、リデュース、フラット化、グループ化、ピック、マージ、テンプレート
統合ネイティブブランチの組み合わせ (waitAll, waitAny, append)

生成されたすべてのコードは、エラー処理のために adk-graph FunctionNode クロージャを GraphError::NodeExecutionFailed と共に使用します。

生成されたコードの例(HTTP ノード):

let http_node = FunctionNode::new("fetch_data", |ctx| async move {
    let client = reqwest::Client::new();
    let resp = client.get("https://api.example.com/data")
        .bearer_auth(&ctx.get("API_TOKEN").unwrap_or_default())
        .send().await
        .map_err(|e| GraphError::NodeExecutionFailed {
            node: "fetch_data".into(),
            message: e.to_string(),
        })?;
    let body: serde_json::Value = resp.json().await?;
    Ok(NodeOutput::new().with_update("apiData", body))
});

生成されたコードの例(Code ノード):

let code_node = FunctionNode::new("process", |ctx| async move {
    let mut js_ctx = boa_engine::Context::default();
    // Graph state injected as global `input` object
    // User code executed in thread-isolated sandbox
    Ok(NodeOutput::new().with_update("result", output))
});

前へ: ← Studio | 次へ: Triggers →