> ## 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.

# 代码

> 本文档由 AI 自动翻译。如有任何不准确之处，请参考 [英文原版](/en/self-host/use-dify/nodes/code)。

代码节点执行自定义 Python 或 JavaScript 来处理工作流中复杂的数据转换、计算和逻辑。当预设节点无法满足你的特定处理需求时可以使用它。

<Frame caption="代码节点配置界面">
  ![代码节点配置界面](https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/9969aa1bc1912aebe366f5d8f5dde296.png)
</Frame>

## 沙箱服务

代码节点依赖 `sandbox` 服务，该服务在标准 Docker Compose 部署中定义，随整个技术栈一起自动启动：

```bash theme={null}
docker compose up -d
```

沙箱以独立容器运行，将代码执行与宿主机及其他服务隔离。通过 `docker/envs/core-services/sandbox.env.example` 中的 `SANDBOX_*` 环境变量调整其行为（worker 超时、经由 SSRF 代理的网络访问、端口），通过 `docker/envs/core-services/shared.env.example` 中的 `CODE_*` 变量调整输出限制（由 API 读取）。

## 配置

定义 **输入变量** 以访问工作流中其他节点的数据，然后在代码中引用这些变量。你的函数必须返回一个包含你已声明的 **输出变量** 的字典。

```python theme={null}
def main(input_variable: str) -> dict:
    # Process the input
    result = input_variable.upper()
    return {
        'output_variable': result
    }
```

## 语言支持

根据你的需求和熟悉程度在 **Python** 和 **JavaScript** 之间进行选择。两种语言都在安全沙箱中运行，并可访问用于数据处理的常用库。

<Tabs>
  <Tab title="Python">
    Python 包含标准库，如 `json`、`math`、`datetime` 和 `re`。非常适合数据分析、数学运算和文本处理。

    ```python theme={null}
    def main(data: list) -> dict:
        import json
        import math
        
        average = sum(data) / len(data)
        return {'result': math.ceil(average)}
    ```
  </Tab>

  <Tab title="JavaScript">
    JavaScript 提供标准内置对象和方法。适合 JSON 操作和字符串操作。

    ```javascript theme={null}
    function main(data) {
        const processed = data.map(item => item.toUpperCase());
        return { result: processed };
    }
    ```
  </Tab>
</Tabs>

## 错误处理和重试

为失败的代码执行配置自动重试行为，并定义代码遇到错误时的回退策略。

<Frame caption="错误处理配置选项">
  ![错误处理配置选项](https://assets-docs.dify.ai/2024/12/58f392734ce44b22cd8c160faf28cd14.png)
</Frame>

**重试设置** 允许最多 10 次自动重试，并可配置间隔（最大 5000ms）。启用此功能来处理临时处理问题。

**错误处理** 让你在代码执行失败时定义回退路径，使你的工作流即使在代码遇到问题时也能继续运行。

<Frame caption="重试配置界面">
  ![重试配置界面](https://assets-docs.dify.ai/2024/12/9fdd5525a91dc925b79b89272893becf.png)
</Frame>

## 输出验证和限制

代码输出会根据 API 容器上设置的可配置限制进行验证：

* **字符串**：最大长度由 `CODE_MAX_STRING_LENGTH` 设置（默认 400,000 个字符），空字节会被剥离。
* **数字**：范围由 `CODE_MAX_NUMBER` 和 `CODE_MIN_NUMBER` 设置（默认为 int64 范围），浮点数精度由 `CODE_MAX_PRECISION` 设置（默认 20 位小数）。
* **对象和数组**：最大嵌套深度由 `CODE_MAX_DEPTH` 设置（默认 5），数组大小由 `CODE_MAX_STRING_ARRAY_LENGTH`、`CODE_MAX_OBJECT_ARRAY_LENGTH` 和 `CODE_MAX_NUMBER_ARRAY_LENGTH` 设置。

默认值位于 `docker/envs/core-services/shared.env.example`。收紧限制可约束输出大小，放宽限制可让工作流正常产出更大的负载。

## 安全考虑

代码在严格的沙箱中执行，阻止文件系统访问、网络请求和系统命令。这在提供编程灵活性的同时保持安全性。

出于安全原因，某些操作会被自动阻止。避免尝试访问系统文件或执行可能危险的操作。默认情况下，沙箱代码的出站网络调用经由 SSRF 代理路由，设置 `SANDBOX_ENABLE_NETWORK=false` 可完全禁用沙箱代码的网络访问。

## 依赖支持

代码节点支持 Python 和 JavaScript 的外部依赖：

```python theme={null}
# Python: Import numpy, pandas, requests, etc.
import numpy as np
import pandas as pd

def main(data: list) -> dict:
    df = pd.DataFrame(data)
    return {'mean': float(np.mean(df['values']))}
```

```javascript theme={null}
// JavaScript: Import lodash, moment, etc.
const _ = require('lodash');

function main(data) {
    return { unique: _.uniq(data) };
}
```

沙箱环境中预装了依赖项。可在你的 Dify 安装中查看可用包列表。
