```mdx
---
title: "代码"
description: "执行自定义Python或JavaScript进行数据处理"
icon: "code"
---

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

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

## 配置

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

```python
def main(input_variable: str) -> dict:
    # 处理输入
    result = input_variable.upper()
    return {
        'output_variable': result
    }
```

## 语言支持

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

<Tabs>
  <Tab title="Python">
    Python包括标准库，如`json`、`math`、`datetime`和`re`。非常适合数据分析、数学运算和文本处理。
    
    ```python
    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
    function main(data) {
        const processed = data.map(item => item.toUpperCase());
        return { result: processed };
    }
    ```
  </Tab>
</Tabs>

## 错误处理和重试

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

<Frame caption="错误处理配置选项">
  <img src="https://assets-docs.dify.ai/2024/12/58f392734ce44b22cd8c160faf28cd14.png" alt="代码错误处理" />
</Frame>

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

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

<Frame caption="重试配置界面">
  <img src="https://assets-docs.dify.ai/2024/12/9fdd5525a91dc925b79b89272893becf.png" alt="重试设置" />
</Frame>

## 输出验证和限制

代码输出会自动进行严格的限制验证：
- **字符串**：最大长度为80,000字符，空字节被移除
- **数字**：范围从-999999999到999999999，浮点数限制为10位小数
- **对象/数组**：最大深度为5级，以防止复杂的嵌套结构

这些限制确保了工作流的性能并防止内存问题。

## 安全考虑

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

出于安全原因，某些操作会被自动阻止。请避免尝试访问系统文件或执行潜在危险的操作：

<Frame caption="由Cloudflare WAF进行的安全过滤">
  <img src="https://assets-docs.dify.ai/2024/12/ad4dc065c4c567c150ab7fa7bfd123a3.png" alt="Cloudflare WAF阻止" />
</Frame>

如果您的代码未保存，请检查浏览器的网络选项卡——安全过滤器可能会阻止潜在危险的操作。

## 依赖支持

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

```python
# Python：导入numpy、pandas、requests等
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
// JavaScript：导入lodash、moment等
const _ = require('lodash');

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

依赖项已预安装在沙箱环境中。请在您的Dify安装中检查可用的软件包列表。

## 自托管设置

对于自托管的Dify安装，启动沙箱服务以进行安全的代码执行：

```bash
docker-compose -f docker-compose.middleware.yaml up -d
```

沙箱服务需要Docker，并将代码执行与您的主系统隔离以确保安全。

## 常见用例

**数据解析** - 从API或其他节点返回的复杂JSON结构中提取特定值。

**数学运算** - 执行计算、统计分析或数据聚合，而预设节点无法处理。

**数据转换** - 转换数据格式，合并多个数据源或重组信息以进行下游处理。

**条件逻辑** - 实现超出简单if-else条件的复杂决策逻辑。
```