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 から regex を生成します。
  3. 使用する LLM の tokenizer に一致する Vocabulary をロードまたは構築します。
  4. regex と語彙を使用して Index を構築しますします。
  5. 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
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト