에이전트플로우 멀티턴 채팅하기
1. 서론
한계 Flowsie 상에서 제공하는
Buffer Window MemoryConversation HistoryEnable Memory등을 활용하면 기본적으로 멀티턴 기능이 작동합니다. 하지만, 위와 같은 기능을 사용하게 되었을 때 오래된 채팅 내역일 수록 중복되어 기록되어 불필요한 토큰을 소모하게 하고 최종 LLM 출력에도 노이즈로 작용하여 성능을 저하시킵니다. 위와 같은 문제 외에도, 배포된 채팅 애플리케이션에서 업로드한 파일이 Chat History 안에 남지 않아 어느 턴에 무슨 파일을 업로드 했는지에 관한 정보를 알 수 없어 기존 기능에서는 한계가 존재합니다. \해결 따라서 본 심화 워크플로우에서는 Flowise 내부 멀티턴 기능에 의존하지 않고, 자체적인 GenOS 상의 파이썬 워크플로우를 활용해 멀티턴에 사용할 채팅 내역을 커스텀하고 업로드된 파일 내역 또한 기록되는 대화 쌍 내에 포함시키는 작업을 진행하도록 하겠습니다.
2. 전체 구조

전체 구조는 크게 이하 두개 워크플로우로 나뉩니다.
Python 워크플로우: $genosUploaded 초기화, chat history 기록
Flowise 워크플로우: 채팅 전반의 흐름 구조 제어
자세한 사항은 후술하도록 하겠습니다.
3. 구현 방법
3.1 파이썬 워크플로우 생성
GenOS 메뉴 >> 에이전트 >> 워크플로우 >> 워크플로우 생성
이후 필요한 정보를 기입한 후 생성한 다음 아래와 같은 Python 코드를 작성하여 넣어준 뒤 저장하고 배포합니다.
배포가 완료 되었다면, 아래 절차를 통해
워크플로우 상세 >> 인증 키 탭 클릭 >> 인증키 생성
인증키를 생성하고, 생성된 인증키 및 해당 워크플로우의 ID를 기록해둡니다.
워크플로우의 ID의 경우 https://genos.genon.ai:3443/agent/workflow/detail/2491/에서 2491가 바로 해당 워크플로우의 ID 입니다.

\
3.2 Flowise 워크플로우 생성
새롭게 GenOS 메뉴 >> 에이전트 >> 워크플로우 >> 워크플로우 생성 을 통해 워크플로우를 생성한 뒤 리비전 상세에서 Flowise 단계 추가 를 눌러 Agentflow 3.0.0을 클릭합니다.
이후 사진 같은 Flowise 워크플로우를 작성합니다.

\
각 노드별로 아래 사항을 확인합니다.
Start

Flow state에
file_contentchat_history가 생성되어 있는지 여부Ephemeral Memory 토글 버튼이
off되어 있는지 여부 \
Custom Function: genosUploaded 초기화

Input Variables와Update Flow State가 올바르게 채워 졌는지 여부Javascript Function이 아래와 같은지 여부
\
Custom Function: chat history 읽기

Input Variables와Update Flow State가 올바르게 채워 졌는지 여부Javascript Function이 아래와 같은지 여부
\
LLM

Enable Memory가 꺼져있는지 여부Add Messages에서의 시스템 프롬프트가 아래와 같이 작성되어 있는지 여부
\
Custom Function: chat history 쓰기

Input Variables와Update Flow State가 올바르게 채워 졌는지 여부Javascript Function이 아래와 같은지 여부
\
위 단계를 모두 끝냈다면 워크플로우를 저장한 뒤 배포하고,
튜토리얼: 기본편의채팅 애플리케이션 만들기를 참고해 채팅을 배포한 뒤 사용합니다.
\
4. 마치며: 주의사항
위 구현 방법을 따라 재현하면 이제 Custom 하게 제작된 chat history를 통해 보다 효율적이게 멀티턴을 구현할 수 있습니다. 또한, 단순히 이전 채팅을 기록함을 넘어 업로드된 파일 내용 또한 chat history에 남기에 파일 기반으로 채팅을 진행하는 경우 보다 정확한 답변이 가능합니다.
다만, 현재 예시 워크플로우 내에서는 Custom Function: chat history 읽기 부분에서 최대 4턴을 기억하고 또한 그 4턴 이내에 15000자가 넘는 경우 다시 3턴, 그럼에도 15000자가 넘으면 2턴까지 chat history를 불러오도록 설정 되어 있으므로, 해당 부분은 사용자의 용도와 워크플로우에 사용된 LLM의 능력에 따라 맞춤설정이 필요합니다.
또한, 대화내역 자체를 chat_history 라는 state로 관리하고 있기에, 앞선 설명처럼 LLM Node Agent Node 등의 LLM을 활용하는 부분에서 Flowise 내부 자체적인 멀티턴 기능(Enable Memory)은 Off한 뒤 별도로 시스템 프롬프트에 chat_history라는 state를 입력하여 대화에 참조되도록 하여야 합니다.
Last updated
Was this helpful?