Andrew Ng の Agentic AI 講座 第2回

Andrew Ng 教授による Agentic AI 講座の第2回

リフレクション(Reflection)デザインパターン

タスクの出力を改善するためのリフレクション

リフレクションを使うと、人間が自分の草稿を振り返って推敲するのと同じように、LLM が自分自身の出力を改善できます。

例:

  • メールを書く → バージョン1(v1)を作る
  • リフレクションする → 不明瞭な表現、誤字、署名の抜けを見つける
  • 修正する → バージョン2(v2)を作る

LLM も同じループをたどれます:

  1. v1 を生成する(メール、コードなど)
  2. v1 を別のプロンプトに渡す
  3. リフレクションして改善し、v2 を作る

各ステップを異なるモデルが担当できます:

  • 生成 → 創造的なモデル、あるいは直接的なモデル
  • リフレクション → 推論モデル、あるいは分析的なモデル

外部からのフィードバックは効果を高めます:

  • 例:コードを実行する → エラーを取得する → 結果をフィードバックする → バグを修正する

重要なポイント

  • リフレクションは、控えめながら安定した性能向上をもたらす
  • 外部の情報はリフレクションのプロセスを強化する
  • リフレクション ≠ 完璧。しかし、明確さ、正確さ、完全さを改善する

なぜ直接生成だけではだめなのか?

ゼロショットプロンプティング = 例を示さない1ステップの生成。

例:

  • “Write an essay about black holes.”
  • “Write a Python function for compound interest.”

リフレクション vs 直接生成:

  • リフレクションは、多様なタスクにおいてゼロショットをしばしば上回る。
  • 研究により、リフレクションは GPT-3.5 や GPT-4 などのモデル全般で成功率を高めることが示されている。

リフレクションが役立つ場面

  • 構造化データの生成(HTML、JSON)
  • 複数ステップの手順(例:お茶の淹れ方)
  • 創造的な生成(ドメイン名、ブランド名)

リフレクションプロンプトの例

  • メールのトーン、事実、明確さをチェックする
  • ドメイン名が発音しやすく、ネガティブな意味を持たないかを評価する

プロンプトを書くコツ

  • “review”、“reflect”、“check”、“verify” のような動詞を使う
  • 明確な基準(トーン、事実の正確さ、構造)を指定する
  • 優れたオープンソース実装のプロンプトを研究する

グラフ生成ワークフロー

リフレクションは視覚的な出力も改善します。

ワークフローの例:

  1. グラフのコード(Python)を生成する → 積み上げ棒グラフを作る(v1)
  2. コードと生成された画像の両方をマルチモーダル LLM に渡す
  3. 視覚的にリフレクションする → より良いグラフを提案する(例:グループ化した棒グラフ)
  4. 改善した可視化を生成する(v2)

効果的なリフレクションプロンプト

  • 明確な役割を割り当てる(「専門のデータアナリスト」)
  • コンテキストを含める:コード、データ、画像
  • 基準を定義する:読みやすさ、明確さ、完全さ

モデルの選択

  • 生成:GPT-4o、GPT-5 など
  • リフレクション:推論モデル、あるいは視覚モデル

リフレクションの効果を評価する

リフレクションはレイテンシを増やしますが、多くの場合、正確さを改善します。残す価値があるかどうかは必ずテストしてください。

例:データベースクエリの評価

  1. LLM が SQL を書く → リフレクションなしで実行する
  2. LLM が SQL を書く → リフレクションして書き直す → もう一度実行する
  3. 正解(ground truth)の答えと正確さを比較する

結果の例:

  • リフレクションなし → 87% 正解
  • リフレクションあり → 95% 正解

評価方法

  • 客観的なタスク: 自動テストを使う(例:SQL の結果)
  • 主観的なタスク: ルーブリックを伴う LLM-as-judge を使う

ルーブリックに基づく評価

  • ペアワイズ比較のバイアスを避ける
  • 一貫した評価のために二値(0/1)スコアリングを使う
  • 基準:明確なタイトル、適切なラベル、正しいグラフの種類など

なぜこれが重要なのか

  • プロンプトの最適化が可能になる
  • 再現可能なベンチマークが得られる
  • 改善をデータ駆動に保てる

外部フィードバックの活用

新しい情報を伴うリフレクションは、以前のコンテキストだけを使うリフレクションを上回ります。

性能曲線:

  • ゼロショット → すぐに頭打ちになる
  • リフレクション → 中程度の向上
  • リフレクション + 外部フィードバック → 大きな改善

外部フィードバックの例

  • コードを実行する → 実行時エラーを取得する → フィードバックする
  • 禁止用語を検出する → 検出結果をフィードバックする
  • ファクトチェックのためのウェブ検索 → 検証済みの情報を与える
  • 文字数の検証 → 長さの制限を守らせる

デザインパターン

  1. 生成する → 出力を作る
  2. 外部フィードバックを集める → 新しいデータ
  3. フィードバックを使ってリフレクションする → 改善された出力

リフレクションはシステムレベルのループです:

  • LLM が現実から学ぶ
  • 開発者が測定して調整する
  • システムが継続的に改善される

まとめ

リフレクションデザインパターン:

  • 人間の推敲を模倣する
  • テキスト、コード、画像にわたって機能する
  • 明確な基準や外部フィードバックに導かれると品質が向上する

基本原則 あらゆる生成システムに、構造化されたフィードバックループを追加する。