Dify 워크플로우의 변수 집계 및 변수 할당 노드
변수 집계
정의
여러 브랜치의 변수를 단일 변수로 집계하여 다운스트림 노드를 균일하게 구성할 수 있습니다.
변수 집계 노드(이전의 변수 할당 노드)는 워크플로우에서 여러 분기의 출력을 통합하여 실행되는 분기에 관계없이 단일 통합 변수를 통해 결과를 참조하고 액세스할 수 있도록 하는 핵심 노드입니다. 이는 여러 브랜치에서 동일한 역할을 하는 변수를 하나의 출력 변수에 매핑하여 다운스트림 노드에서 중복 정의를 피할 수 있는 여러 브랜치의 경우에 매우 유용합니다.
take
변수 집계는 문제 분류 또는 조건부 분기 등의 여러 출력을 단일 출력으로 집계하여 프로세스의 다운스트림 노드에서 사용하고 조작할 수 있도록 함으로써 데이터 흐름 관리를 간소화합니다.
문제 분류 후 다중 집계
변수 집계를 추가하지 않으면 서로 다른 지식 기반에서 검색된 후 분류 1 및 분류 2 브랜치에 대해 다운스트림 LLM 및 직접 응답 노드를 반복적으로 정의해야 합니다.
- 문제 분류(변수가 없는 집계)
변수 집계를 추가하면 두 개의 지식 검색 노드의 출력을 하나의 변수로 집계할 수 있습니다.
- 문제 분류 후 다중 집계
IF/ELSE 조건 분기 후 다중 집계
- 문제 분류 후 다중 집계
서식 지정 요구 사항
변수 집계기는 문자열을 포함한 여러 데이터 유형의 집계를 지원합니다(String
), 숫자(Number
), 문서(File
) 객체 (Object
) 및 배열(Array
)
변수 집계기는 동일한 데이터 유형의 변수만 집계할 수 있습니다. 변수 집계 노드에 추가할 첫 번째 변수의 데이터 형식이 변수 데이터 형식인 경우 변수 집계 노드에 추가된 첫 번째 변수의 데이터 형식이 다음과 같은 경우 String
목록에 변수를 추가하려면 오른쪽의 '추가' 버튼을 클릭하여 목록에 추가할 수 있습니다. String
유형.
집계 그룹화
집계 그룹화가 켜져 있으면 변수 집계기가 여러 변수 그룹을 집계할 수 있으며, 각 그룹 내에서 집계에 필요한 데이터 유형은 동일합니다.
변수 할당
정의
변수 할당 노드는 쓰기 가능한 변수에 변수를 할당하는 데 사용되며, 다음과 같은 쓰기 가능한 변수가 지원됩니다:
사용법: 변수 할당 노드를 사용하면 워크플로 내의 변수를 임시 저장을 위해 세션 변수에 할당하고 이후 대화 상자에서 계속 참조할 수 있습니다.

샘플 시나리오
대화 프로세스를 설정할 수 있습니다.컨텍스트, 대화 상자에 업로드된 파일, 사용자가 입력한 환경설정등은 변수 할당 노드를 통해 세션 변수에 기록되어 이후 대화에서 참조 정보로 사용됩니다.
장면 1
대화에서 정보 추출 및 저장을 자동으로 결정합니다. LLM은 세션 변수의 배열을 통해 세션 내에서 사용자가 입력한 중요한 정보를 기록하고, 세션 변수에 저장된 기록 정보를 기반으로 후속 대화에서 응답을 개인화할 수 있습니다.
예: 대화를 시작한 후 LLM은 사용자 입력에 기억해야 할 사실, 선호 사항 또는 기록이 포함되어 있는지 자동으로 판단합니다. 기억해야 할 정보가 포함되어 있는 경우 LLM은 이 정보를 추출하여 저장한 후 답변의 컨텍스트로 사용합니다. 저장할 새로운 정보가 없는 경우 LLM은 자체적으로 보유하고 있는 관련 메모리 지식을 사용하여 질문에 직접 답변합니다.

구성 프로세스:
- 세션 변수 설정 먼저 세션 변수 배열을 설정합니다.
memories
배열[객체] 유형의 데이터는 사용자의 사실, 선호도 및 기록을 저장하는 데 사용됩니다. - 판단적 기억과 추출적 기억 ::
- LLM을 사용하여 사용자 입력에 기억해야 할 새로운 정보가 포함되어 있는지 판단하는 조건부 판단 노드를 추가합니다.
- 새로운 정보가 있는 경우 브랜치 위로 이동하여 LLM 노드를 사용하여 해당 정보를 추출합니다.
- 새로운 정보가 없으면 해당 지점으로 내려가 기존 메모리를 사용하여 직접 답변하세요.
- 변수 할당/쓰기 ::
- 상위 브랜치에서, 추출된 새로운 정보는 변수 할당 노드를 사용하여
memories
를 배열에 추가합니다. - 이스케이프 함수를 사용하여 LLM에서 출력된 텍스트 문자열을 array[object]에 저장하기에 적합한 형식으로 변환합니다.
- 상위 브랜치에서, 추출된 새로운 정보는 변수 할당 노드를 사용하여
- 변수 읽기 및 사용 ::
- 후속 LLM 노드에서는
memories
배열의 내용은 문자열로 변환되어 LLM의 프롬프트에 컨텍스트로 삽입됩니다. - LLM은 이 기록 정보를 사용하여 개인화된 응답을 생성합니다.
- 후속 LLM 노드에서는
그림의 코드 노드 코드는 다음과 같습니다:
- 문자열을 개체로 이스케이프
복사
import json
defmain(arg1:str) ->object:
try:
# Parse the input JSON string
input_data = json.loads(arg1)
# Extract the memory object
memory = input_data.get("memory", {})
# Construct the return object
result ={
"facts": memory.get("facts", []),
"preferences": memory.get("preferences", []),
"memories": memory.get("memories", [])
}
return{
"mem": result
}
except json.JSONDecodeError:
return{
"result":"Error: Invalid JSON string"
}
exceptExceptionas e:
return{
"result":f"Error: {str(e)}"
}
- 객체를 문자열로 이스케이프
복사
import json
defmain(arg1:list) ->str:
try:
# Assume arg1[0] is the dictionary we need to process
context = arg1[0]if arg1 else{}
# Construct the memory object
memory ={"memory": context}
# Convert the object to a JSON string
json_str = json.dumps(memory, ensure_ascii=False, indent=2)
# Wrap the JSON string in <answer> tags
result =f"<answer>{json_str}</answer>"
return{
"result": result
}
exceptExceptionas e:
return{
"result":f"<answer>Error: {str(e)}</answer>"
}
장면 2
사용자의 초기 기본 설정 정보 기록 를 사용하면 세션 내에서 사용자가 입력한 언어 기본 설정을 기억하고 이후 대화에서 해당 언어 유형으로 일관되게 응답합니다.
예: 사용자가 대화를 시작하기 전에 language
입력 상자에 "중국어"를 지정하면 해당 언어가 세션 변수에 기록되며, 다음 대화에서 응답할 때 LLM이 세션 변수에 있는 정보를 참조하여 다음 대화에서 "중국어"로 계속 응답합니다.

구성 프로세스:
세션 변수 설정 먼저 세션 변수를 설정합니다. language
를 사용하여 세션 흐름의 시작 부분에 조건부 판단 노드를 추가하여 language
변수 값이 null인지 여부입니다.
변수 쓰기/할당 첫 번째 대화를 시작할 때 다음과 같은 경우 language
변수 값이 null인 경우 LLM 노드를 사용하여 사용자가 입력한 언어를 추출한 다음 변수 할당 노드를 사용하여 언어 유형을 세션 변수에 기록합니다. language
가운데.
가변 읽기 이후 대화의 라운드에서 language
변수에 이미 사용자의 언어 기본 설정이 저장되어 있습니다. 이후 대화에서 LLM 노드는 언어 변수를 참조하여 사용자가 선호하는 언어 유형으로 응답합니다.
장면 3
보조 체크리스트 확인 체크리스트는 세션 변수를 통해 세션 내에서 사용자 입력을 기록하고, 체크리스트의 내용을 업데이트하고, 후속 대화에서 누락된 항목이 있는지 확인하는 데 사용할 수 있는 변수 집합입니다.
예: 대화 시작 후 대화 상자에 체크리스트의 항목을 입력하라는 메시지가 표시되고, 사용자가 체크리스트의 항목을 언급하면 업데이트되어 세션 변수에 저장됩니다. lLM은 대화가 진행될 때마다 누락된 항목을 계속 추가하도록 사용자에게 알려줍니다.

구성 프로세스:
- 세션 변수 설정하기: 먼저 세션 변수를 설정합니다.
ai_checklist
를 사용하면 변수가 LLM 내에서 검사할 컨텍스트로 참조됩니다. - 변수 할당/쓰기: 각 대화 라운드에서 LLM 노드 내에서 다음을 확인합니다.
ai_checklist
를 사용하여 사용자 입력과 비교하고, 사용자가 새로운 정보를 제공하면 체크리스트를 업데이트하고 출력을ai_checklist
내부. - 변수 읽기: 각 대화는 다음과 같습니다.
ai_cheklist
값과 모든 체크리스트가 완료될 때까지 사용자 입력을 비교합니다.
변수를 사용하여 노드 할당하기
노드 오른쪽을 클릭합니다. +
아니요, 선택 "변수 할당" 노드에서 소스 변수와 함께 할당해야 하는 변수를 구성합니다. 변수 할당 노드는 여러 변수에 동시에 값을 할당할 수 있도록 지원합니다.

변수 설정
변수: 값을 할당해야 하는 변수를 선택합니다.
변수 설정하기: 할당할 변수를 선택합니다. 즉, 변환할 소스 변수를 지정합니다.
위 그림의 변수 할당 로직: 초기 페이지에서 사용자가 입력한 언어 기본 설정이 고려됩니다. Start/language
시스템 수준 세션 변수에 대한 변수 할당 language
내부.
변수의 쓰기 모드를 지정합니다.
대상 변수의 데이터 유형은 변수의 쓰기 모드에 영향을 줍니다. 다음은 서로 다른 변수 간의 쓰기 모드입니다:
- 대상 변수의 데이터 유형은
String
.
- 덮어쓰기 소스 변수를 대상 변수에 직접 덮어씁니다.
- clear 다음은 선택한 변수 목록입니다.
- 설정 값을 수동으로 지정하려는 경우 소스 변수를 설정할 필요가 없습니다.
- 대상 변수의 데이터 유형은
Number
.
- 덮어쓰기 소스 변수를 대상 변수에 직접 덮어씁니다.
- clear 다음은 선택한 변수 목록입니다.
- 설정 값을 수동으로 지정하려는 경우 소스 변수를 설정할 필요가 없습니다.
- 디지털 처리 대상 변수는
加减乘除
rig
- 대상 변수의 데이터 유형은
Object
.
- 덮어쓰기 소스 변수의 내용을 대상 변수에 직접 덮어씁니다.
- clear 다음은 선택한 변수 목록입니다.
- 설정 값을 수동으로 지정하려는 경우 소스 변수를 설정할 필요가 없습니다.
- 대상 변수의 데이터 유형은
Array
.
- 덮어쓰기 소스 변수의 내용을 대상 변수에 직접 덮어씁니다.
- clear 다음은 선택한 변수 목록입니다.
- 사후 추가 타이틀 를 클릭하고 대상의 배열 변수에 새 요소를 추가합니다.
- 확장 프로그램 대상의 배열 변수에 새 배열을 추가하려는 경우(즉, 한 번에 둘 이상의 요소를 추가하려는 경우) 그렇게 할 수 있습니다.
© 저작권 정책
기사 저작권 AI 공유 서클 모두 무단 복제하지 마세요.
관련 게시물
댓글 없음...