> ## Documentation Index
> Fetch the complete documentation index at: https://dify-6c0370d8-docs-new-agent-experience.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 核心概念

> Dify 核心概念快速概览

> 本文档由 AI 自动翻译。如有任何不准确之处，请参考 [英文原版](/en/learn/key-concepts)。

### Dify 应用

Dify 专为智能体应用构建而设计。在 **Studio** 中，你可以通过拖拽界面快速构建智能体工作流并将其发布为应用。你可以通过 API、Web 或作为 [MCP 服务器](/zh/cloud/use-dify/publish/publish-mcp)访问已发布的应用。Dify 提供两种主要的应用类型：工作流和对话流。在创建新应用时，你需要选择一种应用类型。

<Info>
  我们推荐选择工作流或对话流作为你的应用类型。但除了这些之外，Dify 还提供 3 种更基础的应用类型：聊天机器人、Agent 和文本生成器。

  <Frame>
    <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/app-type-selector.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=21812f3bd0b049be3f1fe0b108aed69b" alt="应用类型选择器" width="1488" height="558" data-path="images/use-dify/get-started/app-type-selector.png" />
  </Frame>

  这些应用类型在底层运行相同的工作流引擎，但提供了更简单的传统界面：

  <Frame>
    <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/chatbot-interface.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=7ac383cee9a5b2959fc0f2a761ba89d5" alt="聊天机器人界面" width="1225" height="896" data-path="images/use-dify/get-started/chatbot-interface.png" />
  </Frame>
</Info>

### 工作流

构建工作流应用来处理单轮任务。Web 应用界面和 API 提供了便捷的批量执行多个任务的访问方式。

<Info>
  在底层，工作流构成了 Dify 中所有其他应用类型的基础。
</Info>

每个工作流都以一个 [开始节点](/zh/cloud/use-dify/nodes/start) 开始：用户输入（按需启动，由用户或 API 调用触发）或触发器（自动启动，按计划或响应外部事件）。

### 对话流

对话流是一种特殊类型的工作流应用，在对话的每一轮都会被触发。除了工作流功能外，对话流还具有存储和更新自定义对话特定变量的能力，在大型语言模型节点中启用记忆功能，并在对话流运行的不同节点流式传输格式化的文本、图像和文件。

对话流始终以用户输入开始。

### Dify 领域特定语言

所有 Dify 应用都可以导出为 Dify 自有领域特定语言的 YAML 文件，你也可以直接从这些领域特定语言文件创建 Dify 应用。这使得将应用移植到其他 Dify 实例并与他人分享变得容易。

### 变量

变量是存储信息的标记容器，因此你可以通过引用其名称来查找和使用该信息。在构建 Dify 应用时，你会遇到不同类型的变量：

**输入**：你可以在[用户输入](/zh/cloud/use-dify/nodes/user-input)节点为你的应用最终用户指定任意数量的输入变量来填写。

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/user-input-node-variables.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=a014745b24132b602bfb786c7b31e508" alt="用户输入节点变量" width="726" height="616" data-path="images/use-dify/get-started/user-input-node-variables.png" />
</Frame>

此外，用户输入节点还带有一组输入变量，你可以在流程中稍后引用。根据应用程序类型（工作流或对话流），会提供不同的变量。

<Tabs>
  <Tab title="工作流">
    | 变量名                   | <div style={{width: '70px'}}>数据类型</div> | 描述                                              | 注释                                |
    | :-------------------- | :-------------------------------------- | :---------------------------------------------- | :-------------------------------- |
    | `sys.user_id`         | String                                  | 用户 ID：系统在用户使用工作流应用程序时自动分配给每个用户的唯一标识符。用于区分不同的用户。 |                                   |
    | `sys.app_id`          | String                                  | 应用程序 ID：系统自动分配给每个应用程序的唯一标识符。此参数用于记录当前应用程序的基本信息。 | 此参数用于具有开发能力的用户区分和定位不同的工作流应用程序。    |
    | `sys.workflow_id`     | String                                  | 工作流 ID：此参数记录当前工作流应用程序中所有节点的信息。                  | 此参数可供具有开发能力的用户用于跟踪和记录工作流中包含的节点信息。 |
    | `sys.workflow_run_id` | String                                  | 工作流运行 ID：用于记录工作流应用程序的运行时状态和执行日志。                | 此参数可供具有开发能力的用户用于跟踪应用程序的历史执行记录。    |
    | `sys.timestamp`       | Number                                  | 每次工作流执行的开始时间。                                   |                                   |
  </Tab>

  <Tab title="对话流">
    | 变量名                   | <div style={{width: '70px'}}>数据类型</div> | 描述                                                                                                             | 注释                                                                      |
    | :-------------------- | :-------------------------------------- | :------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------- |
    | `sys.conversation_id` | String                                  | 聊天框交互会话的唯一 ID，将所有相关消息分组到同一对话中，确保 LLM 在相同的主题和上下文中继续聊天。                                                          |                                                                         |
    | `sys.dialogue_count`  | Number                                  | 用户与对话流应用程序交互期间的对话轮次数。每次聊天轮次后计数自动增加 1，可与 if-else 节点结合使用以创建丰富的分支逻辑。<br /><br />例如，LLM 将在第 X 个对话轮次时审查对话历史并自动提供分析。 |                                                                         |
    | `sys.user_id`         | String                                  | 为每个应用程序用户分配一个唯一 ID，以区分不同的对话用户。                                                                                 | 服务 API 不共享 WebApp 创建的对话。这意味着具有相同 ID 的用户将在 API 和 WebApp 界面之间具有单独的对话历史记录。 |
    | `sys.app_id`          | String                                  | 应用程序 ID：系统自动分配给每个应用程序的唯一标识符。此参数用于记录当前应用程序的基本信息。                                                                | 此参数用于具有开发能力的用户区分和定位不同的工作流应用程序。                                          |
    | `sys.workflow_id`     | String                                  | 工作流 ID：此参数记录当前工作流应用程序中所有节点的信息。                                                                                 | 此参数可供具有开发能力的用户用于跟踪和记录工作流中包含的节点信息。                                       |
    | `sys.workflow_run_id` | String                                  | 工作流运行 ID：用于记录工作流应用程序的运行时状态和执行日志。                                                                               | 此参数可供具有开发能力的用户用于跟踪应用程序的历史执行记录。                                          |
  </Tab>
</Tabs>

用户输入在每次工作流运行开始时设置，无法更新。

**输出**：每个节点产生一个或多个输出，可以在后续节点中引用。例如，大型语言模型节点有以下输出：

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/llm-node-output-variables.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=78fc22dea7ebac7900972b625d0cce03" alt="LLM 节点输出变量" width="508" height="300" data-path="images/use-dify/get-started/llm-node-output-variables.png" />
</Frame>

与输入一样，节点输出也无法更新。

**环境变量**：使用环境变量来存储你应用特定的敏感信息，如 API 密钥。这允许在密钥和 Dify 应用本身之间进行清晰分离，因此在分享你的应用领域特定语言时，你不必承担暴露密码和密钥的风险。环境变量也是常量，无法更新。

**会话变量（仅对话流）**：这些变量是对话特定的，意味着它们在单个对话的多轮对话流运行中持续存在，因此你可以存储和访问动态信息，如待办事项列表和令牌成本。你可以通过变量分配器节点更新会话变量的值：

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/conversation-variables-panel.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=acc6392eaf10a15b6f616941f4b580ef" alt="会话变量面板" width="834" height="756" data-path="images/use-dify/get-started/conversation-variables-panel.png" />
</Frame>

### 变量引用

在配置输入字段时，你可以通过从下拉菜单中选择，轻松将变量传递给任何节点：

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/variable-picker-dropdown.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=7539375f8abd7d5e1869890d9474f83f" alt="变量选择下拉菜单" width="894" height="900" data-path="images/use-dify/get-started/variable-picker-dropdown.png" />
</Frame>

你还可以通过键入 `/` 斜杠并从下拉菜单中选择所需变量，将变量值插入到复杂的文本输入中。

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/KTjMDbgg3Xu7ai2T/images/use-dify/get-started/variable-slash-insert.png?fit=max&auto=format&n=KTjMDbgg3Xu7ai2T&q=85&s=b41b0ca7a3e1e8f36570073735c69e68" alt="斜杠插入变量" width="1048" height="1264" data-path="images/use-dify/get-started/variable-slash-insert.png" />
</Frame>
