TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

Dify 代码节点与 HTTP 请求节点

Dify 代码节点可运行 Python 或 JavaScript 处理复杂逻辑,HTTP 请求节点可调用外部 API。本文讲两者的配置、输出限制、沙箱、认证、重试和 SSL 验证。

这篇适合谁,读完能做什么

这篇适合遇到预设节点搞不定的数据处理、又需要调用外部接口的人。读完你能写出代码节点的函数,知道输出有哪些限制、沙箱里能做什么,并能配置 HTTP 请求节点的请求方法、认证、正文类型和重试。

什么时候用代码节点

代码节点执行自定义的 Python 或 JavaScript,用来处理复杂的数据转换、计算和逻辑。当预设节点无法满足你的处理需求时使用它[1]。

怎么写代码节点的函数

在节点中定义 输入变量,就能访问其他节点的数据,然后在代码中引用它们。函数必须返回一个字典,其中包含你声明过的 输出变量[1]。最简单的写法是这样的[1]:

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

Python 还是 JavaScript

两种语言都在安全沙箱中运行,并且可以使用常用的数据处理库[1]。Python 自带标准库,如 json、math、datetime 和 re,适合数据分析、数学运算和文本处理[1]。下面的例子计算列表的平均值并向上取整[1]:

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

JavaScript 提供标准的内置对象和方法,适合 JSON 和字符串操作[1]。下面的例子把列表中的每一项转为大写[1]:

function main(data) {
    const processed = data.map(item => item.toUpperCase());
    return { result: processed };
}

失败后重试和错误处理

代码执行失败时,可以自动重试,最多 10 次,间隔最长 5000 毫秒,用来应对临时的处理问题[1]。错误处理 可以定义代码失败时的回退路径,让工作流继续运行[1]。

输出有哪些限制

输出超出以下任一限制,节点就会失败[1]:

  • 字符串:400,000 个字符。
  • 数值:正负 9,223,372,036,854,775,807。更大的数字(比如很长的 ID)请改用字符串返回。
  • 小数位数:20 位。
  • 嵌套对象:object 输出中嵌套的对象最多 3 层,数组不算一层。
  • 数组元素:array[string]、array[object]、array[number] 输出最多 500 个元素。

返回前,裁剪或拆分过长的字符串和数组,并把嵌套过深的对象展平[1]。

沙箱里能做什么

代码运行在隔离的沙箱中,沙箱禁止访问文件系统、执行系统命令,把代码执行和底层基础设施隔开[1]。不要尝试读取系统文件或运行 shell 命令,改用输入变量和沙箱里可用的库来实现逻辑[1]。

怎么引入外部依赖

Python 和 JavaScript 都可以导入外部依赖。但沙箱中预装的只是一组标准包,导入这组之外的包会在执行时失败[1]。下面的 Python 例子使用 numpy 和 pandas[1]:

# 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']))}

用 HTTP 请求节点调用外部 API

HTTP 请求节点把工作流连接到外部 API 和 Web 服务。它可以获取数据、发送 Webhook、上传文件,也可以与任何接受 HTTP 请求的服务集成[2]。

选哪种请求方法

GET 只读取数据,不修改任何内容;HEAD 只返回响应头;POST 发送数据,通常用于创建资源;PUT 创建或完整替换资源;PATCH 对资源做部分更新;DELETE 删除资源[2]。

怎么引用变量

用双花括号引用工作流变量,例如 {{variable_name}}。Dify 支持深度对象访问,所以可以用 {{api_response.data.items[0].id}} 这样的路径取出嵌套的值[2]。Secret 类型的环境变量,在工作流运行日志和节点的请求日志中会显示为掩码[2]。

超时和认证

连接超时、读取超时和写入超时都可以配置,分别对应建立连接、读取响应数据和发送请求数据的最长时间[2]。

no-auth(type "no-auth")不添加任何头部。API 密钥类认证有三个子类型:基础(base64 编码的 Basic 头部)、Bearer(Authorization: Bearer token 头部)和 自定义(指定名称和值的头部)[2]。

请求正文怎么选

JSON 用于结构化数据,表单数据 用于传统的 Web 表单,二进制 用于文件上传,原始文本 用于自定义的内容类型[2]。

文件和响应

节点会用 Content-Disposition、MIME 类型判断响应是否为文件;对于类型模糊的情况,还会采样前 1024 字节。JSON、XML、HTML 等文本响应按普通数据处理,二进制内容则变成文件变量[2]。后续节点可以读取响应正文、状态码、头部、文件,以及以 KB、MB 等可读单位显示的大小信息[2]。

SSL 验证和重试

每个节点的 SSL 证书验证都可以配置,对应 ssl_verify 参数。这样既能连接使用自签名证书的内部服务,又能让外部 API 保持验证[2]。失败的 HTTP 请求最多可以自动重试 10 次,间隔最长 5000 毫秒,用于应对临时的网络问题或服务不可用[2]。

下一步

两个节点的完整配置项,请参阅 Dify 官方文档[1][2]。

本文改编自 Dify 官方文档中的《代码》和《HTTP 请求》节点说明[1][2],原文以 CC BY 4.0 许可证发布。

来源

  1. 1
    代码Dify docs (CC BY 4.0)
  2. 2
    HTTP 请求Dify docs (CC BY 4.0)

引用本页: Dify 代码节点与 HTTP 请求节点. TellWorld, https://www.tellworld.net/zh/practice/practice-dify-code-http-nodes. 更新于 2026-11-14

相关动态