ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-05-08上級

AIエージェントの「自己批評」アーキテクチャ — Antigravityで信頼できる出力を生む4つの内省パターン

Antigravity上でAIエージェントに自己批評ループを組み込むための4つの設計パターンを、停止条件・信頼度評価・コスト管理を含めて実装コード付きで解説します。

antigravity435agents90self-critiquereflectionproduction59

プレミアム記事

ある夜、自作のリリースノート生成エージェントを動かしていて、出力を3回ともそのままコピペしないまま捨てたことがありました。間違いではないのです。ただ、何かが「足りない」。読み返すと、最初の段落だけが妙に他人事のような、Webから拾ってきたような文体になっています。エージェントは正しく動いていて、それでも私はその出力を信じきれませんでした。

このとき気づいたのは、私が欲しかったのは「もう一度生成し直す機能」ではなく、「自分の出力を一度疑ってから提出するエージェント」だったということです。LLMがワンショットで出した最初の答えは、ある種の独白に近い。一方、人間の熟練した書き手は、一度書いた原稿を必ず読み返します。読み返した瞬間に文体が変わり、根拠が補強され、不要な部分が削られる。この「読み返し」を構造として持たないエージェントは、いくらモデルを強くしても、ある一線以上の品質には届かないように感じています。

ここではAntigravity 上で稼働させているエージェントに自己批評ループ(self-critique / reflection)を組み込むための4つの設計パターンを、実装コード・停止条件・コスト制御まで含めて整理します。Reflexion 系の研究を踏襲しつつ、個人開発の小規模プロジェクトでも壊れない形に落とし込んだものです。

なぜ「もう一度生成」では足りないのか

最も素朴な品質改善策は、温度を下げて再サンプリングすることです。temperature=0.2 で再生成して、複数候補から最良を選ぶ。これで一定の改善は得られます。

ただ、再サンプリングが対処できるのは「揺らぎ」だけです。モデルがそもそも誤った前提に立っていたり、要件の一部を読み飛ばしていたりする場合、何度サンプルを取っても同じ盲点を踏みます。「3回振って3回とも違和感のある出力が出てきた」というのは、ノイズではなく構造的な見落としのサインです。

自己批評ループが扱おうとしているのはここから先で、つまり「出力そのもの」ではなく「出力が要件をどう取りこぼしているか」を1段抽象化して評価し、次のサンプルへフィードバックを戻す設計です。

公式ドキュメントには「複数の Sub-agent を立てて検証フェーズを別工程にする」とだけ書かれていることが多いのですが、実際に運用してみると、この「分けるか、一体化するか」「何をもって停止と判定するか」の判断こそが、エージェントの品質を決める一番の勘所でした。

パターン1: Critic-Generator 分離型

最も基本となる構成です。生成役(Generator)と批評役(Critic)を別のプロンプトに分離し、Critic の指摘が「合格」になるまで Generator がリトライします。

# self_critique_loop.py
from google import genai
from pydantic import BaseModel
from typing import Literal
 
client = genai.Client()
 
class CriticVerdict(BaseModel):
    """Critic の構造化出力。verdict と issues を分離することで Generator が次に何をすべきか明確になる"""
    verdict: Literal["approve", "revise"]
    confidence: float  # 0.0 - 1.0
    issues: list[str]  # revise の場合の具体的指摘
 
GENERATOR_PROMPT = """あなたはリリースノートの執筆者です。
変更内容: {changes}
過去の指摘: {feedback}
 
過去の指摘がある場合は、それを最優先で反映して書き直してください。"""
 
CRITIC_PROMPT = """あなたは技術編集者です。以下のリリースノート草稿が
公開して問題ない品質か判定してください。
 
草稿:
{draft}
 
要件:
- 利用者目線で「自分にどう影響するか」が分かる
- マーケティング過剰な形容詞がない
- 既知の制約・回避策が漏れていない
 
verdict が revise の場合、issues に具体的な書き直し方針を 1-3 件挙げてください。"""
 
def self_critique(changes: str, max_iterations: int = 3) -> tuple[str, list[str]]:
    feedback: list[str] = []
    history: list[str] = []
 
    for i in range(max_iterations):
        # 1. Generator が草稿を出す
        gen_resp = client.models.generate_content(
            model="gemini-2.5-pro",
            contents=GENERATOR_PROMPT.format(
                changes=changes,
                feedback="\n".join(feedback) if feedback else "(なし)",
            ),
        )
        draft = gen_resp.text
        history.append(draft)
 
        # 2. Critic が判定する
        critic_resp = client.models.generate_content(
            model="gemini-2.5-pro",
            contents=CRITIC_PROMPT.format(draft=draft),
            config={"response_mime_type": "application/json",
                    "response_schema": CriticVerdict},
        )
        verdict: CriticVerdict = critic_resp.parsed
 
        if verdict.verdict == "approve" and verdict.confidence >= 0.8:
            return draft, history
 
        feedback = verdict.issues
 
    # 上限到達 — 最終草稿を返す(呼び出し側で人間レビューに回す想定)
    return history[-1], history

max_iterations を 3 に設定している点が大事で、これは経験則ですが、4 回以上回しても多くのケースで品質はサチります。サチる前にコストだけが線形に増えていくので、停止条件は早めに置いた方が結局健全です。

max_iterations を上げれば品質も上がる」と最初は私も思っていたのですが、実測してみると逆で、上限を 5 や 7 にすると Critic の指摘自体が暴走し始めることが何度かありました。「もう少し丁寧に」「読みやすさをさらに」と Critic が無限に注文を付け続け、Generator はそれを真に受けて文体が痩せていく。最終的にはリリースノートとは思えない、無味乾燥な文章が出てきます。これは私自身が原稿を書きすぎて疲れたときに陥る状態とそっくりで、「批評にも疲労がある」という感覚を持つようになりました。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
「エージェントの最初の出力に確信が持てず毎回手で確認していた」状態から、自己批評ループで品質を仕組みとして担保できるようになる
単純なリトライではなく、判断根拠と信頼度を持つ4つの内省パターンを実装コードごと自分のプロジェクトに適用できる
内省の暴走によるコスト爆発を避けるため、停止条件・信頼度しきい値・予算管理の設計判断を習得し、本番運用に耐える設計に仕立て直せる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Agents & Manager2026-07-05
エージェント開発スタックの『既知の正常』を1枚のロックファイルで守る — 可動部が同時に動く時代の変更予算設計
IDEビルド・CLI・モデル・依存が同時に動くと、回帰の原因が特定できなくなります。既知の正常を1枚のロックファイルに固定し、一度に動かす軸を絞る変更予算の設計を、実装コードと運用ログで整理しました。
Agents & Manager2026-05-29
Antigravity 長時間実行エージェントの監視設計 — watchdog と段階的リカバリ
AdMob 収益最適化を 8 週間バックグラウンドエージェントに任せて見えた、長時間タスクが静かに停止する 3 つの故障モード。watchdog タイマーと段階的リカバリの実装メモを残します。
Agents & Manager2026-05-27
Antigravity Agent の Record & Replay — 失敗を3分で再現する本番運用パターン
Antigravity の自律エージェントが本番で失敗した瞬間を、後からオフラインで決定的に再生する Record & Replay の設計と実装。Dolice Labs 4 サイトを並行運用してきた経験から、ストレージ設計・PII マスク・ハーネスのコードまで具体的に解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →