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를 제공합니다.
전형적인 워크플로우
- 원하는 출력 형태를 설명하는 JSON schema를 작성합니다.
- schema로부터 정규 표현식을 생성합니다.
- 사용할 LLM의 tokenizer와 일치하는
Vocabulary를 로드하거나 구축합니다. - 정규 표현식과 어휘집을 사용하여
Index를 구축합니다. - 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를 실행하십시오 (Rustcargo test와 Pythonpytest를 모두 실행합니다).make pcc(pre‑commit)를 통해 스타일 체크를 수행하십시오.make pybench로 벤치마크를 수행하십시오.- Discord에서 커뮤니티에 참여하거나 GitHub에서 issue/PR을 생성하십시오.
라이선스 – MIT (repository의 LICENSE 파일 참조).
Outlines‑core는 대규모 언어 모델을을 사용할 때 빠르고 schema-aware한 token フィルタリング을 필요로 하는 AI 개발자를 위한 진정한 저수준 빌딩 블록입니다.",
관련
- Dispatch
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트