ブログ一覧

AWS の判定モデル Strands Decider 2B はコードレビューのバグ探しに使えない

Strands Decider 2B に PR の差分を渡してバグのありそうな変更を当てさせたところ、既定の設定のままでは 4,096 トークンを超えた差分の後ろをエラーを出さずに捨てていて、点の高い変更を選んでも無作為に選ぶより当たりませんでした。設定(max_length)を上げると、点の高い上位 2割の当たりは 11.4% から 41.8% と 4 倍近くになり、Claude Sonnet 5.5 も上回りました。ただしこの伸びは、変更が 202 か所ある 1 本の大きな PR の変更をまとめて高く付けた結果で、その PR を除くと Clef と Sonnet 5.5 より当たりませんでした。変更ごとにバグを当てる用途には、設定を上げてもまだ使えません。

Strands Decider 2B は、AWS の Strands Agents のチームが 2026-10-01 に公開した 20億パラメータの判定モデルです。判定モデルは文章を生成せず、問いの答えの確率だけを返します。重みが Hugging Face で公開されていて、手元の CPU か GPU で動かせます。

試したのは、私が運用している Slack のボット(TypeScript)のリポジトリです。このリポジトリにはマージした後に直したバグが修正のコミットとして残っていて、その行を正解にしました。比べる相手は、前の日に測った Cloudflare の判定モデル Clef(Workers AI の API で使えます)と Claude Sonnet 5.5 です。

既定の設定では長い差分の後ろが読まれず、無作為より当たらなかった

マージ済みの PR に push のたびに出た差分 55回分(同じ PR でも push ごとに 1 回と数える)について、毎回その差分の全体(変更の前後 10行の文脈付き)を渡し、その中の変更のまとまり(追加・変更された行のひと続き)を 1 つずつ指して「この範囲の変更に、マージする前に直すべき問題がありますか?」と聞き、「はい」の確率を点にしました。Strands Decider 2B は渡された文章を 1 回だけ読み、その上で複数の問いにまとめて答える作りなので、この形にしています。Clef と Sonnet 5.5 にも前の日に同じ形で渡し、Sonnet 5.5 には「はい」の確率を数字で答えさせました。

既定の設定で読める長さは 4,096 トークンで、差分と問いを合わせてこれを超えると差分の後ろが切られます。エラーも警告も出ず、点はふつうに返ってきました。55回分のうち 20回分が超えていて、変更のまとまり 400個のうち 221個が読まれていませんでした。正解を含む 73個のうち 55個も、その読まれない側にありました。

点の高い上位 2割(79個)のうち正解を含む物は 9個(11.4%)で、無作為に選んだ場合の 18.2% を下回りました。差分の先頭に近い変更ほど点が高く、変更の番号と点の順位相関は −0.76 でした。

たとえば Slack のメッセージの中で 2つのボタンに同じ ID を付けていた所があります。Slack がメッセージを受け付けないエラーになり後で直したバグですが、差分の読まれない側にあり、400個中 244位でした。

4,096 は設定値で、上げると当たりは 4 倍近くになった

4,096 はライブラリの設定 max_length の値で、土台の言語モデルは 262,144 トークン(約 26万)まで読めます。作った側はソースのコメントに、自分たちの評価では 3,072 から 4,096 に増やしても点が変わらなかったと書いています。

max_length を最長の差分(約 2万4千トークン)が丸ごと入る 24,576 に上げ、同じ 55回分・同じ問い・同じ正解で測り直しました。4,096 に収まる回の点は、上げても変わりませんでした。

  • 上位 2割の当たり: 既定 11.4% → 上げた後 41.8%(33個) / Clef 21.5% / Sonnet 5.5 29.1%
  • AUC: 既定 0.378 → 上げた後 0.707 / Clef 0.559 / Sonnet 5.5 0.580

差分の先頭ほど点が高い偏りも消えました。

上げた分だけ重くなり、4 コアの CPU で 2万トークン台の差分は 1 回 6〜8分かかって、メモリは最大 12.5GB 使いました。

伸びの中身は変更の多い 1 本の PR

55回分のうち 5回分は同じ 1 本の大きな PR で、変更のまとまり 400個のうち 202個と、正解 73個のうち 55個をこの PR が持っていました。上げた後の点では、この PR の変更がまとめて 0.58〜0.68 と高く付いていました。差分の長さ(トークン数)をそのまま点にしても AUC は 0.642 になり、長い差分ほど高く付けるだけで数字の多くが出ます。

この PR を除いた残り(変更のまとまり 198個、正解 18個)の AUC は次のとおりでした。

  • Strands Decider 2B: 0.534
  • Clef: 0.645
  • Sonnet 5.5: 0.707

この PR の中だけで比べると Strands Decider 2B 0.732、Clef 0.498、Sonnet 5.5 0.585 で、Strands Decider 2B が上でした。ただし正解のバグを含む PR は全体で 6 本しかないので、この差は根拠にしていません。

測った範囲で言えること

このリポジトリの 55回分の差分では、既定の設定のままだと長い差分の後ろが黙って切られたので、使うなら max_length を上げてからになります。上げた後も、大きい PR を除くと Clef と Sonnet 5.5 より当たらず、変更ごとにバグを当てる用途にはまだ使えませんでした。

関連

参考リンク

この記事をシェア