この記事は playpark Blog からの転載(再構成)です。
この記事で分かること
- 正規表現の判定ゲートを置き換えようと思った背景
- 正規表現・判定専用モデル Jev・汎用LLMエージェントの比較
- どういう場面なら置き換えてよく、どういう場面ではやめるべきか
背景: 門番が判定の3分の2を決めていた
記事を「比較・ガイド・落とし穴・事例」に振り分け、直近7本のうち落とし穴型が4本以上なら次の企画を止める門番を、正規表現で作っていました。どのキーワードにも当たらなければ「落とし穴」に倒す実装です。
既存の技術記事121本に当てたところ、79本(65%)がどのルールにも当たらず「その他=落とし穴」に流れていました。ガイド48本のうち34本が失敗談として数えられており、else の一行が判定の大半を決めていたことになります。
選択肢の検討
| アプローチ | メリット | デメリット |
|---|---|---|
| 正規表現 | 0円・ミリ秒・完全に決定的 | 境界が曖昧な判定で else に偏る |
| 判定専用モデル Jev | 多択・yes/no を確率つきで返す。1回1円の50分の1未満 | p90 9秒、混雑時に429 |
| 汎用LLMエージェント | 検索や多要因の推論ができる | 桁違いに高く、遅く、出力の揺れを測りにくい |
Jev は TypeSafe AI のモデルで、Vercel AI Gateway から typesafe-ai/jev として呼べます。文章は書かず、yes/no(noul)・選択(choice)・点数(score)だけを返します。
なぜ Jev を選んだか
判断基準は3つです。
-
答えが確率で返る。
confidenceに閾値を引け、自信のない答えだけ別経路に回せる - コストが小さい。 入力は執筆時点で100万トークンあたり $0.042、出力は無料。220本の判定が約 $0.016
- 作文をしない。 ゲートに挟む部品として余計な出力がない
実測は自社ブログの既存220記事(入力はタイトル・概要・見出し・冒頭1200字、正解ラベルは Claude Opus 5 が付与)です。
| 判定器 | 技術記事121本 | 業務記事99本 |
|---|---|---|
| 正規表現 | 65.3% | 83.8% |
| Jev 単独 | 86.8% | 88.9% |
| Jev+閾値0.7+正規表現フォールバック | 89.3% | 90.7% |
confidence は実際に当てになりました。
| confidence | 本数 | 実測の正答率 |
|---|---|---|
| 0.5未満 | 9 | 44% |
| 0.5〜0.9 | 34 | 82〜83% |
| 0.9以上 | 78 | 94% |
実装例: コマンドが本番に触るかを聞く
{
"model": "typesafe-ai/jev",
"state": "psql \"$DATABASE_URL\" -c \"DELETE FROM orders WHERE status = 'cancelled'\"",
"questions": {
"prod": {
"type": "noul",
"instructions": "このコマンドは本番環境・本番の認証情報・実顧客データに触る操作か"
}
}
}
printf 'header = "Authorization: Bearer %s"\n' "$AI_GATEWAY_API_KEY" |
curl -sS --max-time 15 --config - \
-H "Content-Type: application/json" \
-d @request.json \
https://ai-gateway.vercel.sh/typesafe/v1/systemone |
jq '.answers.prod'
鍵を --config - で渡しているのは、プロセス一覧に鍵を出さないためです。
採用時の設計方針
- 確率モデルに allow を出させず、確認や警告を足す側にだけ使う
- 字面で候補を先に絞り、全件をJevに流さない
- 応答なし・低confidenceは正規表現に戻す
運用上の注意として、レイテンシは p50 1.2秒・p90 9秒・最大77秒、並列4で220本中46本が429でした。並列2に絞り、Retry-After を守り、最大8回バックオフすれば全件通ります。
まとめ: どういう場面で使うべきか
-
使う: 境界が曖昧な多択・yes/no で、
elseに判定が偏っているとき - 使わない: 決定論で書けるルール(自社では sandbox 内で失敗するコマンドを止める hook は正規表現のみ)、選択肢を先に書けない問い
-
入れる前に: 過去の正解で測る。自分のコードの
elseやdefault:に落ちている件数を数えるのが第一歩
さらに深掘りしたい方へ
この記事では置き換えの背景と選定理由を解説しました。
正規表現の判定ゲートをJevに任せる前に ではさらに:
- そのまま使える組み込みレシピ3つ(危険コマンド・外部文章のインジェクション・見逃せない二値判定)
- 空応答・429への再試行設計の詳細
- 採用を見送った実験(PR差分の仕分け)の再現率データ
playpark について
playpark LLC - 業務自動化・AI活用・Web開発