Orcaをつかって作業の自動化をした話は、こちらで書きました
私、最初はJevって役に立たないと思ってたんです。
というのは、そもそも他のメジャーなLLMも、ざっくりいうと
膨大なデータの中から確率的にもっとも高いと思われる"文字列を並べているだけ
だからです。
Jevは、その確率だけを返すというもの(ちょっと雑すぎるかな?)。しかも、その確率の根拠が全くわからない、というものでした。
ChatGPTやGemini、ClaudeのようなLLMなら、「まぁハルシネーションは割と普通に起きるから、起きないようにちゃんと設計しようね」と考えて、フローを作り込めばいい。
でも、Jevは確率の根拠がわからないから、A案90%、B案9%、C案1%と出てきても、「え?ほんと?なんで?」となってしまいます。
だから、一旦ほっといたんです。
そしたら、またまた海外Yパパさんが神動画を出していました。
これを見て、
「あれ? 何百回も討論させたら、確率もそれなりに確からしくなりそうだな」
と思ったんです。
でですね、海外Yパパさんの丸パクリですが、3人のAIに反対の立場で戦わせて、やることの優先順を決める仕組み(ディベート)を作りました。その審判役に、TypeSafeのJevを使いました。仕組みの話は、次の記事で書きます。
この記事では、
Jevが選んだ論者と、Claudeが選んだ論者がどこまで一致したか?
を書きます。
ディベートの仕組みを、先に簡単に説明します。
- 3人の論者が、それぞれ案を1つ推して、 肩入れ・反論・中間 の役で戦います。
- 議論に加わらない審判が、一番筋のよい論者に1票を入れます。
- これを何回も回して、票を数えます。
補足ですが、私はディベートの仕組みを具体的に指示していません。
ClaudeCode先生に、以下のように聞いてみて、進めただけです。
「Claudeの子エージェント同士の対話とJevを使った何回もの討論はどう違う?」
「じゃぁJevを使って何十回何百回も討論させる仕組みを考えてスキル化してちょ。その際にちゃんとフローを作ってから自動化する仕組みを使ってね」
雑だな、と思われるでしょう。はい、雑ですw
でも、先に書いたOrcaでの自動化の仕組みを使うので、品質は私が厳しくチェックする形です。あくまで成果物が期待通りになっているかが大事なので。
Jevとは
Jevは、TypeSafe AIが2026年9月15日に出した判断専用のモデルです。文章は書かず、決めた問いに「はい/いいえの確率」や「選択肢」で答えるだけです。いわば、賢いif文です。
呼び出しは1回のPOSTで、送るのは次の3つだけです。
- 状況(state):文字列でも辞書でも構いません
- モデル名(model)
- 型つきの問い(questions)
今回は、問いの型にchoice(選択肢)を使い、3人の論者から一番筋のよい論者を1人選ばせました。審判役の呼び出しは、次のとおりです。
rng.shuffle(order)
labels = dict(zip("PQR", order))
by_id = {d["id"]: d for d in cast}
shown = "\n\n".join(f"【論者{lab}】推す案:{by_id[i]['option']}\n{r2[i]}" for lab, i in labels.items())
r = ask(f"{base}\n\n3人の最後の主張:\n{shown}",
{"winner": {"type": "choice", "instructions": f"審判として、{RULE}一番筋のよい論者はどれか",
"criteria": {lab: f"論者{lab}(推す案:{by_id[i]['option']})" for lab, i in labels.items()}}},
caller="debate-vote")
ans = r["answers"]["winner"]
win = by_id[labels[ans["choice"]]]
並べる順は、1回の討論(以下、世界)ごとにシャッフルし、並び順の偏りを避けます。返ってくるのは、選ばれたラベル、ラベルごとの確率、自信の値です。実際の1回は、次のとおりでした。
{"answers": {"winner": {"choice": "Q", "probabilities": {"R": 0.09, "P": 0.01, "Q": 0.9}, "confidence": 0.85}}}
Qが0.90で選ばれ、自信は0.85、時間は233ミリ秒でした。
事前の測定では、分類・合否・振り分けのような「選ぶだけ」の判定は、日本語でもClaudeと全件一致しました。だから、高いモデルの前に置けるかもしれないと考えました。
料金は、公式のドキュメントでは確認できなかったので、この記事では書きません。
試験の設計
議題は、発信先、個人ナレッジwiki、学びの計画、想起カード、構想メモの5つで、計99回、討論を回しました。
個人ナレッジWikiや、学び、想起カードなどの仕組みは別の記事で書きます。
1回ごとに、3人の論者(Haiku)が2ラウンド論じます。審判は、同じ討論に対して3つの案で選びました。
- A(基準):Claudeが3人の最後の主張を読んで選ぶ
- B:選ぶ部分をJevに置き換える
- C:Jevで明らかに弱い論を先に落とし、残りだけをClaudeが選ぶ
1回の討論ごとに、記録の1行へ次のものを残しました。
- 3つの審判が選んだ論者の役と、推した案
- Jevのラベルごとの確率と、自信の値
- 審判ごとの時間とトークン数
測ったのは、Aと一致する割合、時間、トークン量です。人が見て筋がよいと思う論との一致は、まだ測っていません。
最初の数字:案で比べると、ほぼ一致に見えた
最初は、JevとClaudeが同じ案を推す論者を選んだかで比べました。案で比べると、Bは99回中95回(96%)、Cは96回で一致しました。
時間は、Jevが1回0.2〜0.3秒、Claudeの審判が3.7〜4.1秒です。99回の平均では、239ミリ秒と3,883ミリ秒で、約16倍の差でした。
トークンは、1回あたりJevが約2,100、Claudeの審判が約2,370で、同じくらいです。数え方は違い、Claudeは入力・出力・キャッシュの合計、Jevは入力だけです。採用の基準は「トークンが目に見えて減るなら」でしたが、減ったのは時間で、トークンではありませんでした。
訂正:論者で比べると、約60%だった
比べ方が甘かったのです。審判が選ぶのは論者で、案ではありません。3人が同じ案を推していれば、どの論者を選んでも「同じ案」になります。
その回が、99回中70回ありました。この70回は、案で比べると必ず一致します。
同じ論者を選んだかで比べ直すと、Bは99回中59回(約60%)、Cは70回でした。案が分かれた29回だけを見ると、案の一致は25回、論者の一致は18回です。案の一致が高く見えたのは、案が分かれない回が多かったからです。
自信の値で振り分けても効かなかった
Jevは、選んだ答えに自信の値を付けます。自信が低い票だけClaudeに回せば、一致が上がるはずです。回した票は、一致とみなして数えました。
- しきい値0.25:99回中29回を回して、全体の一致は75回
- しきい値0.5:71回(約72%)を回して、全体の一致は88回(約89%)
発信先の議題では、自信が0.25未満の票が20回中6回ありました。案の食い違いは20回で1回だけで、その6回の中にありました。この議題だけ見ると、自信で拾えそうに見えます。
ところが、99回全体では、論者が一致した票と食い違った票の自信の平均は、0.408と0.360でした。ほとんど変わりません。自信の値では、食い違いを見分けられません。 案で数えると0.5で100%になり、効いているように見えてしまいます。
分かったこと
Jevは、票を数える(どの案が何回勝ったか)には使えます。しかし、一番筋のよい論を選んでまとめに使う役は、Claudeが要ります。論者をくじの割り当てに直したあと(次の記事で書きます)のClaudeの審判10回では、Jevと同じ論者は6回でした。10回だけなので、傾向とは言いません。
冒頭の「確率の根拠がわからない」という疑いには、こう答えます。根拠は今もわかりません。ただ、何と比べるかを決めれば、Jevの数字がどれだけ合うかは確かめられます。案で比べれば99回中95回(96%)、論者で比べれば99回中59回(約60%)でした。
次の記事
次の記事では、ディベートの仕組みを、作った順に書きます。
付記:Jevと、Orcaの仕組み(/orchestrate)の違い
Jevと、Orcaの仕組みは、役割がまったく違います。混同しやすいので、付記します。
- Jevは、判断だけをする。 状況と選択肢を送ると、どれが確からしいかを返します。仕事は実行しません。ファイルも書きません。
- Orcaは、仕事を実行する場所です。 複数のAIエージェントを、タブに並べて動かせるアプリです。親のエージェントが子を立ち上げ、仕事を渡し、報告を受け取ります。
- /orchestrateは、そのOrcaを使う手順書です。 仕事をどう分けるか、レビューを何人でどう回すか、やり直しを何回までにするかを決めています。
言い換えると、Orcaは「誰がどこで仕事をするか」を受け持ち、Jevは「どれを選ぶか」を受け持ちます。このディベートでは、論者はClaudeで、審判だけをJevにしました。Orcaは使っていません。
Orcaを使う仕事(/orchestrate)では、Jevは必須ではありません。レビュー前のチェックに使うときだけ、Jevを呼びます。


