Code 노드 — 커스텀 데이터 처리
Code 노드 — 커스텀 데이터 처리
Code 노드는 워크플로 안에서 복잡한 데이터 변환, 계산, 로직을 처리하기 위해 커스텀 Python 또는 JavaScript를 실행합니다. 프리셋 노드만으로 충분하지 않은 특정 처리 요구가 있을 때 사용해요.
출처: 공식문서 — Code Node
설정
입력 변수(Input Variables) 를 정의해 워크플로의 다른 노드에서 데이터에 접근하고, 코드에서 그 변수를 참조합니다. 함수는 선언한 출력 변수(Output Variables) 를 담은 딕셔너리를 반환해야 합니다.
def main(input_variable: str) -> dict:
# Process the input
result = input_variable.upper()
return {
'output_variable': result
}
언어 지원
필요와 익숙함에 따라 Python과 JavaScript 중에서 고릅니다. 두 언어 모두 데이터 처리를 위한 공통 라이브러리를 갖춘 보안 샌드박스에서 실행됩니다.
Python — json, math, datetime, re 같은 표준 라이브러리를 포함합니다. 데이터 분석, 수학 연산, 텍스트 처리에 이상적이에요.
def main(data: list) -> dict:
import json
import math
average = sum(data) / len(data)
return {'result': math.ceil(average)}
JavaScript — 표준 내장 객체와 메서드를 제공합니다. JSON 조작과 문자열 연산에 유용합니다.
function main(data) {
const processed = data.map(item => item.toUpperCase());
return { result: processed };
}
오류 처리와 재시도
실패한 코드 실행에 대한 자동 재시도 동작을 구성하고, 코드가 오류를 만났을 때 폴백 전략을 정의합니다.
Retry Settings는 설정 가능한 간격(최대 5000ms)으로 최대 10번의 자동 재시도를 허용합니다. 일시적인 처리 문제를 다룰 때 켜 두세요.
Error Handling은 코드 실행이 실패할 때 폴백 경로를 정의해, 코드에 문제가 생겨도 워크플로가 계속 실행되게 합니다.
출력 제한
출력이 다음 노드로 전달되기 전에 Dify는 그것이 너무 크지 않은지 검사합니다.
- 문자열: 최대 400,000자
- 숫자: 정수는 최대 19자리, 소수는 최대 20자리
- 객체와 배열: 최대 5단계 중첩
제한을 넘는 출력은 검사를 통과하지 못하므로, 큰 결과를 반환하기 전에 잘라내거나 나누어야 합니다.
보안 고려사항
코드는 파일 시스템 접근, 외부 네트워크 요청, 시스템 명령을 차단하는 격리된 샌드박스에서 실행됩니다. 샌드박스는 실행을 기반 인프라와 분리하면서도, 커스텀 코드를 작성할 수 있는 유연성을 제공합니다.
이 격리 때문에 샌드박스 밖으로 나가는 연산은 자동으로 차단됩니다. 시스템 파일을 읽거나, 네트워크 연결을 열거나, 셸 명령을 실행하는 것을 피하고, 대신 샌드박스 안에서 사용 가능한 입력 변수와 라이브러리로 로직을 재구성하세요.
의존성 지원
Code 노드는 Python과 JavaScript 모두 외부 의존성을 지원합니다.
# 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: Import lodash, moment, etc.
const _ = require('lodash');
function main(data) {
return { unique: _.uniq(data) };
}
표준 패키지 세트가 샌드박스 환경에 사전 설치되어 있습니다. 그 세트 밖의 import는 실행 시 실패합니다.