dottxt-ai/outlines-core

Faster structured generation

outlines‑core – Rust를 이용한 구조화된 생성

개요 – JSON schema를 결정적 유한 상태 자동기(DFA)로 변환하여 언어 모델 어휘집으로부터의 token 생성 과정을 가이드하는 Rust 라이브러리(Python 바인딩 포함)입니다. 원래 Outlines 프로젝트의 성능 중심 핵심 엔진입니다.

주요 기능

  • Schema → regex – JSON schema를 정규 표현식(json_schema::regex_from_str)으로 변환합니다.
  • 어휘집 처리 – 사전 학습된 모델(예: openai-community/gpt2)에서 tokenizer를 로드하거나 수동으로 구축하여 token을 정수 ID로 매핑합니다.
  • 인덱스 객체 – regex와 Vocabulary를 결합하여 token ID를 DFA 상태 전이로 효율적으로 매핑하는 Index를 생성합니다.
  • Guide 추상화 (Python) – 현재 DFA 상태를 추적하고, 허용된 token을 보고하며, token이 소비될 때 상태를 진행시키는 얇은 래퍼(Guide)입니다.
  • 교차 언어 지원 – 핵심 엔진은 속도와 안전성을 위해 Rust로 작성되었습니다. pyo3 기반의 Python 패키지(outlines_core)가 Python 사용자에게 동일한 API를 제공합니다.

전형적인 워크플로우

  1. 원하는 출력 형태를 설명하는 JSON schema를 작성합니다.
  2. schema로부터 정규 표현식을 생성합니다.
  3. 사용할 LLM의 tokenizer와 일치하는 Vocabulary를 로드하거나 구축합니다.
  4. 정규 표현식과 어휘집을 사용하여 Index를 구축합니다.
  5. Python (또는 Rust)에서 index로부터 Guide를 생성하고 다음을 반복합니다:
    • guide.get_tokens()를 호출하여 모델이 다음에 내보낼 수 있는 허용된 token ID 세트를 조회합니다.
    • guide.advance(token_id)를 통해 선택한 token을 다시 입력합니다.
    • guide.is_finished()가 true가 되면 중단합니다.

중요한 이유 – 생성 과정을 schema에 부합하는 token으로 제한함으로써, 사후 파싱이나 비용이 많이 드는 빔 서치(beam search) 없이도 구조화된 LLM 출력을(예: JSON 객체, 날짜, ID) 얻을 수 있습니다.

시작하기

  • Rust: cargo add outlines-core를 실행한 후 README의 코드 스니펫을 따르십시오.
  • Python: repo를 clone하고, virtualenv를 생성한 후 pip install -e .[test]를 실행하십시오. Python 예제에 표시된 대로 outlines_core 패키지를 사용하십시오.
  • 디버깅을 위해 make build-extension-debug로 네이티브 확장을 빌드하십시오.

개발 및 기여

  • Fork → clone → Python venv를 설정하십시오.
  • make test를 실행하십시오 (Rust cargo test와 Python pytest를 모두 실행합니다).
  • make pcc (pre‑commit)를 통해 스타일 체크를 수행하십시오. make pybench로 벤치마크를 수행하십시오.
  • Discord에서 커뮤니티에 참여하거나 GitHub에서 issue/PR을 생성하십시오.

라이선스 – MIT (repository의 LICENSE 파일 참조).


Outlines‑core는 대규모 언어 모델을을 사용할 때 빠르고 schema-aware한 token フィルタリング을 필요로 하는 AI 개발자를 위한 진정한 저수준 빌딩 블록입니다.",

관련

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