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 – リストから1つのラベルを選択(例:どの部署がリクエストを処理すべきか)
  • score – 数値評価を付与(例:0–100スケールでの緊急度)
  • noul – 二値の yes/no 質問(例:ユーザーは返金を明確に要求していますか?)

これらすべては BERTスタイルのエンコーダーの1回の順伝播 で実行され、NVIDIA T4 GPU 上で1つの質問に約33ms(バッチ処理時は7ms)かかります。モデルはテキストを生成しないので、幻覚が発生せず、出力は後続の自動化処理に直接利用可能です。


主な特徴

特徴 重要性
非自己回帰型 トークン単位の生成なし → 確定的で即座に解析可能な回答。
型付き意思決定 choice/score/noul といった構造化出力は、ルーティング、チケット分類、ガードレール、分析パイプラインと相性が良い。
多言語対応(100言語以上) 1回のリクエストで任意の言語が可能。Laya は自動的に最適なチェックポイントにルーティング。
ルーター スクリプト/言語を自動検出し、3つのチェックポイント(英語、多言語、またはより大きな「型付き意思決定」モデル)のいずれかを選択。追加の遅延なし。
ルーティングされたバッチ処理 異種のリクエストをチェックポイントと質問スキーマごとにグループ化。順序を保持しながら多数のアイテムを一度にスコアリング。
ONNX および torch.compile 対応 CPU、GPU、Apple Silicon、Intel XPU でのオプション高速パス。
予測フック 出力を監査、マスク、キャッシュ、またはゲート制御するためのプラグインポイント。コンプライアンスやカスタムガードレールに有用。
自己ホスト型 HTTP サーバー Jev互換 API(/predict, /predict/batch)と、簡単なテスト用の小規模 Web 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) は適切なチェックポイントを1回の順伝播で実行し、以下を返す:
    • 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 を起動
  • Web 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 で動作。 高速ロード(CPUで2秒)、オプションの torch.compile / ONNX パスあり。

ロードマップとコミュニティ

  • リポジトリはセマンティックバージョニングを採用。最新リリース(0.3.11)ではルーティングバッチ、予測フック、より安全なHTTPサーバーが追加されました。
  • TypeScript パッケージ(laya-ts)が Node.js およびブラウザ環境で同じ意思決定APIを提供。
  • プロジェクトは Apache-2.0 ライセンスで、作者は Buy-Me-A-Coffee による寄付を受け付けています。

TL;DR

Laya = 高速で型付き、多言語対応の意思決定。テキスト生成は一切不要。Router をインポートし、構造化された質問の小さなセットを定義するだけで、メール、チケット、自由形式のテキストに対して即座に信頼度スコア付きの回答を得られます。プロダクションレベルのチケット分類、ガードレール、および決定が確定的で言語に依存しないワークフローに最適です。

これを取り上げた記事

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト