SemIfとは?LLMでif文を置き換えるオープンソースAI意思決定ライブラリ
AIエージェント開発において、「このメッセージはどのキューに振り分けるか」「このコンテンツは安全か」といった小さな条件分岐処理は頻繁に発生します。通常はチャットモデルに問い合わせてテキストを生成し、そのテキストをパースしてif文に変換しますが、このアプローチはレイテンシが高く非効率です。
GitHubで1,500スター超えを達成した SemIf(旧OpenJev)は、この問題を根本から解決するオープンソースライブラリです。LLMのforward passを1回実行してオプション確率を直接読み取ることで、テキスト生成・JSONパース・デコードループをすべて省略し、同等の品質を5倍以上高速に実現します。
SemIfとは何か・なぜ今このツールか
SemIfはTypeSafeの有料クローズドサービス「Jev」が実証したアーキテクチャパターン(セマンティック決定)をオープンモデルで再実装したプロジェクトです。Jevのモデルや学習データは非公開ですが、インターフェースパターン(runtime-defined semantic decisions)はSemIfで再現されています。
なぜ今注目されているのか
2026年9月18日時点で、MiniCPM5 2BとQwen3.5 4Bがブラウザデモに追加されました。Qwen3.5-4Bでは精度0.813(balanced accuracy)を達成しており、TypeSafeの公開評価(Jevの0.883)に近い精度をローカルの4Bモデルで実現できることが示されています。待機リストなし・ローカル実行・完全再現可能なベンチマーク付きという点が、クローズドサービスにはない強みです。
SemIfの仕組みと主な機能
Decision-Nativeアーキテクチャ
Unstructured state → 4B model ← Runtime criteria
← Typed options
↓
Native option logits → Probabilities
通常のLLMは「アカウントサポート」や「課金サポート」といった文字列を自動回帰的に生成してからパースします。SemIfは宣言されたオプションのlogitを直接1回のforward passで読み取るため、0トークン生成で決定が完了します。
共有状態プリフェッチによる並列化
同一の長い状態(state)に対して複数の条件を評価する場合、状態を1回だけプリフェッチして複数の条件を並列評価できます。
| 実行パス | 決定/秒 | 777決定の合計時間 |
|---|---|---|
| 毎回フレッシュスコアリング | 2.33 | 333.1秒 |
| シリアルプリフィックス再利用 | 10.75 | 72.3秒 |
| 並列サフィックス | 20.03 | 38.8秒 |
同じ4Bモデルで8.6倍の速度向上が可能です。
ブラウザでの WebGPU デモ(待機リスト不要)
Qwen3.5-4B(Q4_K_M、3.01GB)のGGUFを直接ブラウザにダウンロードしてWebGPUで実行するデモが公開されています。GPUなしでも試せます。
SemIfの使い方・インストール手順
必要環境
- Python 3.10以上
- CUDA対応GPU(4B BF16モデルが収まる VRAM)
- Hugging Face アカウント(モデルダウンロード用)
インストール
python -m venv .venv
. .venv/bin/activate
export HF_HOME=/path/to/large-drive/huggingface
pip install -e '.[test]'
基本的な使い方
CUDA_VISIBLE_DEVICES=0 semif-score \
--mode direct \
--model Qwen/Qwen3.5-4B \
--revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a \
--input examples/decisions.jsonl \
--output results.jsonl
入力フォーマット
{
"id": "route-1",
"state": "Customer cannot access an account after a password reset.",
"question": "Which queue should handle this request?",
"options": [
{"id": "access", "description": "Account access support."},
{"id": "billing", "description": "Billing support."}
]
}
stateにはテキストのほかJSONオブジェクト・配列も使用可能。同一状態に複数の条件を適用する場合は--mode sharedで高速化できます。
Jev(TypeSafe)・LangChain・LlamaIndexとの違い
Jevとの比較
| 比較軸 | SemIf | Jev(TypeSafe) |
|---|---|---|
| アクセス | オープンソース・無料 | 有料クローズドサービス |
| モデル | Qwen3.5-4B等のオープンモデル | 独自の非公開モデル |
| 精度(102行subset) | 0.845 | 0.883 |
| 実行環境 | ローカルGPU / ブラウザ | クラウドAPI |
| 再現性 | 完全再現可能(全fixture公開) | 非公開 |
LangChain / LlamaIndexとの比較
LangChainやLlamaIndexはLLMを使った条件分岐を実装できますが、いずれもチャット補完(テキスト生成 → パース)アプローチを前提としています。SemIfのようなlogit直接読み取りを標準で提供するフレームワークはほぼ存在せず、独自性が高いポジションです。
こんな人に向いている
AIエージェント開発者
カスタマーサポートの問い合わせ分類・コンテンツモデレーション・ルーティングロジックなど、小さな条件分岐を大量に高速処理したいAIエージェント開発者に最適です。APIコストとレイテンシを同時に削減できます。
MLエンジニア(推論最適化担当)
既存のLLMパイプラインでAutoregressive JSON生成がボトルネックになっているMLエンジニアにとって、SemIfのアーキテクチャは直接適用可能なアイデアの宝庫です。ベンチマークが全公開されているため、自社データでの再現実験も容易です。
バックエンドエンジニア(AI機能組み込み担当)
Pythonベースのバックエンドにセマンティック条件分岐を組み込みたいエンジニアに向いています。REST APIラッパーとして使えば、任意のサービスからHTTP経由で呼び出せます。
使う前に知っておきたいこと
必要なGPUリソース
Qwen3.5-4B(BF16)を動かすには約8GB以上のVRAMが必要です。RTX 3090(24GB)での測定値が公開されていますが、小さなGPUでは量子化(Q4_K_M等)を使ったGGUFモデルが選択肢になります。
精度の注意点
SemIfは同等のアプローチですが、TypeSafe Jevの精度(0.883)には届いていません(Qwen3.5-4Bで0.845)。ミッションクリティカルな用途では自社タスクでの精度評価が必須です。BF16とGGUF量子化間でargmaxが変わるケースが5〜6件確認されており、量子化時の精度低下に注意が必要です。
ライセンスとモデルの権利
プロジェクトコードはMITライセンスです。使用するモデル(Qwen3.5-4B等)はそれぞれのライセンス(Apache 2.0等)が適用されます。TypeSafe・Jev・Qwen等の商標は各社に帰属します。
まとめ
SemIfは「小さな条件分岐にチャットモデルを使うのは非効率」という問題を解決するために設計されたAI意思決定ライブラリです。logit直接読み取りという独自アプローチにより、AutoregressiveなJSON生成と比べて5倍以上の高速化を達成しています。AIエージェント開発のルーティング・フィルタリング処理のボトルネックを解消したいエンジニアに試してほしいツールです。
関連ツール・おすすめサービス
SemIfのようなAI推論ツールを本番運用するには、GPU搭載のクラウド環境が便利です。
- Perplexity AI — AIを活用した調査・情報収集に
この技術を学ぶ
AIに興味を持った方には、Udemyのオンラインコースもおすすめです。
- 🎓 関連するAIコース一覧 — セール時(最大90%OFF)を狙うとお得です
関連記事
この記事が役に立ったらシェアしてください