Langflow - 비주얼 AI 에이전트 및 RAG 빌더 치트시트
Langflow는 LLM 애플리케이션을 위한 오픈 소스 Python 기반 비주얼 빌더입니다. 캔버스에 컴포넌트를 드래그하여 배선하고, 라이브 플레이그라운드에서 테스트한 후, 모든 흐름을 API 또는 MCP 끝점으로 노출합니다. 모델에 구애받지 않으며(OpenAI, Anthropic, Ollama를 통한 로컬 모델 등) LangChain 생태계를 기반으로 합니다.
설치
| 방법 | 명령어 |
|---|
| uv (권장) | uv pip install langflow |
| pip | pip install langflow |
| 설치 후 실행 | langflow run (또는 python -m langflow run) |
| uvx (설치 없음) | uvx langflow run |
| Docker | docker run -it --rm -p 7860:7860 langflowai/langflow:latest |
| 데스크톱 앱 | 공식 사이트에서 다운로드 (macOS/Windows) |
Python 3.10–3.13 필요. langflow run 후 http://localhost:7860을 엽니다.
서버 실행
| 명령어 | 설명 |
|---|
langflow run | 127.0.0.1:7860에서 UI + API 시작 |
langflow run --host 0.0.0.0 --port 7860 | 모든 인터페이스에 바인드 / 사용자 정의 포트 |
langflow run --env-file .env | 파일에서 환경 변수 로드 |
langflow run --dev | 개발자/핫 리로드 모드 |
langflow --help | 전체 CLI 참조 |
langflow api-key | 프로그래밍 방식 액세스용 API 키 생성 |
langflow migration | 데이터베이스 마이그레이션 실행 |
핵심 개념
| 용어 | 의미 |
|---|
| Flow | 연결된 컴포넌트 그래프 = 하나의 앱/파이프라인 |
| Component | 노드 (모델, 프롬프트, 리트리버, 도구, 에이전트, I/O) |
| Port / Edge | 컴포넌트 간 타입 지정 입력/출력 연결 |
| Playground | 내장 채팅/실행 패널로 흐름 인터랙티브 테스트 |
| Project | 여러 흐름을 그룹화하는 작업 공간 |
| Global Variables | 흐름 간 재사용 가능한 저장된 비밀 (API 키) |
구성 요소
| 카테고리 | 예시 |
|---|
| 입력/출력 | Chat Input, Chat Output, Text Input |
| 모델 | OpenAI, Anthropic, Google, Ollama, Groq, HuggingFace |
| 프롬프트 | Prompt template, system message |
| 데이터 / RAG | File loader, URL, Split Text, Vector Store (Chroma, Qdrant, Astra, pgvector), Embeddings |
| 에이전트 | 도구 호출이 있는 에이전트 컴포넌트 |
| 도구 | Web search, Python REPL, API request, MCP tools |
| 논리 | Conditional router, loop, pass-through |
일반적인 RAG 흐름
File / URL → Split Text → Embeddings → Vector Store (ingest)
Chat Input → Vector Store (search) → Prompt → Model → Chat Output
캔버스에 구축하고, Playground를 열고, 질문을 하면 Langflow가 엔드 투 엔드로 그래프를 실행합니다.
코드에서 흐름 사용
모든 흐름에는 자동 생성 API가 있습니다. UI에서 API(또는 Share → API access)를 클릭하여 스니펫을 복사합니다:
import requests
url = "http://localhost:7860/api/v1/run/<FLOW_ID>"
payload = {"input_value": "What is in my docs?", "output_type": "chat", "input_type": "chat"}
headers = {"x-api-key": "<YOUR_API_KEY>", "Content-Type": "application/json"}
resp = requests.post(url, json=payload, headers=headers)
print(resp.json())
# curl과 동일한 호출
curl -X POST "http://localhost:7860/api/v1/run/<FLOW_ID>" \
-H "x-api-key: <YOUR_API_KEY>" -H "Content-Type: application/json" \
-d '{"input_value":"hello","output_type":"chat","input_type":"chat"}'
MCP 통합
| 기능 | 방법 |
|---|
| 흐름을 MCP 도구로 노출 | 각 프로젝트는 MCP 서버를 제공하고, MCP 클라이언트(Claude Desktop, Cursor)를 가리킵니다 |
| 외부 MCP 도구 소비 | MCP Tools 컴포넌트를 추가하고 서버 URL/명령을 연결합니다 |
환경 및 설정
| 변수 | 용도 |
|---|
LANGFLOW_HOST / LANGFLOW_PORT | 바인드 주소 및 포트 |
LANGFLOW_DATABASE_URL | 기본 SQLite 대신 Postgres 사용 |
LANGFLOW_AUTO_LOGIN=false | 로그인 필요 (다중 사용자) |
LANGFLOW_SUPERUSER / LANGFLOW_SUPERUSER_PASSWORD | 시드 관리자 계정 |
LANGFLOW_SECRET_KEY | 저장된 자격 증명 암호화 키 |
OPENAI_API_KEY, ANTHROPIC_API_KEY, … | 공급자 키 (또는 Global Variables로 설정) |
가져오기 / 내보내기
| 작업 | 방법 |
|---|
| 흐름 내보내기 | Flow 메뉴 → Export → .json |
| 흐름 가져오기 | New → Import .json |
| 버전 제어 | 내보낸 흐름 JSON을 repo에 커밋 |
일반적인 워크플로우
# Postgres + 인증을 사용하여 팀을 위해 시작
LANGFLOW_DATABASE_URL=postgresql://user:pass@db:5432/langflow \
LANGFLOW_AUTO_LOGIN=false \
langflow run --host 0.0.0.0 --port 7860
# 임시 로컬 시험, 설치 없음
uvx langflow run
Langflow vs Dify vs n8n
| 측면 | Langflow | Dify | n8n |
|---|
| 포커스 | LangChain 스타일 흐름 및 에이전트 | LLMOps 앱 플랫폼 (RAG, 프롬프트) | 일반 자동화 + AI 노드 |
| 스타일 | 비주얼 캔버스 | 앱 + 워크플로우 스튜디오 | 워크플로우 자동화 |
| 끝점 | API + MCP | API + 채팅 앱 | 웹훅/자동화 |
| 최적 용도 | 에이전트/RAG 그래프 프로토타이핑 | LLM 앱 배송, 운영 | 500+ 서비스 간 접착제 |
자료