0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜ判定ゲートの正規表現を判定専用AI「Jev」に置き換えたのか(一致率65%→87%)

0
Last updated at Posted at 2026-10-16

この記事は 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つです。

  1. 答えが確率で返る。 confidence に閾値を引け、自信のない答えだけ別経路に回せる
  2. コストが小さい。 入力は執筆時点で100万トークンあたり $0.042、出力は無料。220本の判定が約 $0.016
  3. 作文をしない。 ゲートに挟む部品として余計な出力がない

実測は自社ブログの既存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: に落ちている件数を数えるのが第一歩

さらに深掘りしたい方へ

この記事では置き換えの背景と選定理由を解説しました。

:page_facing_up: 正規表現の判定ゲートをJevに任せる前に ではさらに:

  • そのまま使える組み込みレシピ3つ(危険コマンド・外部文章のインジェクション・見逃せない二値判定)
  • 空応答・429への再試行設計の詳細
  • 採用を見送った実験(PR差分の仕分け)の再現率データ

playpark について

playpark LLC - 業務自動化・AI活用・Web開発

:link: お問い合わせ | ブログ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?