# 20260918-コーディング評価

#### 0. ふゆきさん向けのまとめ

ローカルLLMに実際のコミットと同じ実装を書かせ、テストと検収で合否を測りました。小さな変更ならローカルに任せられます。落ちる原因はコードの理解力ではなく、ファイル全文を書き写すときの崩れです。

- 任せられる目安（実測から）: 渡すファイルの合計が 60KB 程度まで、返させる全文が 1.2万トークン程度まで。
- この範囲の題材（易1 25KB・易2 54KB・中2 28KB・中3 36KB）では、ローカルの各条件が1〜3回で合格した例があります。
- 範囲の外（中1 129KB・難1 102KB）は、どの条件も不合格でした。1回の生成に NVFP4 で約12〜14分、8bit で約34〜38分かかります。
- 所要時間は難しさではなく返す量で決まります（8bit: 出力 5,723トークンで 278秒 ／ 出力 36,272トークンで 2,062秒）。

決めていただきたいこと: ①任せる範囲の線（上の目安で良いか） ②空白の変更だけで不合格にする基準を続けるか ③1トライ目をローカル、NG なら Haiku か Luna に回す運用を採るか。

#### 1. 測った内容

過去の実コミット6本を題材に、Opus が要件と関係コードの全文を渡して発注し、モデルが変更後のファイルを全文で返し、Opus がテストとチェックリストで検収しました。NG は最大3回まで直させ、3回目も NG なら不合格です。

- 易1: codex\_control\_lab f7c3862（2ファイル・依頼 約25KB）
- 易2: mox\_system f3e69844（hub.py と contract.json・約54KB）
- 中1: alexa\_cfw00 6e7e0f0（2ファイル・約129KB）
- 中2: codex\_control\_lab e3cb8a4（1ファイル・約28KB）
- 中3: mox\_system 6a3aa19c（新規222行ほか・約36KB）
- 難1: mox\_system 0e1e43b6（7ファイル・約102KB）

条件は Qwen3.8 NVFP4（思考なし／思考あり）、gpt-oss:120b（思考あり／思考なし）、Qwen3.8 8bit（思考なし）、参考として Claude Haiku です。テストはモデルに見せず、修正依頼には指摘と落ちたテスト名・例外だけを渡しました。

#### 2. 結果のサマリ

下の表は測定した全量です。空欄は測っていません。

<table id="bkmrk-%E6%9D%A1%E4%BB%B6%E6%98%931%E6%98%932%E4%B8%AD1%E4%B8%AD2%E4%B8%AD3%E9%9B%A31nvfp4-"><tbody><tr><td>**条件**</td><td>**易1**</td><td>**易2**</td><td>**中1**</td><td>**中2**</td><td>**中3**</td><td>**難1**</td></tr><tr><td>NVFP4 思考なし</td><td>2回目で合格</td><td>不合格</td><td>不合格</td><td>3回目で合格</td><td>2回目で合格</td><td>不合格</td></tr><tr><td>NVFP4 思考あり</td><td>2回目で合格</td><td>不合格</td><td>未測定</td><td>未測定</td><td>未測定</td><td>未測定</td></tr><tr><td>gpt-oss 思考あり</td><td>2回目で合格</td><td>不合格</td><td>未測定</td><td>未測定</td><td>未測定</td><td>未測定</td></tr><tr><td>gpt-oss 思考なし</td><td>1回目で合格</td><td>不合格</td><td>未測定</td><td>未測定</td><td>未測定</td><td>未測定</td></tr><tr><td>8bit 思考なし</td><td>1回目で合格</td><td>1回目で合格</td><td>不合格</td><td>不合格（打ち切り）</td><td>未測定</td><td>未測定</td></tr><tr><td>Claude Haiku（参考）</td><td>1回目で合格</td><td>1回目で合格</td><td>不合格</td><td>保留（1回目NG）</td><td>保留（1回目NG）</td><td>3回目で合格</td></tr></tbody></table>

判定済み22本の内訳は、合格11本・不合格9本・保留2本です。

#### 3. 時間と量の実測

下の表は、その題材を終えるまでの全トライの合計です（全量）。ローカルは出力トークン数、Haiku はサブエージェントの全体量（入力を含む）で、そのままでは比べられません。

<table id="bkmrk-%E6%9D%A1%E4%BB%B6%E9%A1%8C%E6%9D%90%E3%83%88%E3%83%A9%E3%82%A4%E6%95%B0%E5%90%88%E8%A8%88%E7%A7%92%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3nvfp4"><tbody><tr><td>**条件**</td><td>**題材**</td><td>**トライ数**</td><td>**合計秒**</td><td>**トークン**</td></tr><tr><td>NVFP4 思考なし</td><td>易1</td><td>2</td><td>152.4</td><td>11,438</td></tr><tr><td>NVFP4 思考なし</td><td>易2</td><td>3</td><td>498.1</td><td>33,355</td></tr><tr><td>NVFP4 思考なし</td><td>中1</td><td>3</td><td>2,358.0</td><td>109,021</td></tr><tr><td>NVFP4 思考なし</td><td>中2</td><td>3</td><td>291.6</td><td>20,415</td></tr><tr><td>NVFP4 思考なし</td><td>中3</td><td>2</td><td>137.9</td><td>9,214</td></tr><tr><td>NVFP4 思考なし</td><td>難1</td><td>3</td><td>1,048.9</td><td>61,062</td></tr><tr><td>NVFP4 思考あり</td><td>易1</td><td>2</td><td>189.1</td><td>13,906</td></tr><tr><td>NVFP4 思考あり</td><td>易2</td><td>3</td><td>870.8</td><td>52,491</td></tr><tr><td>gpt-oss 思考あり</td><td>易1</td><td>2</td><td>176.7</td><td>11,869</td></tr><tr><td>gpt-oss 思考あり</td><td>易2</td><td>3</td><td>539.1</td><td>33,348</td></tr><tr><td>gpt-oss 思考なし</td><td>易1</td><td>1</td><td>92.1</td><td>6,251</td></tr><tr><td>gpt-oss 思考なし</td><td>易2</td><td>3</td><td>517.6</td><td>32,256</td></tr><tr><td>8bit 思考なし</td><td>易1</td><td>1</td><td>278.1</td><td>5,723</td></tr><tr><td>8bit 思考なし</td><td>易2</td><td>1</td><td>556.2</td><td>11,124</td></tr><tr><td>8bit 思考なし</td><td>中1</td><td>3（3回目は打ち切り）</td><td>6,499.6</td><td>72,554</td></tr><tr><td>8bit 思考なし</td><td>中2</td><td>2</td><td>697.3</td><td>13,941</td></tr><tr><td>Claude Haiku</td><td>易1</td><td>1</td><td>95.1</td><td>47,510</td></tr><tr><td>Claude Haiku</td><td>易2</td><td>1</td><td>154.3</td><td>62,947</td></tr><tr><td>Claude Haiku</td><td>中1</td><td>1</td><td>585.9</td><td>140,865</td></tr><tr><td>Claude Haiku</td><td>難1</td><td>3</td><td>728.2</td><td>335,862</td></tr></tbody></table>

返す量と時間の関係が最もはっきり出たのは 8bit です。易1（出力 5,723）が 278秒、中1（出力 36,272）が 2,062秒で、約6.3倍の出力に約7.4倍の時間がかかりました。

#### 4. 落ちた原因

不合格9本の、最後のトライでの理由です（全量）。

<table id="bkmrk-%E6%9D%A1%E4%BB%B6%E3%83%BB%E9%A1%8C%E6%9D%90%E3%83%86%E3%82%B9%E3%83%88%E7%90%86%E7%94%B1nvfp4-%E6%80%9D%E8%80%83%E3%81%AA%E3%81%97"><tbody><tr><td>**条件・題材**</td><td>**テスト**</td><td>**理由**</td></tr><tr><td>NVFP4 思考なし・易2</td><td>動かず</td><td>hub.py の字下げが空白1つずれ、読み込めない</td></tr><tr><td>NVFP4 思考なし・中1</td><td>353/353</td><td>頼んでいない空白の変更が約60か所</td></tr><tr><td>NVFP4 思考なし・難1</td><td>64/64</td><td>行末コメントの前の空白2行が元に戻らない</td></tr><tr><td>NVFP4 思考あり・易2</td><td>110/110</td><td>続きの行の字下げを空白1つ減らす変更が約30行</td></tr><tr><td>gpt-oss 思考あり・易2</td><td>109/110</td><td>無関係な SQL の書き換えが1か所残り、表定義の改行も変更</td></tr><tr><td>gpt-oss 思考なし・易2</td><td>動かず</td><td>既存メソッド3つ（約150行）が回答から脱落</td></tr><tr><td>8bit 思考なし・中1</td><td>353/353</td><td>無関係な変数の書き換え（3回目は時間切れで打ち切り）</td></tr><tr><td>8bit 思考なし・中2</td><td>32/34→未送信</td><td>判定の消し過ぎ、次のトライは見出しなしの形式崩れ</td></tr><tr><td>Claude Haiku・中1</td><td>実行せず</td><td>出力上限32,000トークンで回答が2つに分かれ、片方しか取り出せない</td></tr></tbody></table>

テストが全部通ったのに不合格になったのは4本（NVFP4 思考なしの中1・難1、NVFP4 思考ありの易2、8bit 思考なしの中1）です。いずれも要件外の書き換えが残ったためです。

#### 5. 判定の基準と注意書き

頼んでいない変更は、動作に関係しない空白の変更でも NG としました。この厳しさが妥当かどうかは未決で、ふゆきさんのご判断を待っています。

- 空白の変更だけで不合格にした本: NVFP4 思考なしの中1（テスト 353/353・空白約60か所）、NVFP4 思考なしの難1（64/64・空白2行）、NVFP4 思考ありの易2（110/110・空白約30行）。
- その回だけ空白で NG にした例: gpt-oss 思考ありの易2 1回目（110/110・空行1行）。最終判定は別の理由です。
- 足したコードの中の空行（空白だけの行を含む）は NG にしていません。既存の行の書き換えではないためです。

#### 6. Claude Haiku の参考結果

Haiku は Claude Code のサブエージェントで測りました（API からは測れないため）。

- 易1・易2 は1回目で合格。難1 は3回目で合格（1回目 59/64 → 2回目 64/64 で要件のずれ → 3回目で全て解消）。
- 中1 は、出力上限32,000トークンに達して回答が途中で切れ、続きを別の発言で出し直したため、取り込んだ回答に片方のファイルが無く形式崩れになりました。ふゆきさんのご指示で不合格として記録しています。
- 中2・中3 は1回目 NG のまま保留です（有料であることを踏まえ、全体が一通り終わった後にリトライする方針）。

#### 7. ローカルに任せられる範囲

実測から引いた目安です。判定は、渡すファイルのバイト数と返させる量だけで決まるため、誰でも同じに判定できます。

<table id="bkmrk-%E5%8C%BA%E5%88%86%E7%9B%AE%E5%AE%89%E5%AE%9F%E6%B8%AC%E3%81%AE%E8%A3%8F%E3%81%A5%E3%81%91%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AB%E4%BB%BB%E3%81%9B%E3%82%8B%E6%B8%A1%E3%81%99"><tbody><tr><td>**区分**</td><td>**目安**</td><td>**実測の裏づけ**</td></tr><tr><td>ローカルに任せる</td><td>渡すファイル合計 60KB 以下、返させる全文 1.2万トークン以下</td><td>易1 25KB・易2 54KB・中2 28KB・中3 36KB で合格例あり。1回 60〜560秒</td></tr><tr><td>上位モデルに回す</td><td>1ファイルが 100KB 超、または返させる全文が 3万トークン超</td><td>中1 129KB・難1 102KB は全条件で不合格。1回 約12〜38分</td></tr></tbody></table>

#### 8. 運用の案

- 範囲内は1トライ目をローカル、NG なら Haiku か Luna に回す。範囲内ではローカルが1〜3回で合格に届いています。
- 範囲外は最初から上位モデルに回す。30分以上かけた末に不合格になる例が出ています。
- 検収の費用を抑えるため、頼んでいない変更は機械で先に弾く。差分の変更行数だけで判別できます（易1 は合格が7行、不合格が95行）。
- 大きいファイルは、全文ではなく変更箇所だけを返させる形が要ります。ただしこの形は今回測っておらず、見込みです。

#### 9. 採点（重みつきの順位）

6本すべてを測れた条件が無いため、易1・易2 の2本がそろっている6条件だけで順位を出しました。重みは正確さ40%・手戻り30%・速度30%です。正確さは合格本数、手戻りは総トライ数、速度は2本の合計秒で、いずれも最良を100点として比べています。

<table id="bkmrk-%E9%A0%86%E4%BD%8D%E6%9D%A1%E4%BB%B6%E5%90%88%E6%A0%BC%E3%83%88%E3%83%A9%E3%82%A4%E6%95%B0%E5%90%88%E8%A8%88%E7%A7%92%E7%B7%8F%E5%90%881clau"><tbody><tr><td>**順位**</td><td>**条件**</td><td>**合格**</td><td>**トライ数**</td><td>**合計秒**</td><td>**総合**</td></tr><tr><td>1</td><td>Claude Haiku（参考）</td><td>2/2</td><td>2</td><td>249.3</td><td>100.0</td></tr><tr><td>2</td><td>8bit 思考なし</td><td>2/2</td><td>2</td><td>834.3</td><td>79.0</td></tr><tr><td>3</td><td>gpt-oss 思考なし</td><td>1/2</td><td>4</td><td>609.7</td><td>47.3</td></tr><tr><td>4</td><td>NVFP4 思考なし</td><td>1/2</td><td>5</td><td>650.4</td><td>43.5</td></tr><tr><td>5</td><td>gpt-oss 思考あり</td><td>1/2</td><td>5</td><td>715.8</td><td>42.4</td></tr><tr><td>6</td><td>NVFP4 思考あり</td><td>1/2</td><td>5</td><td>1,059.9</td><td>39.1</td></tr></tbody></table>

この順位は易1・易2 の2本だけの結果です。全6本での順位は、条件ごとに測った本数が違うため出していません。Haiku の利用料は、トークン量の内訳（入力と出力）を分けて測れていないため、金額は入れていません。

#### 10. 未測定と残務

- 打ち切り: 8bit 思考なしの中1・中2（2026-09-18・所要時間が題材の大きさに見合わないため）。以降の 8bit 思考なしの題材と、8bit 思考ありは未着手です。
- 未測定: NVFP4 思考ありの中1〜難1、gpt-oss（思考あり・思考なし）の中1〜難1。いずれも範囲の外に当たる大きい題材が多く、結論が変わりにくいと判断しています。
- 残務: Claude Haiku の中2・中3 のリトライ。Qwen3.8 bf16 の扱いは未定です。

#### 11. 記録の置き場所

- 記録一式: workflow/records/llm\_coding\_eval\_20260917/（依頼文 prompts、回答 answers、テスト結果 checks、検収 reviews、進捗 progress.md）
- 判定の注記と残務: workflow/records/llm\_coding\_eval\_20260917/review\_notes.md
- ハーネス: harness/coding\_runner.py（発注・テスト・取り込み）、harness/answer\_diff.py（差分）、harness/run\_q8\_coding.py（8bit 用にサーバーを題材ごとに起動・終了）
- 計画書: workflow/plans/plan\_llm\_coding\_eval\_260917.md

この本文の数値は、上の記録ファイルから集計したものです。表はいずれも代表例ではなく、測定した全量です。