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 から regex を生成します。
- 使用する LLM の tokenizer に一致する
Vocabularyをロードまたは構築します。 - regex と語彙を使用して
Indexを構築しますします。 - Python (または Rust) で index から
Guideを作成し、以下の操作を繰り返します:guide.get_tokens()を呼び出し、次にモデルが放出할 D 許可された token ID のセットを取得します。guide.advance(token_id)を使用して、選択した token を戻します。guide.is_finished()が true になったら終了します。
なぜ重要か – 生成を schema 準拠の token に制限することで、構造化された LLM 出力 (例: JSON オブジェクト、日付、ID) を得ることができます。事後解析やコストの高い beam search は不要です。
はじめに
- Rust:
cargo add outlines-coreを実行し、README のコードスニペットに従ってください。 - Python: リポジトリを clone し、、venv を作成し、
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 (リポジトリの LICENSE ファイルを参照してください)。
Outlines‑core は、大規模言語モデルを扱う際に、高速で schema 意識の token フィルタリングが必要な AI 開発者のための、本物の低レベル構築ブロックです。",
関連
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト