> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# ワークフロー

## 概要

エージェントワークフローは、ElevenAgentsで複雑な会話フローを設計するための強力なビジュアルインターフェースです。直線的な会話パスに頼るのではなく、ユーザーのニーズに動的に適応する高度な分岐型会話グラフを作成できます。

![ワークフローの概要](/docs/_fern-img/0b5b2cf9754c67ef469c08af5d13786f70ca8e0018d10e92595861abb4ed32cb.webp)

## ワークフローの構築

ビジュアルグラフエディターを使用できるため、ワークフローの設計にはダッシュボードをおすすめします。ワークフローはエージェントの最上位`workflow`フィールドに保存されるため、CLIでJSONを取得、編集、送信したり、SDKで更新したりすることもできます。バージョン管理やCI/CDに便利です。

#### ダッシュボードで構築

ダッシュボードでエージェントを開き、**ワークフロー**タブに移動して、ビジュアルエディターでノードの追加、サブエージェントの動作の設定、エッジの接続を行います。変更を保存してください。

#### CLIで更新

#### エージェント設定を取得

```bash
elevenlabs agents pull --agent "<agent-name>"
```

#### \`agent_configs/\<agent-name>.json\`を編集

ワークフローグラフは最上位の`workflow`キーの下にあります。`nodes`と`edges`はIDをキーとするオブジェクトです。以下は、開始ノードをサポートサブエージェントにルーティングし、その後終了ノードへ進む最小限の3ノードワークフローです。

```json
{
  "workflow": {
    "nodes": {
      "start_node": {
        "type": "start",
        "edge_order": ["start_to_support"]
      },
      "support_agent": {
        "type": "override_agent",
        "label": "Support agent",
        "additional_prompt": "Help the user with their support request, then transition to the end node when resolved.",
        "edge_order": ["support_to_end"]
      },
      "end_node": {
        "type": "end"
      }
    },
    "edges": {
      "start_to_support": {
        "source": "start_node",
        "target": "support_agent",
        "forward_condition": { "type": "unconditional" }
      },
      "support_to_end": {
        "source": "support_agent",
        "target": "end_node",
        "forward_condition": {
          "type": "llm",
          "condition": "The support request has been resolved."
        }
      }
    }
  }
}
```

多くのチームでは、最初にダッシュボードでワークフローを設計し、生成されたJSONをバージョン管理にコミットします。

#### 変更を送信

```bash
elevenlabs agents push --agent "<agent-name>"
```

#### APIで更新

```python
from elevenlabs import ElevenLabs

elevenlabs = ElevenLabs()

elevenlabs.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    workflow={
        "nodes": {
            "start_node": {
                "type": "start",
                "edge_order": ["start_to_support"],
            },
            "support_agent": {
                "type": "override_agent",
                "label": "Support agent",
                "additional_prompt": "Help the user with their support request, then transition to the end node when resolved.",
                "edge_order": ["support_to_end"],
            },
            "end_node": {"type": "end"},
        },
        "edges": {
            "start_to_support": {
                "source": "start_node",
                "target": "support_agent",
                "forward_condition": {"type": "unconditional"},
            },
            "support_to_end": {
                "source": "support_agent",
                "target": "end_node",
                "forward_condition": {
                    "type": "llm",
                    "condition": "The support request has been resolved.",
                },
            },
        },
    },
)
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

await elevenlabs.conversationalAi.agents.update("agent_7101k5zvyjhmfg983brhmhkd98n6", {
  workflow: {
    nodes: {
      start_node: {
        type: "start",
        edgeOrder: ["start_to_support"],
      },
      support_agent: {
        type: "override_agent",
        label: "Support agent",
        additionalPrompt:
          "Help the user with their support request, then transition to the end node when resolved.",
        edgeOrder: ["support_to_end"],
      },
      end_node: { type: "end" },
    },
    edges: {
      start_to_support: {
        source: "start_node",
        target: "support_agent",
        forwardCondition: { type: "unconditional" },
      },
      support_to_end: {
        source: "support_agent",
        target: "end_node",
        forwardCondition: {
          type: "llm",
          condition: "The support request has been resolved.",
        },
      },
    },
  },
});
```

## ノードの種類

ワークフローは、会話フロー内でそれぞれ特定の役割を果たすさまざまなノードタイプで構成されます。

![ノードタイプ](/docs/_fern-img/b169065e0f229623a4cd57861802fa30ecd463a142599f5fd60f6fc1b8a6223e.webp)

### サブエージェントノード

サブエージェントノードでは、ワークフローの特定の地点でエージェントの動作を変更できます。これらの変更はベースエージェント設定に追加して適用することも、現在のエージェント設定を完全にオーバーライドすることもできるため、会話の各フェーズをきめ細かく制御できます。
エージェント設定、利用可能なツール、接続されたナレッジベース項目を更新または上書きできます。

#### 一般

![サブエージェントの追加エージェント設定](/docs/_fern-img/8ca72df8768a03adc0064281c906ab0f5710153249d17f7e7d51f465da7e9e94.webp)

この特定ノードのコアエージェント設定を変更します。

* **システムプロンプト**：エージェントの動作を導くシステム指示を追加またはオーバーライド
* **LLMの選択**：別の言語モデルを選択（例：複雑な推論タスクではGemini 2.0 Flashからより強力なモデルに切り替え）
* **音声設定**：速度、トーンなどの音声設定を変更、または別の音声に切り替え

**ユースケース：**

* 複雑な意思決定ノードでは、より強力なLLMを使用
* 機密情報の収集時には、より厳格な会話ガイドラインを適用
* 会話のフェーズごとに音声特性を変更
* 特定のインタラクションタイプ向けにエージェントの個性を変更

#### ナレッジベース

![サブエージェントの追加ナレッジベース](/docs/_fern-img/168a56fc316596983275999c53bbbe391c4c30a05abedc17cb6a4566eff7773f.webp)

グローバルナレッジベースに影響を与えずに、ノード固有のナレッジを追加します。

* **グローバルナレッジベースを含める**：エージェントのメインナレッジベースを含めるか切り替え
* **追加ドキュメント**：この会話フェーズに固有のドキュメントを追加
* **動的ナレッジ**：ワークフローの状態に基づいてコンテキスト情報を挿入

**ユースケース：**

* 営業会話中にプロダクト固有のドキュメントを追加
* 認証中にコンプライアンスガイドラインを含める
* サポートフローにトラブルシューティングガイドを提供
* 適格性確認後にのみ価格情報を追加

#### ツール

![サブエージェントの追加ツール](/docs/_fern-img/9af53c3227661fd88bec57cb21197eb289760d33a874b56152d507373e51bac1.webp)

このノードでエージェントが利用できるツールを管理します。

* **グローバルツールを含める**：メインエージェント設定のツールを含めるか切り替え
* **追加ツール**：このワークフローノードに固有のツールを追加（例：`book_meeting`のようなWebhookツール）
* **ツールタイプ**：ツールがWebhook、API呼び出し、またはほかのインテグレーションのどれかを指定

**ユースケース：**

* 初回の適格性確認後にのみ認証ツールを追加
* チェックアウトノードで決済処理ツールを有効化
* ユーザー確認後にCRMアクセスを提供
* 予約フェーズにスケジュール管理ツールを追加
* 会議予約などの特定アクション用にWebhookツールを含める

### 発話ノード

発話ノードは、ワークフローの特定の地点でエージェントに1つのメッセージを発話させ、その後、出力エッジに沿って進みます。挨拶、法的開示、ユーザーへの確認内容の読み上げなど、メッセージの文言が重要でサブエージェントに任せるべきでない場合に使用します。

各発話ノードは、次のいずれかのモードでメッセージを送信します。

* **リテラル**：設定済みの言語ごとの任意の翻訳とともに、入力した正確なテキストをエージェントが発話します。
* **プロンプト**：記述した説明からLLMがメッセージを生成します。

### ツールディスパッチノード

ツールノードは、会話フロー中に特定のツール呼び出しを実行します。サブエージェント内のツールとは異なり、ツールノードはツールの呼び出しを保証する専用の実行ポイントです。

![ツールノードの結果エッジ](/docs/_fern-img/6b60603e56dfb25e89cdfe4223826f635af874e034af8936d74d3b428611e17b.webp)

**特別なエッジ設定：**
ツールノードには、ツール実行結果に基づいて新しいノードへルーティングできる固有のエッジタイプがあります。以下を定義できます。

* **成功パス**：ツールが正常に実行された場合のルーティング先
* **失敗パス**：ツールが失敗した場合またはエラーを返した場合のルーティング先

今後、さらに分岐条件が追加される予定です。

### 状態を更新ノード

状態を更新ノードは、ワークフローが通過するたびに、状態を更新ツールと同じ式を使用して、1つ以上の[動的変数](/docs/ja/eleven-agents/customization/personalization/dynamic-variables)を割り当てます。LLMが呼び出すと判断したときに実行されるツールとは異なり、このノードはグラフ内のその地点で常に更新を適用し、その後、出力エッジに沿って進みます。

詳細は[こちら](/docs/ja/eleven-agents/customization/tools/system-tools/update-state)をご覧ください。

### エージェント転送ノード

エージェント転送ノードは、異なる会話型エージェント間で会話を引き継ぎます。詳細は[こちら](/docs/ja/eleven-agents/customization/tools/system-tools/agent-transfer)をご覧ください。

### 番号へ転送ノード

番号へ転送ノードは、電話システムを介してAIエージェントとの会話から人間のエージェントへ移行します。詳細は[こちら](/docs/ja/eleven-agents/customization/tools/system-tools/transfer-to-number)をご覧ください。

### 終了ノード

通話終了ノードは会話フローを適切に終了します。詳細は[こちら](/docs/ja/eleven-agents/customization/tools/system-tools/transfer-to-number#:~:text=System%20tools-,End%20call,-Language%20detection)をご覧ください。

## エッジとフロー制御

エッジは、ワークフロー内でノード間を会話がどのように流れるかを定義します。動的でコンテキストに応じた会話パスを実現する高度なルーティングロジックをサポートしています。

![ワークフローエッジ](/docs/_fern-img/02d664c9211bb8cf5452b80ab865f26b8d0b723a6acff75141ea1e9c43f7dbab.webp)

#### 順方向エッジ

順方向エッジは、会話をワークフロー内の後続ノードへ移動させます。会話の主要フローを表します。

![順方向エッジの設定](/docs/_fern-img/2400c66bf6f60b0d4262ecd828dea93847197f7cc00d9c8964e6486419bc90be.webp)

#### 逆方向エッジ

逆方向エッジは、会話を前のノードにループバックさせ、反復的なインタラクションと再試行ロジックを実現します。

![逆方向エッジの設定](/docs/_fern-img/e211da75e56c826fd763ae4d8149604a866d3ec63271c572e177d52bb9a80e14.webp)

**ユースケース：**

* 失敗した認証試行を再試行
* 追加情報の収集に戻る
* ユーザー要件の変更後に再度適格性を確認
* 反復的なトラブルシューティングプロセス

#### LLM条件

自然言語による評価に基づいた動的な会話フローを作成するには、LLM条件を使用します。LLMがリアルタイムで条件を評価し、適切なパスを決定します。

![LLM条件のエージェント転送](/docs/_fern-img/507885879d781f291ab35b7dda84e760767a5544ffb6bf7b455e7a1cc19b78b7.webp)

**設定オプション：**

* **ラベル**：エッジ条件の人間が読める説明（LLMでは処理されません）
* **LLM条件**：LLMが評価する自然言語の条件

#### 式

変数と構造化データに基づく条件ロジックを作成するには、式を使用します。

![式によるエージェント転送](/docs/_fern-img/712fc40d707906a7c6ccb4b0a76f0fd3857278176606d441bfb5245f5f6e0ffe.webp)

**設定オプション：**

* **ラベル**：エッジ条件の人間が読める説明（LLMでは処理されません）
* **式**：データ構造に基づく決定論的な評価基準

#### なし

無条件の遷移は、条件なしで会話を自動的に次のノードへ移動させます。

![無条件のエージェント転送](/docs/_fern-img/73b70ce7c783277e64ba533f6d69c84e2ed3120f1fd03dbdebcd4d4f5358eb5b.webp)

**ユースケース：**

* 常に連続する順次ステップ
* アクション完了後の自動進行
* デフォルトのフォールバックパス

## 分析

![ワークフローグラフ上に重ねて表示された、ノードごとのエントリー数、所要時間、終了数、エッジフローを示すワークフロー分析タブ](/docs/_fern-img/a758029a005f0327c1e6319708577efd617399c72cec63d5c342d3af2f0db2a3.webp)

ワークフローを公開すると、[分析ダッシュボード](/docs/ja/eleven-agents/dashboard#workflow-analytics)の**ワークフロー**タブに使用状況データがグラフ上へ表示されます。各ノードのエントリー数、平均滞在時間、終了数に加え、各ノードの入力および出力エッジの分布を確認できます。ノードインスペクターからは、**ノードに入った**フィルターを使って、履歴内の該当する会話に直接移動することもできます。