NandhaKishorM/laya

Non-autoregressive System 1 decision engine. Typed choice, score and yes/no decisions over any text in a single forward pass, in 100+ languages, with a router that picks the right checkpoint per request.

Laya – 빠르고 다국어, 비자기 회귀형 결정 엔진

무엇인가요 – Laya는 Python 라이브러리(또한 동일한 TypeScript 패키지와 호환)로, 텍스트, JSON, 이메일, 티켓 등 어떤 데이터에 대해서도 형식화된 질문을 가능하게 합니다. 자유 형식의 텍스트를 생성하는 대신, 다음과 같은 구조화된 결정을 반환합니다:

  • choice – 목록에서 하나의 레이블을 선택 (예: 어떤 부서가 요청을 처리해야 하는가)
  • score – 숫자 평가를 제공 (예: 0–100 스케일의 긴급도)
  • noul – 이진 yes/no 질문 (예: 사용자가 환불을 명시적으로 요청했는가?)

이 모든 작업은 BERT 스타일 인코더의 단일 순전파로 이루어지며, NVIDIA T4 GPU에서 단일 질문에 약 33ms(배치 처리 시 7ms)가 소요됩니다. 모델은 텍스트를 생성하지 않기 때문에 환각이 발생하지 않으며, 출력은 후속 자동화에 직접 사용 가능합니다.


핵심 아이디어

기능 왜 중요한가
비자기 회귀형 토큰 단위 생성 없음 → 결정적이고 즉시 파싱 가능한 답변.
형식화된 결정 choice/score/noul과 같은 구조화된 출력은 라우팅, 티켓 분류, 가드레일, 분석 파이프라인과 잘 맞습니다.
다국어 (100+ 언어) 하나의 요청은 어떤 언어로든 가능하며, Laya는 자동으로 최적의 체크포인트로 라우팅합니다.
라우터 스크립트/언어를 자동 감지하고, 3개의 체크포인트(영어, 다국어, 또는 더 큰 '형식화된 결정' 모델) 중 하나를 선택하며 추가 지연 없이 처리됩니다.
라우팅된 배치 비슷하지 않은 요청을 체크포인트와 질문 스키마별로 그룹화하여, 순서를 유지하면서 여러 항목을 동시에 스코어링합니다.
ONNX 및 torch.compile 지원 CPU, GPU, Apple Silicon, Intel XPU에서 선택적 고속 경로를 제공합니다.
예측 후크 결과를 감사, 마스킹, 캐시, 또는 게이트 제어할 수 있는 플러그인 포인트. 컴플라이언스 또는 사용자 정의 가드레일에 유용합니다.
자체 호스팅 HTTP 서버 Jev 호환 API (/predict, /predict/batch)와 간단한 웹 GUI를 제공하여 빠른 테스트가 가능합니다.
LangChain / LangGraph 통합 LLM 기반 워크플로우에 즉시 통합 가능한 에이전트.
Docker 및 ARM64 빌드 클라우드 또는 엣지 하드웨어에서 컨테이너로 쉽게 실행 가능합니다.

작동 방식 (개요)

  1. 라우터 생성 – router = Router(preload=True)로 3개의 체크포인트를 로드(또는 처음 사용 시 지연 로드). 라우터에는 별도 프로세스에서 실행되는 가벼운 언어 감지 모듈이 포함되어 있어, laya를 임포트해도 즉시 PyTorch를 로드하지 않습니다.
  2. 질문 세트 정의 – JSON 호환 사전으로, 각 키는 질문 이름이고, 각 값은 다음과 같이 지정:
    • type: choice, score, 또는 noul
    • instructions: 모델용 자연어 프롬프트
    • criteria: 레이블 → 설명의 매핑(choice용) 또는 레이블의 순서 목록(score용).
  3. 예측 실행 – router.predict(state, questions)는 적절한 체크포인트를 단일 순전파로 실행하고, 다음을 반환:
    • answers – 각 질문에 대한 모델의 결정과 신뢰도 점수.
    • routing – 사용된 체크포인트와 그 이유(스크립트, 언어, 포알백 등).
  4. 배치 처리 – router.predict_batch(requests)는 호환 가능한 요청을 자동으로 그룹화하여, 10개의 다국어 티켓의 배치도 몇 번의 순전파만으로 처리 가능합니다.

빠른 시작 (Python)

from laya import Router

router = Router(preload=True)   # 모든 체크포인트를 로드하여 35ms 미만의 라우팅 가능

state = {
    "from": "user@example.com",
    "subject": "Duplicate charge",
    "body": "We were billed twice for March. Please refund it today."
}

questions = {
    "department": {
        "type": "choice",
        "instructions": "Which department should handle this request?",
        "criteria": {
            "billing": "invoices, payments, refunds",
            "technical": "bugs, outages",
            "sales": "pricing, contracts",
            "other": "everything else"
        }
    },
    "urgency": {
        "type": "score",
        "instructions": "How urgent is this?",
        "criteria": ["not urgent", "soon", "critical"]
    },
    "refund_requested": {"type": "noul", "instructions": "Does the user explicitly request a refund?"}
}

result = router.predict(state, questions)
print(result["answers"]["department"]["choice"])   # → billing (confidence 0.94)
print(result["routing"])

동일한 코드는 힌디어, 아랍어 또는 다른 모든 언어에서도 작동하며, 라우터는 자동으로 다국어 체크포인트를 선택합니다.


명령줄 사용법

pip install laya 후 laya 실행 파일이 제공됩니다:

# 라우팅만 – 모델 다운로드 없이 즉시 반환
laya "I was charged twice, please refund"

# 전체 예측 (첫 실행 시 체크포인트 다운로드)
laya "I was charged twice, please refund" --predict

# 언어 강제 지정 (감지가 모호할 때 유용)
laya "Mein Konto wurde zweimal belastet" --lang de

# 사전 설정된 워크플로우 사용 (티켓 분류, 모더레이션 등)
laya "Refactor this service" --preset triage

CLI는 결정 내용의 간결한 JSON 요약을 출력합니다.


로컬 API / 데모 UI 실행

pip install "laya[serve]"
python examples/server.py   # http://127.0.0.1:8000 에서 FastAPI 시작
  • 웹 UI는 원시 JSON을 붙여넣거나 간단한 폼을 채워 각 답변을 0–100 막대 그래프로 시각화합니다.
  • 동일한 서버는 Python SDK와 동일한 state/questions 페이로드를 수신하는 /predict 및 /predict/batch 엔드포인트를 노출합니다.

설치 참고사항

  • Python 3.10+ – 패키지는 transformers>=5, torch>=2.14, huggingface_hub>=1를 고정합니다. Laya를 설치하기 전에 CPU 전용 또는 GPU 전용 공식 PyTorch 설치기를 사용하세요.
  • 선택적 추가 기능 –
    • laya[serve] – FastAPI 서버 및 UI.
    • laya[mcp] – 선택적 MCP(모델 제어 플레인) 서버.
    • laya[langchain] – LangChain / LangGraph 통합 도구.
  • 모델 다운로드 – 체크포인트가 필요한 첫 번째 호출에서 Hugging Face 허브(convaiinnovations/laya*)에서 모델을 다운로드합니다. 이후 실행에서는 로컬에 캐시됩니다.

Laya를 사용할 때

사용 사례 왜 Laya가 적합한가
고객 지원 티켓 분류 – 티켓을 적절한 부서로 라우팅, 긴급도 표시, 환불 요청 탐지. 구조화된 출력, 50ms 미만 지연, 다국어는 기본 제공.
자동 모더레이션 – "이게 폭력적인가?" 또는 "개인 정보가 포함되어 있는가?"와 같은 이진 검사. 생성 없음 → 환각으로 인한 오진 없음; 신뢰도 점수로 임계값 설정 가능.
비즈니스 규칙 강제 – 들어오는 이메일이나 JSON 페이로드에 대한 정책 준수 평가. 결정 헤드 모델은 자체 레이블 데이터로 파인튜닝 가능; 후크로 사용자 정의 마스킹 또는 캐시 추가 가능.
엣지 또는 저자원 추론 – ONNX를 통해 CPU, Apple M-시리즈, Intel XPU에서 실행 가능. 빠른 로딩(2초 CPU 로딩), 선택적 torch.compile / ONNX 경로 있음.

로드맵 및 커뮤니티

  • 리포지토리는 세미틱 버전링을 따릅니다. 최신 릴리스(0.3.11)는 라우팅된 배치, 예측 후크, 더 안전한 HTTP 서빙을 추가했습니다.
  • TypeScript 패키지(laya-ts)는 Node.js 및 브라우저 환경에서 동일한 결정 API를 제공합니다.
  • 프로젝트는 Apache-2.0 라이선스이며, 저자는 Buy-Me-A-Coffee를 통해 기부를 수락합니다.

TL;DR

Laya = 빠르고 형식화, 다국어 대응의 결정. 텍스트 생성 없이도 가능합니다. Router를 임포트하고, 구조화된 질문의 작은 세트를 정의한 후, 이메일, 티켓, 자유 형식 텍스트에 대해 즉시 신뢰도 점수와 함께 답변을 얻을 수 있습니다. 프로덕션 수준의 분류, 가드레일, 결정이 결정적이고 언어에 의존하지 않는 모든 워크플로우에 이상적입니다.

이 프로젝트를 다룬 글

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트