第 9 期:代码节点 — 在 Workflow 中执行 Python/JS

Updated on 4/6/2026

[Translation Pending]\n\n## Code 节点概述

Code 节点是 Dify Workflow 中最灵活的瑞士军刀,支持在安全沙盒中执行 Python 3 或 JavaScript 代码。

graph LR
    Input["上游节点输出
(变量绑定)"] --> Code["Code 节点
(沙盒执行)"] Code --> Output["结构化输出
(dict/object)"]

Python 代码节点

基本模板

def main(arg1: str, arg2: int) -> dict:
    """
    参数: 从上游节点绑定的变量
    返回: 必须是 dict,key 作为输出变量名
    """
    result = arg1.upper() + str(arg2)
    return {
        "output_text": result,
        "length": len(result)
    }

实例:JSON 数据清洗

import json
import re

def main(raw_llm_output: str) -> dict:
    """从 LLM 的混杂输出中提取 JSON"""
    # LLM 可能输出 ```json ... ``` 包裹的内容
    json_match = re.search(r'```json\s*(.*?)\s*```', raw_llm_output, re.DOTALL)
    
    if json_match:
        clean_json = json_match.group(1)
    else:
        clean_json = raw_llm_output
    
    try:
        data = json.loads(clean_json)
        return {
            "parsed_data": data,
            "success": True,
            "error": ""
        }
    except json.JSONDecodeError as e:
        return {
            "parsed_data": {},
            "success": False,
            "error": str(e)
        }

实例:数据统计与排序

def main(items: list) -> dict:
    """对评分数据进行统计分析"""
    if not items:
        return {"avg": 0, "max_item": None, "sorted_items": []}
    
    scores = [item["score"] for item in items]
    avg_score = sum(scores) / len(scores)
    max_item = max(items, key=lambda x: x["score"])
    sorted_items = sorted(items, key=lambda x: x["score"], reverse=True)
    
    return {
        "average_score": round(avg_score, 2),
        "max_item": max_item,
        "top_3": sorted_items[:3],
        "total_count": len(items)
    }

JavaScript 代码节点

function main(userInput, threshold) {
    // 参数类型自动推断
    const words = userInput.split(/\s+/);
    const wordCount = words.length;
    
    return {
        word_count: wordCount,
        exceeds_limit: wordCount > threshold,
        truncated: wordCount > threshold 
            ? words.slice(0, threshold).join(' ') + '...'
            : userInput
    };
}

可用标准库

Python JavaScript
json JSON (内置)
re 正则 (内置)
math Math (内置)
datetime Date (内置)
hashlib
base64 btoa/atob
urllib.parse URL (内置)

安全限制:不支持 import osimport subprocess、网络请求等系统操作。如需调用外部服务,请使用 HTTP Request 节点。

错误处理策略

graph TB
    Code[Code 节点执行] --> Check{执行结果}
    Check -->|成功| Next[下游节点]
    Check -->|异常| Error[错误处理]
    Error --> Retry[可配置重试]
    Error --> Default[使用默认值]
    Error --> Abort[终止工作流]
def main(data: str) -> dict:
    try:
        result = process_data(data)
        return {"status": "success", "data": result}
    except ValueError as e:
        # 返回错误信息而不是抛出异常
        return {"status": "error", "data": None, "error": str(e)}