내가 AI 워크플로 엔진을 만든 이유
Source: Dev.to
번역을 진행하려면 실제 텍스트(본문 내용)를 제공해 주시겠어요?
링크만으로는 내용을 가져올 수 없으니, 번역이 필요한 부분을 복사해서 알려주시면 바로 한국어로 번역해 드리겠습니다.
📖 반복되는 패턴
“나는 같은 것을 계속해서 만들고 있었다.”
지난 몇 년 동안 저는 모두 공통된 흐름을 가진 여러 애플리케이션을 개발해 왔습니다:
| 애플리케이션 | 핵심 필요성 |
|---|---|
| Memoir Writing Assistant | 장기적인 대화형 워크플로우로 사용자를 깊이 개인적인 스토리텔링으로 안내합니다. |
| Small‑Business Finance App | 비즈니스 프로세스 워크플로우(승인, 조정, 반복 작업)에 AI를 겹쳐 분류 및 인사이트 제공. |
| Customer Chatbot (current client) | RAG 기반 지식베이스 탐색, 지원 처리, 부품 선택 및 주문. |
| Academic Research Assistant | LLM 기반 연구 프로젝트 분석 및 종합. |
모두 처음부터 다시 구축해야 했던 세 가지가 필요했습니다:
- 내구성 있는 워크플로우 오케스트레이션
- AI 에이전트와의 통합
- AI 비용에 대한 제어
각 새로운 프로젝트는 동일한 단계로 귀결되었습니다:
- 작업을 큐에 넣기
- LLM 호출하기
- 진행 상황 및 재시도 추적하기
- 상태 영구 저장하기
- 사용자에게 알리기
더 나은 방법이 있을 것이라 생각했고, 그래서 찾아보기 시작했습니다.
🔎 기존 도구 – 무엇이 부족한가?
| 도구 | 강점 | 약점 (AI 중심 워크로드에 대해) |
|---|---|---|
| Temporal | 표준에 부합하는 내구성 있는 실행 | 높은 유지보수 비용, 토큰 사용량이나 LLM 가격에 대한 인식 부족. |
| Airflow | 성숙한 배치 스케줄러 | cron 기반 DAG에 설계되어 있어 이벤트 기반 인터랙티브 흐름에 부적합; 대용량 Docker 이미지 및 RAM 사용량. |
| LangChain / LangGraph | AI 중심, 풍부한 LLM 도구 | Python 전용, 내구성 부족; 프로덕션에서는 LangSmith 필요(전용, 실행당 약 $1k/백만 회). |
핵심 요약: 기존 솔루션은 운영 부담이 크고 AI를 무시하거나 AI를 인식하지만 내구성 및 독립성이 부족합니다.
💡 핵심 인식
AI 애플리케이션에서 LLM 비용은 애플리케이션‑인프라 관점의 문제입니다.
워크플로우가 LLM을 호출할 때, 그 호출 비용이 다음 단계에 영향을 미쳐야 합니다:
- Claude Sonnet을 사용할 여유가 있나요, 아니면 Haiku로 대체해야 할까요?
- 이 워크플로우가 이미 예산을 소진했나요?
- 다른 API 호출을 하기보다 캐시된 결과를 재사용할 수 있나요?
이러한 결정은 실행 중에 이루어져야 하며, 사후에 이루어져서는 안 됩니다. 따라서 비용 추적은 사후 대시보드가 아니라 오케스트레이터 자체에 포함되어야 합니다.
🚀 Introducing Kruxia Flow
AI 애플리케이션을 위해 특별히 설계된 내구성 있는 워크플로우 엔진.
| 특징 | 세부 정보 |
|---|---|
| Binary | 단일 Rust 바이너리 (~7.5 MiB) |
| Persistence | PostgreSQL (Kafka, Elasticsearch, Cassandra 없음) |
| Deployment | 하나의 바이너리 + 하나의 DB → 작은 Docker 이미지 (≈ 63 MiB) |
| Portability | Raspberry Pi Zero, 클라우드 VM, 혹은 모든 컨테이너 호스트에서 실행 |
AI‑네이티브 핵심 기능
-
Automatic Cost Tracking
- 토큰을 실시간으로 계산하고 가격을 산정합니다.
- Anthropic, OpenAI, Google Gemini, 그리고 자체 호스팅 Ollama 모델을 지원합니다.
-
Budget Enforcement
- 워크플로우당 또는 활동당 예산을 설정합니다.
- 엔진은 각 LLM 호출 전에 예산을 확인하며, 초과 시 중단하거나 알림을 보낼 수 있습니다.
-
Cost‑Aware Model Fallback
- 폴백 체인을 정의합니다 (예: Claude Sonnet → Claude Haiku → Ollama).
- 오케스트레이터는 남은 예산에 맞는 가장 성능이 좋은 모델을 선택합니다.
-
Semantic Caching
- 유사한 쿼리는 API 대신 캐시를 사용합니다.
- FAQ, RAG와 같은 일반 패턴에서 중복 호출을 50‑80 % 감소시킵니다.
-
Python SDK
- Python으로 워크플로우와 커스텀 워커를 정의합니다.
pandas,DuckDB,scikit‑learn에 대한 내장 지원을 제공합니다.
📊 Benchmarks (Kruxia Flow vs. Temporal & Airflow)
| 지표 | Kruxia Flow | Temporal | Airflow |
|---|---|---|---|
| 처리량 | 93 워크플로우 / s | 66 워크플로우 / s | 8 워크플로우 / s |
| 최대 메모리 | 328 MiB | ~1 GiB (변동) | 7.2 GiB |
| Docker 이미지 크기 | 63 MiB | > 500 MiB | > 1 GiB |
| 테스트 하드웨어 | 2 vCPU, 4 GiB RAM (Linux) | 동일 | 동일 |
| Raspberry Pi Zero | ✅ 실행 | ❌ 너무 무거움 | ❌ 너무 무거움 |
👥 Kruxia Flow는 누구를 위한 것인가?
- AI 스타트업: 에이전트를 프로덕션에 배포하면서 실시간 비용 가시성이 필요한 경우.
- 소규모 기업: 수만 달러 규모의 인프라 비용 없이 워크플로 자동화를 원하는 경우.
- 데이터 팀: 배치 파이프라인, ML 학습, NLP 처리, LLM 에이전트를 결합하면서 운영 경량성을 유지하고자 하는 경우.
위 항목 중 하나에 해당한다면, Kruxia Flow는 당신을 위해 만들어졌습니다.
📜 Licensing & Availability
- Core engine, LLM cost tracking, budget enforcement, multi‑provider support, token streaming – AGPL‑3.0 (open source).
- Python SDK – MIT‑licensed.
Repository: https://github.com/kruxia/kruxia‑flow (public, actively maintained)
🛠️ 시작하기 (빠른 시작)
# 1️⃣ Pull the Docker image (63 MiB)
docker pull ghcr.io/kruxia/kruxia-flow:latest
# 2️⃣ Run PostgreSQL (if you don’t have one already)
docker run -d \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_USER=kruxia \
-e POSTGRES_DB=kruxia \
-p 5432:5432 \
postgres:15
# 3️⃣ Start Kruxia Flow
docker run -d \
-e DATABASE_URL=postgresql://kruxia:secret@host.docker.internal:5432/kruxia \
-p 8080:8080 \
ghcr.io/kruxia/kruxia-flow:latest
# 4️⃣ Install the Python SDK
pip install kruxia-flow-sdk
이제 Python에서 워크플로를 정의할 수 있습니다:
from kruxia import workflow, activity, ModelSelector
@workflow
def memoir_assistant(user_id: str):
# Step 1 – fetch user profile (cached)
profile = await activity(fetch_profile, user_id)
# Step 2 – generate outline (cost‑aware)
outline = await activity(
generate_outline,
profile,
model=ModelSelector(preferred="claude-sonnet", fallback="claude-haiku")
)
# Step 3 – store result
await activity(save_outline, user_id, outline)
🎉 마무리 생각
기존 워크플로 엔진은 운영 복잡성을 부담하게 하거나 LLM 사용의 경제성을 무시합니다.
Kruxia Flow는 그 격차를 메우며 작고, Rust‑기반, AI‑인식 오케스트레이터를 제공하여:
- 실시간으로 비용을 추적
- 예산 초과 전에 강제 적용
- 자동으로 더 저렴한 모델로 전환
- 의미적으로 유사한 쿼리를 캐시
모두 경량, 오픈 소스, 그리고 단독 개발자나 소규모 팀이 쉽게 실행할 수 있도록 유지됩니다.
즐거운 개발 되세요! 🚀
로드맵
- 시맨틱 캐싱, 웹 대시보드, 그리고 TypeScript SDK가 로드맵에 포함됩니다.
아직 개발 중이며 앞으로 할 일이 많습니다. 하지만 기반은 탄탄하고 저는 이미 제 프로젝트에 사용하고 있습니다 — 결국 이것이 제가 처음 만들게 된 이유이기도 합니다.
이 내용이 마음에 드신다면 살펴보시길 바랍니다. 코드는 GitHub에 있으며, 디자인, 로드맵, AI와의 작업 등에 대해 이야기할 수 있는 Discord도 있습니다.