Agentflow 3.0.0 노드 설명

1. Agentflow V2

V2는 Flowise 핵심 구성 요소로 기본적으로 개발된 세분화된 전문화된 독립형 노드 세트를 사용하여 전체 워크플로우를 설계합니다.

V2 아키텍처에서 각 노드는 독립적인 단위로 기능하며, 특정 설계 및 구성에 따라 개별 작업을 실행합니다.

캔버스에서 노드 간의 시각적 연결은 워크플로우의 경로와 제어 순서를 명확하게 정의하고, 현재 flow에서 이전에 실행된 노드의 출력을 참조하여 노드 간에 데이터를 전달할 수 있습니다.

Flow state는 워크플로우 전체에서 데이터를 관리하고 공유하기 위한 명확한 메커니즘을 제공합니다.

아래는 Flowise의 Agentflow V2 에서 제공하는 이용 예시입니다.

2. Agentflow 적용하기

2.2 워크플로우 편집

2.2.1 리비전 정보 설정

  • 리비전 정보 탭을 클릭합니다.

  • 도커 이미지인스턴스 타입, 복제본을 선택합니다. 이는 워크플로우가 실행될 환경을 결정합니다. (리비전 정보 탭에서 도커 이미지와 인스턴스 타입을 선택할 수 있습니다. 이 설정은 워크플로우의 실행 환경을 정의합니다.)

    • 도커 이미지 : llmops-workflow-api:latest

    • 인스턴스 타입: micro (0.2 CPU Core, 500 Mb Memory)

    • 복제본: 1

2.2.2 Flow 생성

  • Flowise Step 추가 버튼을 클릭합니다.

  • 드롭박스 중에서 Agentflow 3.0.0을 클릭합니다.

Flowise 창에서 세부 설정을 조정합니다.

  • 각 노드와 Flow State에 대한 설명은 여기서 확인할 수 있습니다.

  • (참고) 현재 Retriever 노드는 사용할 수 없음

좌측 상단의 ‘+’ 버튼을 눌러 원하는 노드를 찾거나 검색하여 flow 위로 드래그해줍니다.

원하는 플로우에 따라 노드를 연결해줍니다.

  • 시작 노드에 마우스 hover시 나타나는 ‘>’ 버튼을 끌어 도착 노드에 이어줍니다.

2.3 기본 노드

2.3.1 Start 노드

진입점 역할을 하는 노드입니다.

모든 워크플로우 실행은 반드시 이 노드에서 시작되며, 워크플로우 초기 조건 및 환경 설정을 담당합니다.

  • 각 기능을 알맞게 설정해줍니다.

  • Input Type : 워크플로우 실행 방식을 결정하는 설정입니다. 대부분의 경우 Chat Input으로 지정해줍니다.

    • Chat Input : 사용자가 채팅 인터페이스를 통해 직접 메시지를 입력하여 워크플로우를 시작합니다.

    • Form Input : 사용자 정의 폼(form)을 통한 구조화된 데이터를 입력하여 워크플로우를 시작합니다

  • Ephemeral Memory : 멀티턴의 경우 비활성화 해줍니다.

    • 비활성화 상태 : 이전 대화 내역을 유지하며 연속적인 대화 컨텍스트 보장

    • 활성화 시 : 매번 새로운 세션으로 시작하여 이전 대화 기록 무시

  • Flow State :

    • 노드 간 데이터 공유 및 워크플로우 전역 변수를 관리하는 key-value 저장소입니다.

    • 예시) {{$flow.state.current_date}} 와 같이 날짜 및 시각을 지속적으로 업데이트 하는 등의 처리를 할 수 있습니다.

2.3.2 Agent 노드

LLM을 기반으로 자율적으로 추론, 계획, 도구 사용을 수행할 수 있는 자율 AI 엔티티입니다.

사용자의 목표에 따라 동적으로 Tools 사용, Document Stores 검색, 다단계 추론을 통해 복잡한 작업을 수행합니다.

단순한 LLM 호출과 달리 상황에 맞는 도구 선택과 액션 시퀀스를 스스로 결정합니다.

Agent Node는 크게 8개의 영역으로 구분됩니다.

  1. Model : FlowiseAI 내에서 정의된 모델 래퍼(Model Wrapper) 또는 모델 인터페이스입니다.

  2. Messages : AI 에이전트에게 보내는 메세지입니다.

  3. Tools : MCP, API 등을 적용할 수 있습니다.

  4. Knowledge (Document Stores) : 문서 저장소에 접근하여 정보를 검색할 수 있습니다. 현재는 사용할 수 없습니다

  5. Knowledge (Vector Embeddings) : 벡터 데이터베이스를 통해 의미적 유사성 기반으로 관련 문서를 검색할 수 있습니다.

  6. Memory : 에이전트가 이전 대화 기록을 기억하고 활용할지 결정하는 설정입니다.

  7. Return Response As : 에이전트의 응답이 메모리 시스템에 어떻게 기록될지 결정합니다.

  8. Update Flow State : 현재 노드의 실행 결과를 Flow State에 저장/업데이트하여 다른 노드에서 활용 가능합니다.

아래는 각 영역별 세부 기능입니다.

  • Model

    GenOS에서 서빙하는 모델을 선택할 시에는 ChatMnc 모델을 사용합니다.

    • Serving : 실제로 추론을 수행하는 AI 모델입니다. 이 모델은 워크플로우에서 텍스트 생성에 사용됩니다.

    • Max Tokens : 모델이 생성할 수 있는 최대 토큰 수 제한입니다.

      • -1 : 모델이 제공하는 최대 길이(max len)만큼 생성

    • Temperature : 응답의 창의성과 무작위성을 제어하는 매개변수입니다.

      • 범위: 0.0 (매우 결정론적(같은 질문에 항상 같은 답)) ~ 1.0 (매우 창의적)

    • Streaming : 모델 응답을 실시간으로 스트리밍합니다.

  • Messages

    • System : AI 에이전트의 기본 동작 방식과 성격을 정의하는 역할

      • 에이전트가 어떻게 행동해야 하는지에 대한 지침을 제공하는 곳입니다. 전체 대화의 톤과 스타일을 결정합니다.

      • 위 사진의 예시가 System Message 입니다.

    • Assistant : AI 에이전트의 응답을 나타내는 역할

      • 이전 대화에서 AI가 한 말을 참조할 때 사용합니다. 대화 맥락 유지를 위한 역할입니다.

    • Developer : 개발자가 시스템에 전달하는 특별한 지시사항 역할

      • 디버깅이나 특수한 개발 목적의 메시지. 일반적인 사용자 대화와 구분되는 개발자 전용 지시입니다.

    • User : 실제 사용자의 입력을 나타내는 역할

      • 사용자가 에이전트에게 보내는 질문이나 요청입니다. 대화의 시작점이 되는 역할을 합니다

    {{ variable }} 문법으로 동적 데이터 삽입이 가능합니다.

    여러 개의 Messages 사용 시 ‘+ Add Messages’ 버튼을 통해 동일한 방식으로 추가할 수 있습니다.

  • Tools

    • 원하는 도구를 선택한 후, 각 도구에서 필요한 parameter를 설정해줍니다.

    여러 개의 Tool 사용 시 ‘+ Add Tools’ 버튼을 통해 동일한 방식으로 추가할 수 있습니다.

  • Knowledge (Document Stores) : 현재 사용할 수 없습니다

  • Knowledge (Vector Embeddings)

    주의) 사용할 벡터 DB 생성과 문서 적재가 된 상태여야 RAG 워크플로우가 정상동작합니다. 방법은 벡터 DB문서 적재 튜토리얼을 참고해주세요.

    • Vector Store : 벡터화된 문서들을 저장하고 검색하는 벡터 데이터베이스입니다. 의미적 유사성 기반으로 관련 문서를 빠르게 검색합니다. 대부분의 경우 DeepSearfing을 이용합니다.

      • Parameters

        • Weaviate Host : 벡터 검색을 수행할 실제 서버 위치입니다. 적재한 벡터DB에서 검색하여 사용할 수 있습니다.

        • Weaviate Metadata Keys : 문서와 함께 저장되는 메타데이터 필드들입니다.

    • Embedding Model : 텍스트를 벡터로 변환하는 임베딩 모델입니다. 문서와 질의를 동일한 벡터 공간에 매핑하여 유사도 계산을 통해 추론합니다.

    • Knowledge Name : 이 Knowledge source를 식별하는 사용자 정의 이름입니다.

    • Describe Knowledge : 에이전트가 언제 이 지식 소스를 활용해야 하는지 결정하는 가이드입니다. 사용자 질문과 관련된 문서 정보가 저장된 데이터베이스임을 명시합니다.

    • Return Source Documents : 검색 결과와 함께 원본 문서의 출처 정보도 함께 반환합니다.

    여러 개의 벡터DB 사용 시 ‘+ Add Knowledge (Vector Embeddings)’ 버튼을 통해 동일한 방식으로 연결할 수 있습니다.

  • Enable Memory

    활성화 시 대화 맥락을 유지하여 연속적인 대화가 가능하며, Memory Type과 Input Message를 설정할 수 있습니다.

    • Memory Type : 대화 기록을 관리하는 방식을 결정하는 핵심 설정입니다.

      • All Messages : 대화 시작부터 현재까지의 모든 메시지를 보존합니다. 전체 대화 맥락을 완전히 유지하지만 토큰 사용량이 많습니다.

      • Window Size : 최근 N개의 메시지만 유지하는 슬라이딩 윈도우 방식입니다.

      • Conversation Summary : 전체 대화를 요약하여 압축된 형태로 보존합니다.

      • Conversation Summary Buffer : Max Token Limit으로 설정한 토큰 한계 도달 시 자동으로 대화 요약을 생성해 보존합니다.

    • Input Message : 에이전트가 처리하기 전에, 대화의 맨 끝에 사용자 메시지로 추가할 내용을 지정합니다. 워크플로우에서 동적으로 생성된 사용자 입력을 주입할 때 사용합니다.

      • 기존 대화 기록(메모리) + Input Message → 에이전트로 전달

  • Return Response As

    • User Message : 에이전트 응답을 사용자가 한 말로 기록합니다. 특수한 워크플로우에서 역할 전환이 필요한 경우 사용합니다.

    • Assistant Message : 에이전트 응답을 AI 어시스턴트가 한 말로 기록합니다. 일반적인 대화형 AI 시스템에서 사용하는 표준 설정입니다.

  • Update Flow State

    • Key : Flow State에서 업데이트할 키(변수명)를 지정합니다.

      • Start 노드에서 미리 정의된 키만 사용 가능하며, 새로운 키의 생성은 불가능합니다.

    • Value : 해당 키에 저장할 값을 설정합니다. ‘{{’ 을 입력하면, 사용 가능한 모든 변수 목록이 자동으로 표시됩니다.

      • flow state: {{ $flow.state.keyName }} - 기존 Flow State의 특정 키 값

      • 현재 노드 출력: {{ output }} - 현재 노드의 실행 결과

      • 정적 텍스트: 직접 입력한 고정 값

      • 이전 노드 출력: {{ previousNode.output }} - 이전 노드의 결과

      • Chat Context: {{ question }}, {{ chat_history }} 등 대화 관련 변수

2.4 그 외 자주 사용되는 노드

2.4.1 LLM Node

구성된 Large Language Model(LLM)에 직접 접근하여 AI 작업을 수행하는 노드입니다.

Agent 노드와 달리 도구 사용이나 자율적 추론 없이 순수한 텍스트 생성에 특화되어 있습니다.

JSON Structured Output을 제외한 기능들은 Agent Node*(Agent Node 설명 블록 링크 삽입)*와 동일합니다

  • Model : 사용할 AI 모델을 선택합니다. FlowiseAI 내에서 정의된 모델 래퍼 또는 인터페이스입니다.

  • Messages : LLM에게 전달할 대화 맥락을 정의합니다.

    • System, User, Assistant, Developer 역할을 통해 구조화된 프롬프트 구성

    • {{ variable }} 문법으로 동적 데이터 삽입 가능

  • Enable Memory : 대화 기록 사용 여부를 결정합니다.

    • 활성화 시 : 이전 대화 맥락을 고려한 응답 생성

    • 비활성화 시 : 현재 입력만으로 독립적인 응답 생성

  • Memory Type : Enable Memory 활성화 시 대화 기록 관리 방식을 설정합니다.

    • All Messages : 전체 대화 기록 유지

    • Window Size : 최근 N개 메시지만 유지

    • Conversation Summary : 대화 전체를 요약하여 보존

  • Input Message : 대화 끝에 추가할 사용자 메시지를 지정합니다.

    • 워크플로우에서 동적으로 생성된 입력을 주입할 때 사용

  • Return Response As : LLM 응답이 메모리에 기록되는 방식을 결정합니다.

    • User Message : 사용자 발언으로 기록

    • Assistant Message : AI 어시스턴트 응답으로 기록 (일반적)

  • JSON Structured Output : LLM이 구조화된 JSON 형태로 응답하도록 강제합니다.

    • 특정 스키마에 따른 예측 가능한 데이터 형식 출력

    • 후속 처리나 API 연동에 유용

  • Update Flow State : 노드 실행 결과를 워크플로우 전역 상태에 저장합니다.

    • Key-Value 형태로 다른 노드에서 활용 가능한 데이터 저장

    • 예시) Key: llm_response, Value: {{ output }}

    주의) Key는 반드시 Start Node에서 정의되어야 합니다.

2.4.2 Condition Node

정의된 규칙에 따라 워크플로우의 분기를 결정하는 노드입니다.

입력 값들을 논리적 연산자로 비교하여 true/false 결과에 따라 다른 경로로 워크플로우를 진행합니다.

  • 각 기능을 알맞게 설정해줍니다.

  • Conditions : 평가할 논리적 규칙을 정의합니다.

    • Type : 비교할 데이터 유형 선택 (String, Number, Boolean)

    • Value 1 : 비교의 첫 번째 값, {{ variable }} 문법으로 동적 데이터 사용 가능

    • Operation : 논리 연산자 선택 (Equal, NotEqual, Contains, Larger, isEmpty 등)

    • Value 2 : 비교의 두 번째 값, 연산자에 따라 필요시 입력. 정적 텍스트 또는 동적 변수 사용 가능

  • Add Conditions : 여러 조건을 추가하여 복합적인 논리 평가 구성

    • 여러 조건 간의 AND/OR 로직 적용

  • 출력 분기 : 조건 평가 결과에 따라 True/False 출력 앵커로 워크플로우 진행

2.4.3 Custom Function Node

사용자 정의 JavaScript 함수를 실행하는 노드입니다.

기존 노드로 구현하기 어려운 복잡한 데이터 변환이나 로직을 직접 코딩할 수 있습니다.

  • Input Variables : JavaScript 함수로 전달할 변수들을 정의합니다.

    • Variable Name : 함수 내에서 사용할 변수명 ($variableName 형태로 접근)

    • Variable Value : 실제 데이터 값, {{ previousNode.output }} 등 동적 값 사용 가능

    • Add Input Variables : 여러 변수를 추가하여 복잡한 데이터 처리

  • Javascript Function : 실행할 Node.js 환경의 JavaScript 코드를 작성합니다.

    • $flow.sessionId, $flow.chatId, $flow.state 등 내장 변수 접근 가능

    • $vars.<variable-name> 형태로 커스텀 변수 사용

    • 반드시 문자열(string) 값을 반환해야 함

    • See Example : 코드 작성 예시 확인 가능

  • Update Flow State : 함수 실행 결과를 워크플로우 state에 저장합니다. 기존 값을 업데이트 할 수 있습니다.

    • 처리된 데이터를 다른 노드에서 활용할 수 있도록 저장

2.4.4 Tool Node

사전 정의된 특정 도구(Tool)를 결정론적으로 실행하는 노드입니다.

Agent 노드와 달리 LLM의 추론 없이 지정된 도구를 바로 실행하여 예측 가능한 결과를 얻습니다.

  • Tool : 실행할 FlowiseAI 등록 도구를 선택합니다.

    • Genos MCP : MCP(Model Context Protocol) 기반 도구

    • 드롭다운에서 사용 가능한 도구 목록 확인 및 선택

  • Tool Parameters : 선택한 도구의 세부 설정을 구성합니다.

    • Genos MCP Server : MCP 서버 종류 선택 (예: Crawling Server)

    • 사용가능한 도구 : 해당 서버에서 제공하는 구체적인 기능 선택 (예: Crawling - OPEN_URL)

    • 도구별로 고유한 매개변수 설정 인터페이스 제공

  • Tool Input Arguments : 도구 실행에 필요한 입력 인수를 매핑합니다.

    • 선택한 도구가 요구하는 매개변수에 대응하는 값 설정

    • {{ previousNode.output }}, {{ $flow.state.key }} 등 동적 데이터 사용

    • Add Tool Input Arguments : 여러 인수가 필요한 경우 추가 설정

  • Update Flow State : 도구 실행 결과를 워크플로우 state에 저장합니다. 기존 값을 업데이트 할 수 있습니다.

    • 도구의 출력을 다른 노드에서 재사용할 수 있도록 저장

2.5 Flow State

Flow State ($flow.state)는 AgentFlow V2에서 노드 간 데이터 공유를 위한 런타임 키-값 저장소입니다. 단일 워크플로우 실행 동안에만 존재하는 임시 메모리로, 복잡한 워크플로우에서 데이터 흐름을 효율적으로 관리할 수 있게 해줍니다.

⚠️주의⚠️ 워크플로우 전체에서 사용될 모든 State 키는 Start 노드의 Flow State 매개변수를 사용하여 기본값(빈 값이라도)으로 초기화되어야 합니다.

2.5.1 런타임 키-값 저장소

  • 워크플로우 실행 중에만 존재하는 임시 저장공간

  • Key-Value 쌍으로 데이터 저장 및 관리

  • 모든 노드에서 읽기/쓰기 접근 가능

2.5.2 단일 실행 범위

  • 워크플로우 실행마다 독립적인 Flow State 생성

  • 실행 종료 시 자동으로 소멸

  • 다른 사용자나 세션과 격리

2.5.3 명시적 데이터 공유

  • 직접 연결되지 않은 노드 간 데이터 전달

  • 브랜치 분기/합류 시 데이터 보존

  • 복잡한 워크플로우의 상태 관리

2.5.4 사용 방법 및 예시

아래는 현재 날짜 및 시각을 전달해주는 current_date 라는 flow state 선언 및 사용 예시입니다.

  • 키 선언 (Start 노드)

    먼저, Start 노드에서 Flow State를 선언해줍니다.

    • Key : current_date

    • Value : None

  • 상태 업데이트 (각 노드)

    현재 시간을 불러와야 하기 때문에, Tool 노드를 이용해줍니다.

    • Tool

      • 현재 시간을 가지고 올 수 있는 CurrentDateTime을 선택합니다. (이 도구는 별도의 파라미터 설정이 필요하지 않습니다)

    • Tool Input Arguments

      • CurrentDateTime은 파라미터를 받지 않는 도구입니다. 실행 시점의 현재 시간을 자동으로 반환합니다.

    • Update Flow State

      • Start 노드에서 선언해준 current_date 의 값을, 현재 노드(Get datetime이라는 이름의 Tool 노드)의 결과값으로 받습니다. 동적 변수인 {{ output }} 을 Value에 작성합니다.

      (참고) {{ output }} 변수는 현재 노드의 결과값을 받는 변수입니다.

    아래는 해당 Tool 을 사용한 output입니다.

    이제 다른 노드에서 {{ $flow.state.current_date }} 문법을 사용하여 현재 날짜와 시간 정보에 접근할 수 있습니다.

  • 상태 읽기 (모든 노드)

    Custom Function을 이용하여 Tool Node에서 저장된 JSON 형태의 시간을 가공합니다.

    • Input Variables

      • Variable Name: current_date

      • Variable Value: {{ $flow.state.current_date }} ← Flow State에서 데이터 읽기

    • Javascript Function: JSON 파싱하여 원하는 형식으로 변환합니다.

    • Update Flow State: 가공된 결과를 다시 저장합니다.

    아래는 해당 Custom Function Node의 output입니다.

Last updated

Was this helpful?