サムネのQAを別エージェントに分けたら、再生成ループが止まった
サムネ生成エージェント `thumbnailer` を作って運用していたら、不可解な現象が起きた。
同じ題材で何度生成しても、似たような失敗作が出続けることがあった。文字が描かれていない、立ち絵が混入している、文字化けしている。生成 → 失敗 → 再生成 → 同じ失敗、を5回くらい繰り返してから、人間が介入してプロンプトを書き直す、という運用。
問題は、`thumbnailer` 自身が「自分の出力をチェック」する責務を持っていたこと。生成して、自分で OK/NG を判定して、NG なら再生成する。
生成ロジックと判定ロジックが同じエージェントの中にあると、判定が甘くなる。「自分が作ったものを自分で評価する」のは、人間でも難しい。
これは、サムネ QA を別エージェント `thumb-qa` に分離して、再生成ループを止めた話だ。

「生成」と「判定」を同じエージェントに持たせるとどうなるか
`thumbnailer` 単体運用の時の挙動を観察した。
ひとつ。生成したサムネが「文字描画ゼロ」でも、thumbnailer は「OK」と判定する。「テキストが小さくて文字が崩れている」を「アーティスティック」と解釈する。
ふたつ。立ち絵が画面の半分を占めていても、「キャラブランディング」と解釈する。実際は他チャンネルとの差別化が崩れる。
みっつ。色数が 5 色以上あっても、「色彩豊か」と解釈する。実際は視覚的にうるさい。
要するに、thumbnailer は「自分の出力を肯定的に解釈するバイアス」がかかっていた。これは AI が悪いのではなく、生成と評価の責務を同じ Agent に持たせる設計が悪い。
人間でも、「自分が作った作品の欠点を客観的に指摘する」のは苦手。AI でも同じ。

thumb-qa エージェントを別 spawn する
`.claude/agents/thumb-qa.md` という新エージェントを作った。役割を 1 つに絞る:「生成済みのサムネを Vision で見て、合否判定する」。
thumb-qa は thumbnailer から完全に独立。
ひとつ。spawn のタイミングは「サムネ生成直後」。
ふたつ。入力は生成された PNG のみ。プロンプトや生成元情報は見ない(=先入観なし)。
みっつ。出力は PASS / FAIL の判定 + 各項目のチェック結果。
よん。FAIL があれば、thumb-qa から指示を返して thumbnailer に再生成を依頼。
「先入観なしで、出来上がりだけ見る」のが、判定の客観性を担保する。
人間のレビュアーが「コードを書いた人と別の人」が良いのと同じ。AI でも、生成と評価は分離する。

F1〜F8 のチェック項目
thumb-qa の判定ロジックを、8 項目に明文化した。
F1:文字描画されているか(ゼロは BLOCK)
F2:文字数(8〜18 字推奨、3-7 字 FAIL、19+ WARN)
F3:立ち絵が混入していないか(右下小サイズ以外で混入は FAIL)
F4:色数 3 色以内
F5:可読性(文字サイズ、コントラスト)
F6:他動画のテンプレ流用(ベースラインが似すぎていないか)
F7:視覚的不協和(色の組み合わせが目に刺さる)
F8:文字化け(豆腐文字「□」が出ていないか)
最終決定された FAIL/WARN 種別:
F1〜F5:FAIL(再生成必須)
F6〜F8:WARN(人間判断)
「機械的に客観基準で弾けるもの」だけを FAIL にして、グレーゾーンは WARN で人間に判断を仰ぐ。

再生成ループの最小化
thumb-qa の判定後、FAIL があれば thumbnailer に再生成を依頼する。ただし、ここで重要なのが「再生成ループの最大回数」を決めることだった。
旧ループ(thumbnailer 単体時):
生成 → 自己判定甘く OK
結果として品質低いサムネが採用される
新ループ(thumb-qa 分離後):
生成 → thumb-qa が FAIL → 再生成
最大 3 回まで。3 回連続 FAIL なら人間にエスカレーション
最大回数を決めることで、無限ループを防ぐ。3 回 FAIL すると、プロンプト自体に問題がある可能性が高い。人間がプロンプトを見直す。
for attempt in range(3):
img = generate_thumbnail(prompt)
qa_result = thumb_qa(img)
if qa_result.passes:
return img
# 3回 FAIL → 人間エスカレーション
escalate_to_human(prompt, qa_result.reasons)「気合で何度でも再生成」ではなく「決まった回数で人間判断に投げる」設計が、自動化の暴走を防ぐ。

採用は「PASS のみ」厳守
最後の運用ルール:thumb-qa が PASS していないサムネは、絶対にアップロードしない。
これを徹底するために、`qa_upload_preflight.py`(post-025)に「thumb-qa の result.json が PASS で記録されているか」のチェックを足した。記録がない、あるいは FAIL のままだと、アップロードがブロックされる。
「人間が見て『まあいいか』で採用」を機械的に禁止する。客観基準で PASS していなければ、絶対に世に出ない。
これで、サムネの品質下限が機械的に保証される。生成ロジックや人間の判断ミスがあっても、QA ゲートで物理的に止まる。

数字の刷新
| 項目 | Before(thumbnailer単体) | After(thumb-qa 分離) |
|---|---|---|
| サムネ採用前の品質チェック | thumbnailer の自己判定 | thumb-qa による独立判定 |
| 1サムネあたりの再生成回数 | 5回以上(品質低めで採用) | 平均1.5回(PASS まで) |
| 文字描画なしサムネの混入 | 月数件発生 | ゼロ(F1 で BLOCK) |
| 「これでいいか…」の妥協採用 | 発生 | 機械的に不可能(preflight) |
| 人間エスカレーション頻度 | 不明(自分で気づくしかない) | 3回FAIL時のみ自動通知 |
学んだこと
ふたつだけ書く。
ひとつ。「生成」と「判定」は別エージェントに分離する。
1つのエージェントが両方を担うと、自分の出力を肯定的に解釈するバイアスがかかる。生成は生成専用、判定は判定専用、責務を分けると客観性が出る。これは AI に限らず、コードレビュー、品質管理、組織設計でも共通の原則。「セルフチェック」は、思っているほど機能しない。
ふたつ。再生成ループには「最大回数」を必ず設ける。
「PASS するまで再生成」を無条件に繰り返すと、無限ループや時間消費が発生する。「3 回 FAIL したら人間にエスカレーション」のように上限を切ると、AI 自動化と人間判断のバランスが取れる。AI は「気合」で解決しない、設計で抜け道を作る。
副次効果もあった。thumb-qa を分離した結果、サムネ生成の改善ループが回りやすくなった。「F1 が連続して FAIL する」「F4 が WARN ばかり」のような統計が取れて、プロンプトのどこに弱点があるかが分かる。生成と判定が分離していると、判定側のデータが「生成側の改善材料」になる。フィードバックループが、構造的に成り立つ。
次回予告
次回は、大きな仕様変更を本番に直接入れて、3回壊した話を書きます。prototyper エージェントの誕生秘話です。
設計テンプレをプレゼントします
20体のAIエージェントを組むときに、どう役割分担を設計したか。それをテンプレ化したPDFを用意しています。実際に自分が使っている定義の抜粋とフォーマットが入っているので、そのまま明日から自分のプロジェクトに使えます。

リンク先: https://note.com/claudecodevideo
公式LINEに登録してくれた方にお送りします。
法人のご相談はこちら
自社のYouTubeチャンネルを自動化したい、AIで動画運用代行を頼みたい、というご相談は、別途お受けしています。

リンク先: https://forms.gle/SkDkkZi7hMFJUF9w7
