> 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 为键的对象。以下是一个最小化的三节点工作流：它将起始节点路由到支持子智能体，然后路由到结束节点：

```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 工具

### Say 节点

Say 节点会让智能体在工作流的特定位置说出一条消息，然后沿其出边继续执行。当消息措辞很重要且不应交由子智能体决定时，可使用此节点，例如问候语、法律披露声明或向用户复述确认内容。

每个 Say 节点会以以下两种模式之一发送消息：

* **字面文本**：智能体说出你输入的确切文本，并可为每种已配置语言提供可选翻译。
* **提示词**：LLM 根据你编写的说明生成消息。

### 调度工具节点

工具节点会在对话流程中执行特定的工具调用。与子智能体中的工具不同，工具节点是专用执行点，可确保工具被调用。

![工具节点结果边](/docs/_fern-img/6b60603e56dfb25e89cdfe4223826f635af874e034af8936d74d3b428611e17b.webp)

**特殊边配置：**
工具节点具有独特的边类型，可根据工具执行结果路由至新节点。可定义：

* **成功路径**：工具成功执行后路由到的位置
* **失败路径**：工具失败或返回错误后路由到的位置

未来将提供更多分支条件。

### 更新状态节点

每当工作流经过更新状态节点时，该节点都会使用与更新状态工具相同的表达式，为一个或多个[动态变量](/docs/zh/eleven-agents/customization/personalization/dynamic-variables)赋值。与在 LLM 决定调用时运行的工具不同，该节点始终会在图中的该位置应用更新，然后沿其出边继续执行。

[在此了解更多](/docs/zh/eleven-agents/customization/tools/system-tools/update-state)。

### 智能体转接节点

智能体转接节点可在不同对话智能体之间转交对话，[在此了解更多](/docs/zh/eleven-agents/customization/tools/system-tools/agent-transfer)。

### 转接至号码节点

转接至号码节点可通过电话系统将与 AI 智能体的对话转接给人工客服，[在此了解更多](/docs/zh/eleven-agents/customization/tools/system-tools/transfer-to-number)

### 结束节点

结束通话节点会妥善终止对话流程，[在此了解更多](/docs/zh/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/zh/eleven-agents/dashboard#workflow-analytics)中的 **工作流**选项卡会在图上叠加使用数据：每个节点的进入次数、平均停留时间和终止次数，以及各节点的入边和出边分布。还可从节点检查器通过 **已进入节点**筛选器直接跳转至历史记录中对应的对话。