LLM 애플리케이션을 만들어봅시다! Langflow

LLM 애플리케이션을 만들어봅시다! Langflow

Low code LLM 프레임워크 Langflow

LLM 및 LLM Tool 춘추전국시대

LLM(대규모 언어 모델) 분야에서는 새로운 연구 결과와 소식이 폭발적으로 쏟아지고 있으며, 이에 발맞춰 관련된 다양한 툴과 플랫폼도 빠르게 등장하고 있습니다. OpenAI의 GPT 시리즈를 비롯해 Google의 Gemini, Anthropic의 Cluade 등의 모델이 있고 Meta의 LLaMA, Google의 Gemma와 같은 여러 오픈소스 모델들이 연이어 출시되며 선택지가 크게 늘어났습니다. 이러한 모델들은 단순한 텍스트 생성에서 나아가 질문 답변, 코드 생성, 번역, 요약 등 다양한 작업에 활용되며 여러 회사들에서 다방면으로 적용되고 연구되고 있습니다.

기업과 개발자들은 이와 같은 모델을 응용하여 자체적인 AI 서비스를 개발하거나 도메인 특화된 애플리케이션을 만들어내려는 시도를 하고있지만 LLM을 활용하는 과정은 여전히 복잡한 데이터 처리와 모델 최적화가 필요해 많은 시간이 소요되곤 합니다. 이러한 배경 속에서 사용성을 높이고 개발 속도를 가속화해주는 다양한 LLM 도구들 또한 주목을 받고 있습니다. 그 중 LLM을 다루는 복잡한 코드를 사용하기 꺼리는 사람들이 많아지며 Low-codeNo-code 플랫폼들이 인기를 끌고 있습니다. 특히 비개발자도 쉽게 접근할 수 있는 인터페이스를 제공하는 도구들이 생겨나면서, 더 많은 사람들이 LLM 생태계에 참여하게 되었고, 그만큼 활용 방법의 다양성도 증가하고 있습니다. Langflow는 이 흐름의 한가운데에 있는 대표적인 플랫폼으로, 복잡한 코딩 없이도 누구나 쉽게 LLM을 활용한 워크플로우를 설계할 수 있는 환경을 제공합니다.



Langflow란?

Langflow는 LangChain 라이브러리를 기반으로 한 시각적 LLM 워크플로우 설계 도구입니다. 이를 통해 개발자뿐만 아니라 비개발자도 손쉽게 LLM 애플리케이션을 설계하고 테스트할 수 있습니다. Langflow는 OpenAI, GCP, Anthropic 등 다양한 LLM 모델을 지원하며, Chroma, Weaviate, Pgvector 같은 Vector Store도 쉽게 통합할 수 있습니다.

Langflow의 가장 큰 장점은 다양한 LLM 컴포넌트를 드래그 앤 드롭 방식으로 연결해 복잡한 AI 워크플로우를 쉽게 구축할 수 있다는 점입니다. Chat Input, OpenAI, Prompt Template, OpenAI Embedding, PgVector 등 미리 구성된 컴포넌트를 사용해 챗봇을 빠르게 설계하고 바로 테스트할 수 있습니다. 또한 Python으로 대부분 구현되어 있어 컴포넌트를 직접 변형하거나 필요한 컴포넌트를 새로 만들어 추가할 수도 있습니다.

최근에는 Langfuse와의 통합으로 LLM 애플리케이션의 트레이싱이 가능해져 디버깅이 더 쉬워졌으며, 비용까지 추적할 수 있어 Observability가 강화되었습니다.



Langflow 시작하기

Langflow를 시작하는 것은 간단합니다. Langflow 홈페이지에서 로그인한 후 간단하게 클라우드에서 사용이 가능하고 로컬에서 Docker 또는 pip를 이용해 설치할 수도 있습니다.

pip를 통해 시작하기

1
2
python -m pip install langflow -U
python -m langflow run

Python >=3.10 필요

Docker를 통해 시작하기

1
docker run -it --rm -p 7860:7860 langflowai/langflow:latest

현재 글을 작성하는 시점의 최신 버전은 1.0.18입니다.



Langflow 활용하기

Langflow로 간단한 챗봇을 만든다고 한다면 어떻게 만들어야 할까요? 우리가 GPT에 질문하는 과정을 잠시 생각해보겠습니다. 우리는 GPT에 질문을 하고 질문과 함께 사용자 프롬프트를 전달합니다. GPT는 이에 대해 답을 생성하고 아웃풋을 채팅의 형태로 제공합니다. Langflow로 챗봇을 만드는 것은 이 과정에 대한 컴포넌트를 캔버스에 드래그 앤 드롭으로 놓고 흐름을 잇는 것입니다. 컴포넌트로는 먼저 물어보고 답을 받아야 하니 Chat Input과 Output이 필요할 것이고 질문은 LLM 모델에게 해야할 것입니다. 이에 대한 지시를 하기 위해서는 프롬프트 템플릿이 필요합니다. 따라서 전체 과정은 Chat Input - Prompt - LLM Model - Chat Output 으로 이루어집니다.

Langflow로 뚝딱 만들어봅시다.

위 그림처럼 챗봇을 쉽게 만들 수 있습니다. 시간이 얼마나 걸렸을까요? 1-2분이면 간단한 챗봇을 구현할 수 있습니다.

Langflow를 이용하면 단순한 챗봇뿐 아니라 RAG(Retrieval-Augmented Generation) 아키텍처를 쉽게 구성할 수 있습니다. 예를 들어 PDF 문서를 컨텍스트로 활용하는 RAG 워크플로우를 만들려면, 데이터를 Vector Store에 임베딩한 후, 이를 기반으로 질문에 답을 생성하는 과정을 추가하면 됩니다.

임베딩에 대한 자세한 설명은 생략하고 이 과정을 만들어보겠습니다.

Vector Store를 활용한 RAG

데이터를 Vector Store에 임베딩하고 저장하는 과정

먼저 pdf 데이터를 가져오고 이를 Chunking해야 합니다. 적절한 사이즈로 나눈 후에는 임베딩 모델을 이용해 Vectore Store에 저장을 하게 됩니다. Langflow에는 다양한 임베딩 모델과 Vectore Store가 준비되어 있기 때문에 원하는 컴포넌트를 사용할 수 있습니다. 위 그림에서 아래 그룹으로 이루어진 Flow가 바로 이 과정에 해당합니다. 여기서는 AstraDB를 Vector Store로 활용했고, Embedding Model로 OpenAI의 text-embedding-small 이 사용되었습니다.

데이터를 컨텍스트로 활용하기

그 다음으로는 임베딩 모델을 통해 질문이 pdf의 어떤 부분과 유사성이 있는지를 확인합니다. 여기에는 방금 사용했던 것과 동일한 임베딩 모델과 Vector Store가 사용됩니다. 이렇게 가져온 데이터는 Prompt에 들어가기 전에 Data에서 Text형태로 Input을 넣어주기 전에 한 번 가공을 해주게 되고 가공된 데이터는 프롬프트 템플릿으로 넘어갑니다. 작성된 프롬프트에 {question}{content}로 Input Variable 처리를 해줬기 때문에 데이터를 여기에 연결할 수 있고 템플릿된 데이터는 모델로 넘어가서 전달되며 이에 대한 결과가 Chat Output 형태로 전달이 됩니다.

한 가지 주요한 점은 각 컴포넌트에 출력 부분에 눈 표시가 있는데, 이걸 누르면 해당 컴포넌트에서 나가는 데이터가 어떤 형태로 되어있는지를 확인할 수 있습니다. 이 출력 값을 확인하면서 디버깅도 가능하고 형식의 변환이 필요하다면 직접 컴포넌트를 수정할 수도 있습니다. 물론 통합된 Langfuse를 활용한다면 디버깅 과정은 더 쉬워집니다.

눈 표시를 눌러보세요

이 글에서는 Simple RAG에 대한 내용까지만 다루지만 Advanced RAG 및 다양한 Agent도 지원하고 있어 간단한 Flow외에 더 복잡하고 Smart한 Flow도 작성이 가능한 점 참고하시면 좋겠습니다. 더 많은 Flow에 대한 자료는 https://www.langflow.store 여기를 참조하세요!



Langflow Helm Chart

Langflow에 대한 Helm Chart도 github에 있어 바로 사용할 수 있습니다. GitHub 리포지토리에는 chart 항목이 있고 이 안에는 langflow-ide, langflow-runtime 으로 나뉘어져 있습니다. 일반적으로 사용하는 드래그 앤 드롭으로 LLM 애플리케이션을 만드는 것은 langflow-ide 이고 이 Flow를 서빙용으로 만들 수 있는게 langflow-runtime입니다. langflow-ide는 frontend와 backend로 나누어져 있으며 frontend에서는 화면에 대한 구성을 담아놨고 backend에는 langflow의 코어 코드들과 컴포넌트들에 대한 내용으로 이루어져 있습니다. API 서빙용으로 만들어진 langflow-runtime은 Flow를 실행하여 API로 구성할 수 있는 항목으로, 간단하게 말하면 frontend에 대한 구성이 없고 backend로만 실행되는 형태입니다.

Helm Chart 레포 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.
├── langflow-ide
│   ├── Chart.yaml
│   ├── README.md
│   ├── charts
│   │   └── postgresql-15.5.11.tgz
│   ├── templates
│   │   ├── _helpers.tpl
│   │   ├── backend-statefulset.yaml
│   │   ├── frontend-deployment.yaml
│   │   ├── ingress.yaml
│   │   ├── service.yaml
│   │   └── serviceaccount.yaml
│   └── values.yaml
├── langflow-ide-0.0.1.tgz
└── langflow-runtime
├── Chart.yaml
├── README.md
├── templates
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   └── serviceaccount.yaml
└── values.yaml

(여담: 이 레포가 만들어지고 얼마지나지 않았을 때, 차트를 받아 띄워보려고 하니 제대로 실행되지 않았습니다. values에 문제가 있었고 이에 대한 내용을 PR로 올렸고 반영되었습니다.)



글을 마치며

Langflow는 최근 GitHub에서 3만 개 이상의 스타를 받으며 뜨거운 관심을 받고 있습니다. 이는 Langflow가 제공하는 간편함과 유연성 덕분에 많은 개발자들과 비개발자들이 LLM을 손쉽게 다룰 수 있게 되었기 때문입니다. 복잡한 코딩 없이도 LLM 기반 애플리케이션을 설계하고 테스트할 수 있다는 점은 많은 사람들에게 큰 매력으로 다가옵니다.

Langflow는 다양한 LLM 컴포넌트와 Vector Store의 통합을 통해 더욱 강력한 워크플로우를 구성할 수 있게 해주며, 개발자의 요구에 맞게 컴포넌트를 직접 수정하거나 추가할 수 있는 유연함을 제공합니다. 또한, Langfuse와의 통합을 통해 트레이싱과 디버깅, 비용 관리 등 애플리케이션 운영에 필수적인 요소들도 강화되었습니다.

더 나아가 Langflow에서는 Advanced RAG나 Agent에 대한 컴포넌트도 지원되며, 개발에 유용한 Python REPL 툴들도 지속적으로 업데이트되면서 상상한 것을 쉽게 구현할 수 있는 환경으로 Langflow는 더욱 성장하고 있습니다. 아직 한국에서는 다양하게 활용되고 있는 사례가 많지 않은데, 이 글을 통해 많은 분들이 사용해 보시고 Langflow에 조금씩 기여하면서 더욱 성장하는 LLM 개발 플랫폼이 되었으면 하는 바람입니다.

이제 LLM 애플리케이션 개발의 문턱이 한층 낮아졌습니다. Langflow를 통해 누구나 AI 기술을 활용한 혁신적인 서비스를 손쉽게 개발하고, 더 많은 사람들이 LLM의 가능성을 탐구할 수 있게 되기를 기대합니다.


Reference

LLM 애플리케이션을 만들어봅시다! Langflow

http://tkdguq05.github.io/2024/10/12/langflow/

Author

SangHyub Lee, Jose

Posted on

2024-10-12

Updated on

2024-10-13

Licensed under

Comments