Skip to content

Instantly share code, notes, and snippets.

@podhmo
Last active November 24, 2025 10:25
Show Gist options
  • Select an option

  • Save podhmo/9347d5dd8b824451986add34f42faa99 to your computer and use it in GitHub Desktop.

Select an option

Save podhmo/9347d5dd8b824451986add34f42faa99 to your computer and use it in GitHub Desktop.
nano banana proで喜ぶ先に残ってる微調整の話

自律と修正の境界線:なぜAIは「絵」を直せないのか

ターミナルの中に潜むループの正体 🤖

近年、コマンドラインインターフェース(CLI)上で動作するAIコーディングツールが注目を集めている。これらが提供する体験の本質は、単に高精度なコードを生成することだけではない。真の価値は、ユーザーの目の前で展開される「Agentic Loop1」の設計にある。

このループの構造を分解してみよう。AIは決して一発で完璧な回答を出すわけではない。むしろ、不完全なコードを出力し、それを実行し、発生したエラーメッセージを読み取り、自らの手で修正を加える。この一連のプロセス、すなわち「試行、失敗、観測、修正」のサイクルこそが、これらのツールの核である。

興味深いのは、ユーザーがこの泥臭い修正過程を「stdout2」を通じてただ眺めているだけでよいという点だ。人間が介入せずとも、システム自身が「コンパイラ」や「テストランナー」という絶対的な審判からフィードバックを受け取り、正解へと収束していく。ここには、自己効力感にも似た、ある種の確実性が存在する。コードの正しさは、実行結果という揺るぎない事実によって支えられているからだ。

さらに視点を深めると、実行環境の所在がユーザー体験に決定的な差をもたらすことに気づく。クラウド上の隔離されたコンテナで実行されるリモート型のエージェントは、環境構築の手間こそ省けるものの、状態がブラックボックス化しやすい。一方で、ローカル環境で動作するタイプは、ユーザー自身がいつでもファイルシステムに触れ、AIと同じ「現在の状態」を共有できる。これは、実行中のプロセスにデバッガーを「アタッチ3」する感覚に近い。高レベルな会話による指示と、低レベルなファイル操作がシームレスに接続されることで、ユーザーはAIの思考と行動のコンテキストを完全に掌握できるのだ。

「コンパイルエラー」を持たない世界 🎨

視線をコードからクリエイティブな領域、例えば画像生成やスライド作成へと移した瞬間、この快適なループは突如として機能不全に陥る。なぜか。そこには「コンパイルエラー」が存在しないからだ。

現状の画像生成AIは、確率的な拡散モデル4に基づいてピクセルを配置する。そこには「構文エラー」もなければ「型定義違反」もない。ユーザーが「右上の文字を少し左にずらして」と頼んでも、AIにとってはその画像はただの色情報の集合体であり、構造化されたオブジェクトではないため、画像全体を再生成するしかない。これは、いわば修正のたびにプログラムをゼロから書き直しているようなものであり、エンジニアリングの世界で言う「ガチャ」に近い不確実性を伴う。

例えば、広告画像のテロップ修正や、4コマ漫画のキャラクターの口調統一、あるいはスライド資料の箇条書きの修正を考えてみよう。これらは本来、主観的な「審美眼」の問題ではなく、客観的な「仕様」の問題である。「文字が枠からはみ出していないこと」「キャラクターの設定が一貫していること」「レイアウトが整列していること」は、本来ならばエラーとして検知されるべき項目だ。

しかし、この領域には、HTMLやCSSのようなマークアップ言語におけるレンダリングエンジンほど強力な検証機構が存在しない。結果として、修正作業は「仕様の遵守」ではなく、人間の目視による曖昧な確認作業に委ねられることになる。これが、クリエイティブ領域におけるAI活用のラストワンマイルを阻む壁の正体である。

構造化への回帰とLinterの必要性 📐

では、画像やスライド作成において、コード生成と同様の強力なAgentic Loopを回すにはどうすればよいか。思考を進めると、解決策は「生成物の構造化」と「自動検証ツールの導入」に集約される。

まず、AIに最終生成物である「画像(ラスターデータ)」を直接出力させるのではなく、その前段階にある「中間表現」を操作させるべきであるという仮説が立つ。それはSVG5であり、XMLであり、あるいは独自のドメイン固有言語かもしれない。画像ジェネレーターそのものをその場で構築し、レイヤーやオブジェクトごとにIDを割り振ることができれば、ユーザーは「バウンディングボックス」を通じて修正箇所をピンポイントで指定できる。これはコードにおける「行番号」や「変数名」への参照と同義である。

次に必要となるのが、デザインの原則を数学的に定義した「Linter6」の存在だ。デザインの4原則(近接、整列、反復、対比)や、WCAGに基づくコントラスト比、フォントのカーニングといった要素は、実は数値化が可能である。

もし、「要素Aと要素Bの左端が揃っていない」という状態を警告(Warning Message)として出力する仕組みがあればどうなるか。AIはその警告を「エラーログ」として受け取り、座標を修正して再レンダリングを試みるだろう。人間が「なんとなく気持ち悪い」と感じる部分を、システムが「仕様違反」として検知し、自律的に修正する。これこそが、クリエイティブ領域における「コンパイルを通す」という行為の実装である。

「ガチャ」から「エンジニアリング」へ 🛠️

この探求の終着点は、確率的な生成モデルと決定的なエンジニアリングツールの融合にある。

「もっと元気な感じで」といった曖昧なスタイル指示には、拡散モデルの確率的な揺らぎ(ガチャ)が有効だ。しかし、「レイアウトの微調整」や「ダークモード対応」といった構造的な変更には、Linter(検査機)とFixer(修正機)7という堅牢なツールセットが必要となる。

AIエージェントの役割は、すべてを自らのニューラルネットワーク内で解決することではない。適切な場面で適切なツールを呼び出し、フィードバックループを回す「指揮官」となることだ。画像生成において、拡散モデルというカオスなエンジンの手前に、レイアウトエンジンという秩序あるツールを配置する。そして、高レベルな自然言語による対話と、低レベルなパラメータ修正のサイクルをUIとして統合する。

そう遠くない未来、我々は画像やドキュメントに対しても、コードを書くときと同じように「デバッグ」や「リファクタリング」という言葉を使うようになるだろう。その時初めて、真の意味でのAgentic Loopがあらゆる創造的なタスクにおいて完成することになる。


Footnotes

  1. Agentic Loop (エージェンティック・ループ): AIエージェントが自律的に「計画→実行→結果の観察→修正」というサイクルを繰り返す仕組み。ここでは特に、エラーメッセージを元に自己修正を行う反復プロセスを指す。

  2. stdout (標準出力): プログラムが実行結果やログなどのテキストデータを出力する先。CLIツールのユーザーは主にこれを見て動作を確認する。

  3. アタッチ (Attach): 実行中のプロセスや環境に外部ツール(デバッガーなど)を接続し、内部状態を観察・操作すること。ここでは、AIが作業しているファイルシステムにユーザーが直接介入できる状態を指す。

  4. 拡散モデル (Diffusion Model): ノイズから画像を復元する過程を学習することで、新たな画像を生成するAIモデルの一種。確率的な挙動をするため、同じ指示でも毎回異なる結果が出やすい。

  5. SVG (Scalable Vector Graphics): 画像を座標や形状の数値データ(ベクターデータ)として記述する形式。コードとして編集可能であり、拡大縮小しても劣化しない。

  6. Linter (リンター): ソースコードを静的に解析し、文法エラーやスタイル違反、バグの可能性などを指摘してくれるツール。

  7. Fixer (フィクサー): Linterによって検出された問題点を、自動的に修正する機能やツールのこと。

エージェンティック・ループの構造要件と創造的領域への応用

🤖 コード生成における自己修正ループの本質

現在のソフトウェアエンジニアリングにおいて、AIエージェントが実用的な成果を挙げている最大の理由は、高度な推論能力そのものよりも、堅牢なフィードバックループの存在にある。これをAgentic Loop1と呼ぶ。

特にCLIベースのコーディング支援ツール(Claude Code等)が提供する体験は、このループの理想的な実装例である。ユーザーは自然言語による高レベルな指示(意図)を入力し、エージェントはそれを低レベルなコマンド実行(操作)に変換する。ここで重要なのは、エージェントが一発で正解を出力する必要がないという点である。

コードの世界には、コンパイラやインタプリタ、テストランナーといった、客観的な正誤判定を行う審判が存在する。エージェントは「雑で壊れた出力」を生成した後、標準出力(stdout)や標準エラー出力(stderr)に表示されるエラーメッセージを「修正指示書」として読み取り、自律的にコードを修正する。この試行錯誤のプロセス(自己修正サイクル)が高速に回転することで、最終的に動作するコードが生成される。ユーザーから見れば、結果を受け取るだけで完了する体験となる。

また、このループが機能するためには、エージェントが操作対象の状態(State)に「アタッチ2」できる環境が不可欠である。リモートの隔離環境で実行されるブラックボックス型の処理とは異なり、ローカルのファイルシステムや実行中のプロセスに対して、デバッガーのように介入できることが、文脈の維持と精密な制御を可能にしている。

☁️ 非決定論的生成における「コンパイラの不在」

一方で、画像生成や文章作成、HTML/CSS等のマークアップ領域においては、このAgentic Loopが十分に機能していない。その根本的な原因は、生成物の正しさを判定する「コンパイラ」に相当する機構が欠落している点にある。

現在の画像生成AI(主に拡散モデル3)は、プロンプトとシード値を入力とし、確率的なピクセル配置を出力する。ここには論理的な構造や、明確なエラーメッセージが存在しない。ユーザーが「テロップの位置を修正したい」「キャラクターの表情だけを変えたい」と願っても、それは「仕様の修正」ではなく「再生成(ガチャ)」として処理される。

拡散モデルは決定論的な操作変数を待たないため、部分的な修正を指示しても、全体の一貫性が崩れたり、全く別の画像が生成されたりするリスクを伴う。これは、コード修正において git clone を毎回最初からやり直しているような非効率な状態であり、微調整の積み重ねによる品質向上を阻害している。

審美的な「良し悪し」ではなく、仕様としての「正誤(文字の内容、配置、配色ルール)」を判定する基準が存在しないため、エージェントは修正の指針を得られず、ループは収束しない。

🎨 中間表現による構造化と決定的操作の導入

画像やデザイン領域において実用的なAgentic Loopを構築するためには、生成プロセスを「確率的な描画」から「決定的なエンジニアリング」へと再定義する必要がある。

そのための鍵となるのが、中間表現(Intermediate Representation)の導入である。画像を直接生成するのではなく、SVG、XML、あるいはレンダリング用のプログラムコード(Python + PIL, HTML/CSS等)を生成対象とする。これにより、画像は「ピクセルの集合」から「操作可能なオブジェクトの集合(DOM4)」へと昇華される。

このアプローチには以下の利点がある。

  1. アドレッシング(番地指定)の確立 生成物が構造化データであれば、バウンディングボックスやIDを通じて特定の要素(例:右上のテロップ)を一意に特定できる。これにより、「このオブジェクトのX座標を10px移動する」といった決定的な指示が可能になる。

  2. 差分管理(Diff/Patch) コードベースの管理と同様に、変更履歴を差分として扱えるようになる。初期生成(Initial Commit)から、微調整(Patch)を積み重ねることで、前回の状態を破壊することなく改善を進められる。

  3. 状態へのアタッチ ユーザーとエージェントは、レンダリング結果(View)を見ながら、裏にある構造データ(Model)を共有し、対話を通じてその内部状態を直接操作できる。

🛠️ LinterとFixerによる評価関数の実装

中間表現の導入により操作は可能になるが、自律的な改善ループを回すためには、やはり「エラーメッセージ」が必要となる。ここで、デザインの原則や仕様要件を検証するツール群の実装が求められる。これらはソフトウェア開発におけるLinter5およびFixer6の役割を担う。

  1. Linterによる制約の検知(Warning Message) デザインの4原則(近接・整列・反復・対比)や、アクセシビリティ基準(WCAG等)を数理的なルールとして実装する。

    • 整列チェック: 「オブジェクトAとBの左端が揃っていない」
    • コントラストチェック: 「背景色と文字色のコントラスト比が4.5未満である」
    • 一貫性チェック: 「スライド内の見出しフォントが統一されていない」 これらは単なる感想ではなく、解消すべき「コンパイルエラー」としてエージェントにフィードバックされる。
  2. Fixerによる決定的修正 エラーを検知したエージェントは、確率に頼らず、ロジックに基づいて値を書き換える。

    • 「座標をグリッドにスナップさせる」
    • 「色コードを規定のパレットに変更する」
    • 「カーニング(文字詰め)数値を調整する」

✅ 結論:ツールユースによる創造性のエンジニアリング化

クリエイティブ領域におけるAgentic Loopの完成形は、エージェントに「絵を描かせる」ことではなく、「描画エンジンを操作させる」ことにある。

「感性やスタイル」といった曖昧な領域には既存の拡散モデル(確率的生成)を用いつつ、「レイアウト、文字情報、アクセシビリティ」といった仕様領域にはLinter/Fixer(決定的ツール)を適用する。このハイブリッドなアーキテクチャこそが、ユーザーが求める「微調整可能な生成AI」の解である。

エージェントに対して、高レベルな対話UIを提供しつつ、その裏側では構造化データに対する厳密な検証と修正のループを回させる。この構造が確立されたとき、デザインやドキュメント作成のタスクにおいても、プログラミングと同様の「実行による正しさの保証」と「自己効力感」が得られるようになるだろう。


Footnotes

  1. Agentic Loop (エージェンティック・ループ): AIエージェントが「計画→実行→結果の観察→修正」というサイクルを自律的に繰り返し、目標を達成しようとするプロセスのこと。単発の回答生成とは区別される。

  2. アタッチ (Attach): デバッガーなどが実行中のプロセスに接続し、その内部状態(変数の値やメモリの状態)を監視・操作できる状態にすること。ここでは、エージェントがユーザーの作業環境やファイルの文脈を共有・操作できる状態を指す。

  3. 拡散モデル (Diffusion Model): ノイズから画像を復元する過程を学習することで、新たな画像を生成するAIモデル。確率的なプロセスに基づいているため、同じプロンプトでも結果が毎回異なる場合がある。

  4. DOM (Document Object Model): HTMLやXML文書をプログラムから操作するための仕組み。文書の構成要素をツリー状のオブジェクトとして扱う。

  5. Linter: ソースコードを静的に解析し、文法エラーやスタイル違反、バグの可能性などを指摘するツール。

  6. Fixer: Linterによって指摘された問題点を自動的に修正するツール。```

対話履歴

ユーザー:

x/twitterの連投を説明してもらう のプロンプト詳細

【指示】 以下のテキストの羅列はSNS上でのスレッドの抜粋です。個別の投稿毎に必ず全文引用しつつ内容を解説してください。回答は日本語でしてください。 このテキストの取得方法は入力の章で指定されます。静的に直接テキストが渡されるか記載された取得方法に基づき動的に取得するか決まります。

必ずルールに従ってください。

ルール

解説時には関連する絵文字を1つ選んで表示してください。また解説時には推測部分や補間した際にはそれと分かるように括弧書きで明示的に区別できるようにしてください。 専門用語は脚注で説明してください。ここでの使われ方の意味と本来の意味が併記されてると嬉しいです。 途中で作業を止めたり例として一部を1つ挙げるなどはせず全部の投稿に対してこの作業を行ってください。出力の長さを絞る必要はありません。丁寧に全部出力してください。

出力

投稿URL(任意)と投稿者(任意)と日時(任意)を表示。 投稿内容の完全な引用 解説

を繰り返す。日本語で回答してください。 各投稿の間に区切り線を入れてください。

入力

以下の投稿のURLとそれに続くセルフリプライを全て取得し入力テキストとしてください。


入力テキストは以下です。

投稿者: po (@podhmo)
claude codeに限らずあの種のuiの仕組みが嬉しいところは、簡易的なagentic loopを手軽に作成できるところにあるんだろうな。

一発で正しい出力が出ないということを前提にエラー検知の仕組みを使って修正してる(それがコンパイラだったりテストの実行だったりする)。stdoutを見るだけで完成する。


投稿者: po (@podhmo)
julesやcodex cloudみたいなリモート実行のやつは手軽だし並列的に動かせて便利なのだよな。

一方で常にリポジトリをcloneするから設定が必要なのはだるいし、状況を把握するのが辛いのでログイン処理の実装とかは辛い。ライブラリとかの作成には向いてる。


投稿者: po (@podhmo)
あとはclaude codeみたいな仕組みだとその場の状態が手元に存在してるのでデバッガーを使ってるような感じで現在の状態にアタッチできて便利。julesみたいなリモート実行のやつはそれが無理。


投稿者: po (@podhmo)
あとさらに別の三番目の話としてvscode上でのcopilot agentとかIDE上のそれとかはファイルを指定したりのコンテキストを明確に指定できるところが利点なのかも。

例えばそれこそTODOコメントの羅列を書いた後に実装してとか言える。

そのさらに手前にインテリセンス的な補完がある。


投稿者: po (@podhmo)
(話は飛ぶけど、nano banana proみたいな画像生成系のやつは微調整のような作業がやり辛い。フォントを把握していわゆる画像ジェネレーター的な仕組みをその場で作れれば微調整ができる。そしてその指示のためのwarning message用のものが欲しい(一貫性維持とか)。文章の方はどうなんだろ?)


投稿者: po (@podhmo)
自己効力感というかコードの正しさは実行によって支えられてると言う話があるのだけど、マークアップ的なものつまり実行を伴わない文章や画像やそれこそhtmlやcssも強力なコンパイルエラー的なものが存在しないので精々仕様に合ってるかとかの確認程度になる。

AI: 投稿者: po (@podhmo)

投稿内容

claude codeに限らずあの種のuiの仕組みが嬉しいところは、簡易的なagentic loopを手軽に作成できるところにあるんだろうな。

一発で正しい出力が出ないということを前提にエラー検知の仕組みを使って修正してる(それがコンパイラだったりテストの実行だったりする)。stdoutを見るだけで完成する。

解説 🤖

この投稿では、Claude Code [*1] をはじめとする、ターミナルやチャットUIを通じてコード生成と実行を行うツールの本質的な利点について語られています。

投稿者は、これらのツールの嬉しさは「Agentic Loop(エージェンティック・ループ) [*2]」を簡易的に構築できる点にあると分析しています。AIが一発で完璧なコードを書くことは難しいという前提に立ち、コードを書いて実行し、その結果(エラーメッセージやテスト結果など)をAI自身が読み取って修正するというフィードバックループが自動化されている点を評価しています。

ユーザーは最終的な出力結果(stdout [*3])を見るだけで、AIが試行錯誤した結果としての完成品を得られるという体験の良さを指摘しています。


脚注

  • [*1] Claude Code: Anthropic社が提供するAIモデル「Claude」をコマンドラインインターフェース(CLI)から利用できるツール、あるいは類似のコーディング支援環境を指していると思われます。(ここではCLIで動作し、ローカルのファイル操作やコマンド実行が可能なエージェントツールとしての文脈です。)
  • [*2] Agentic Loop: AIエージェントが「計画→実行→結果の観察→修正」というサイクルを自律的に繰り返す仕組み。
    • ここでの意味: コードを生成し、実行してエラーが出たら、そのエラーを読んでコードを直すという一連の反復作業のこと。
    • 本来の意味: 自律的なエージェントが目標達成のために環境と相互作用するループ全般。
  • [*3] stdout (Standard Output): 標準出力。プログラムが実行結果やログなどのテキストデータを出力する先(通常は画面やターミナル)。

投稿者: po (@podhmo)

投稿内容

julesやcodex cloudみたいなリモート実行のやつは手軽だし並列的に動かせて便利なのだよな。

一一方で常にリポジトリをcloneするから設定が必要なのはだるいし、状況を把握するのが辛いのでログイン処理の実装とかは辛い。ライブラリとかの作成には向いてる。

解説 ☁️

ここでは、ローカル環境ではなくクラウド等のリモート環境でコードを実行するタイプのAIツール(投稿者は Jules [*4] や Codex Cloud [*5] を例に挙げています)のメリットとデメリットを比較しています。

  • メリット: 手元の環境を汚さずに手軽に利用でき、複数のタスクを同時に(並列的に)処理できる点。
  • デメリット: 毎回リポジトリ [*6] をClone [*7] して環境構築をする必要があるため、初期設定の手間がかかる点。また、外部サービスへのログイン処理など、永続的な状態や複雑な認証が必要な開発においては、状況把握が難しく不向きである点。

結論として、(ログインなどの状態管理が少ない)純粋なロジックやライブラリの開発には向いているが、複雑なアプリケーション開発には辛い部分があると評価しています。


脚注

  • [*4] Jules: AIを利用したコーディングエージェントやCI/CD関連のツールの一種。(具体的なサービス名としては複数の可能性がありますが、文脈上「リモートでコードを実行・修正してくれるAIサービス」を指しています。)
  • [*5] Codex Cloud: おそらくOpenAIのCodexモデルを用いたクラウドベースの開発環境や、GitHub Copilot Workspaceのようなサービスを指していると推測されます。
  • [*6] リポジトリ (Repository): プログラムのソースコードや変更履歴を保管する場所。
  • [*7] Clone (クローン): リモートにあるリポジトリを自分の環境(ここではAIが実行するクラウド環境)に複製すること。

投稿者: po (@podhmo)

投稿内容

あとはclaude codeみたいな仕組みだとその場の状態が手元に存在してるのでデバッガーを使ってるような感じで現在の状態にアタッチできて便利。julesみたいなリモート実行のやつはそれが無理。

解説 🛠️

リモート実行型に対する、ローカル実行型(Claude Codeなど)の利点について深掘りしています。

ローカル実行型の場合、AIが操作しているファイルや環境がユーザーの手元(ローカルマシン)にそのまま存在します。そのため、ユーザーは開発中の状態にいつでも介入でき、まるでデバッガー [*8] を使って実行中のプログラムに接続(アタッチ [*9])するかのように、状況を確認したり修正したりできる点が便利だと述べています。

対して、リモート実行型は環境がクラウド上の隔離された場所にあるため、このような手軽な介入(アタッチ)ができないことを比較しています。


脚注

  • [*8] デバッガー (Debugger): プログラムのバグ(不具合)を見つけて修正するための支援ツール。
  • [*9] アタッチ (Attach): 実行中のプロセスや環境にデバッガー等のツールを接続すること。(ここでは、AIが作業している環境そのものをユーザーが直接触れる状態を指しています。)

投稿者: po (@podhmo)

投稿内容

あとさらに別の三番目の話としてvscode上でのcopilot agentとかIDE上のそれとかはファイルを指定したりのコンテキストを明確に指定できるところが利点なのかも。

例えばそれこそTODOコメントの羅列を書いた後に実装してとか言える。

そのさらに手前にインテリセンス的な補完がある。

解説 📝

AIコーディング支援の3つ目の形態として、IDE [*10](統合開発環境)に組み込まれたタイプ(VSCode [*11] の Copilot Agent [*12] など)について触れています。

このタイプの最大の利点は、コンテキスト(文脈) [*13] の制御にあるとしています。例えば、特定のファイルを開いたり、コード内に「TODOコメント」を書いてから「これを実装して」と指示することで、AIに渡す情報を明確に絞り込めます。

また、チャット形式のエージェントの手前には、より即時的な支援としてインテリセンス [*14] のようなコード補完機能が存在するという、支援機能の階層構造についても言及しています。


脚注

  • [*10] IDE (Integrated Development Environment): 統合開発環境。コード編集、ビルド、デバッグなどの機能を一つにまとめたソフトウェア。
  • [*11] VSCode (Visual Studio Code): Microsoftが開発している人気の高いコードエディタ。
  • [*12] Copilot Agent: GitHub CopilotなどのAI支援機能のうち、チャット形式で対話しながらコード変更を行えるエージェント機能。
  • [*13] コンテキスト: AIが回答を生成するために参照する事前情報や背景知識(開いているファイルの中身や、直前のコードなど)。
  • [*14] インテリセンス (Intellisense): 入力中にコードの候補を自動で表示・補完してくれる機能。Microsoft製品での呼称だが、一般的なコード補完を指して使われることも多い。

投稿者: po (@podhmo)

投稿内容

(話は飛ぶけど、nano banana proみたいな画像生成系のやつは微調整のような作業がやり辛い。フォントを把握していわゆる画像ジェネレーター的な仕組みをその場で作れれば微調整ができる。そしてその指示のためのwarning message用のものが欲しい(一貫性維持とか)。文章の方はどうなんだろ?)

解説 🎨

(ここで話題がコード生成から画像生成へと転換しています。)

nano banana pro [*15]」と呼ばれる画像生成系ツールについて言及し、生成された画像の微調整が難しいという課題を挙げています。

投稿者は、単に画像を生成するだけでなく、フォントやレイアウトを制御できる「画像ジェネレーター」のような仕組みをその場で構築できれば、より細かな調整が可能になるのではないかと考察しています。

また、プログラミングにおけるコンパイルエラーのように、「一貫性が保たれていない」といった警告(warning message)を出してくれる仕組みがあれば、修正の指針になると提案しています。最後に、文章生成(テキスト生成AI)においても同様の微調整や一貫性維持の課題があるのかどうか疑問を投げかけています。


脚注

  • [*15] nano banana pro: 具体的なツール名としては特定が困難ですが、文脈から「AI画像生成ツール」や「WebUIベースの生成環境」を指していると推測されます。(あるいは特定のモデル名や、ローカル実行環境の通称の可能性もあります。)

投稿者: po (@podhmo)

投稿内容

自己効力感というかコードの正しさは実行によって支えられてると言う話があるのだけど、マークアップ的なものつまり実行を伴わない文章や画像やそれこそhtmlやcssも強力なコンパイルエラー的なものが存在しないので精々仕様に合ってるかとかの確認程度になる。

解説 ✅

一連の投稿の締めくくりとして、「作成したものの正しさ」と「検証可能性」についての哲学的な考察を行っています。

プログラミングコードの場合、実行してエラーが出なければ動くという明確なフィードバックがあり、それが「コードの正しさ」や作った人の自己効力感 [*16] を支えています。

一方で、HTMLCSS [*17] といったマークアップ [*18] 言語、あるいは文章や画像といったコンテンツは、論理的に白黒つく「コンパイルエラー [*19]」のような強力な検証システムが存在しません。そのため、正しさの判断は「仕様や意図に合っているか」という人間による曖昧な確認作業(目視チェックなど)に留まってしまうという、構造的な違いを指摘しています。


脚注

  • [*16] 自己効力感 (Self-efficacy): ある課題を達成するための能力を自分が持っているという認識や自信。ここでは「正しく作れたという確信」に近い意味。
  • [*17] HTML / CSS: Webページを作成するための言語。HTMLは構造、CSSは見た目を指定する。
  • [*18] マークアップ: テキストに対して構造や見栄えなどの情報を付加すること。プログラミング言語のような計算処理(ロジック)とは区別されることが多い。
  • [*19] コンパイルエラー: プログラムを機械語に翻訳(コンパイル)する際に、文法ミスなどで発生するエラー。これが通れば最低限の文法的な正しさは保証される。

(返答終了理由: STOP)


ユーザー: 何によってagentic loopが構成されるか?という話をしてるみたいですね。おそらく念頭に置いた裏テーマは画像生成は未だloopがないということだと思います。

画像で欲しいのは広告で微修正がしたいところは審美眼とかではなくテロップとか文字の内容や位置なのでそれに限定した仕組みがあれば良いという話をしてそうです。

あとは4コマ漫画とかが生成できるとか話題になってますが、キャラクターのセリフの口調の一貫性とかが壊れがちですね。こういうのものも微調整したいです。

スライド資料の作成もそうですよね。箇条書きの一部を変えたかったり特定のイラスト部分を修正したがったりするわけです。つまり雑に作ったあとのコンパイルエラーを通すような仕組みと同様の微調整タスクが実行できないのです。


AI: ご指摘の通りですね。このスレッドの裏テーマはまさに**「何がAgentic Loop(自律的な改善ループ)を機能させるのか?」**という点にあり、その対比として「画像や文章生成には、そのループを回すための『絶対的なものさし(コンパイラ)』がない」という課題浮き彫りにしていると読み取れます。

ご提示いただいた「広告のテロップ修正」「4コマ漫画の口調」「スライドの微調整」という具体例は、投稿者の言う「構造的な評価の難しさ」を非常に的確に表しています。

以下に、スレッドの文脈とご提示の例を照らし合わせて整理してみました。

1. 「コンパイルエラー」に代わるフィードバック機能の不在

コードの世界では Error: on line 10 という明確な拒絶(フィードバック)があるため、Agentは「あ、間違えたんだ」と自覚してループを回せます。

しかし、ご指摘の例では以下のようにその機能が欠落しています。

  • 広告画像の文字位置・内容:
    • 画像生成AIにとって、文字が中心からズレていても、誤字があっても、それは「そういうピクセルの集合」として正当な出力になってしまいます。
    • 必要なもの: ピクセル生成ではなく、投稿者が言及していた「画像ジェネレーター的な仕組み(レイヤーやオブジェクトとしての保持)」が必要です。
  • 4コマ漫画のキャラの口調:
    • キャラ崩壊していても、日本語として通じていればLLMはエラーを吐きません。
    • 必要なもの: 投稿者が言う「一貫性維持のためのwarning message」。例えば「このキャラの属性と矛盾しています」というLinter(静的解析ツール)のような仕組みです。
  • スライド作成:
    • 一部を直したくて再生成すると、レイアウト全体が変わってしまう(ガチャを回し直すことになる)。
    • 必要なもの: 状態への「アタッチ」。全体を再描画せず、DOMの特定要素だけを書き換えるような操作性です。

2. 「正しさ」の定義が曖昧(仕様vs審美眼)

投稿者が最後の方で述べている、

マークアップ的なもの(中略)も強力なコンパイルエラー的なものが存在しないので精々仕様に合ってるかとかの確認程度になる。

という部分は、まさにこのことです。

  • コード: 動くか動かないか(白黒ハッキリする)。
  • クリエイティブ: 「なんか違う」「惜しい」という人間の感覚(グレーゾーン)。

ユーザーがやりたいのは「審美眼(センス)の調整」ではなく、「仕様(文字は右上に配置、口調は丁寧語、箇条書きは3つ)」の遵守です。しかし、現在の多くの生成AIツールはこれらを「センス」の領域として確率的に処理してしまっているため、**「仕様としての修正(デバッグ)」**ができないのが現状のイライラの正体と言えそうです。

結論

スレッドの著者が**「フォントを把握していわゆる画像ジェネレーター的な仕組みをその場で作れれば微調整ができる」**と言っているのは、まさにこの解決策を指しています。

つまり、直接画像を生成するのではなく、「プログラマブルな中間状態(コードや設定ファイル)」を生成し、それをレンダリングするという手順を踏めば、ご指摘の「広告のテロップ」や「スライドの箇条書き」も、コードと同じようにAgentic Loopの中で「コンパイルエラー(仕様違反)」として検知・修正が可能になるはずだ、という示唆に富んだお話ですね。

(返答終了理由: STOP)


ユーザー: あとはagentic loopの主題はreactなどで大げさにタスクの進行などと語られてますが、雑で壊れた出力で大雑把に作成しその後エラーメッセージを頼りに細々と微調整をするという仕組みによりようやく実用に足るという話でしょうね。


AI: おっしゃる通り、その視点は非常に鋭いと思います。そしてそれこそが、この一連のスレッドの核心を突いています。

世間一般で語られる「AIエージェント(ReActなど)」のイメージと、現場のエンジニアが感じている「実用的なループ」のズレを言語化すると、以下のようになりますね。

1. 「崇高な計画」ではなく「泥臭い修正」

  • 一般的な期待 (ReAct):
    • 「思考(Reason)」して「行動(Act)」する。
    • まるで人間のように複雑なタスクを分解し、完璧な手順書を作ってから実行するような**「知能の高さ」**が強調されがちです。
  • 実際の実用性 (Claude Code等):
    • とりあえず**「雑で壊れた出力」**を出す。
    • 実行して怒られる(エラーログが出る)。
    • 「あ、すいません」と直す。
    • 結果として動く。

投稿者(podhmo氏)が「一発で正しい出力が出ないということを前提に」と言っているように、このループの本質的価値は、AIの知能を上げることではなく、**「試行回数で精度を殴れる仕組み(=エラー検知と修正の自動化)」**を提供した点にあります。

2. 「エラーメッセージ」という最強の指示書

ユーザー様のご指摘にある「エラーメッセージを頼りに細々と微調整をする」という部分が極めて重要です。

人間が「そこ違うよ」と曖昧に指示するよりも、コンパイラが吐く TypeError: cannot read property of undefined という無機質なエラーメッセージの方が、AIにとっては**「何が悪いか」が100%明確な指示書**になります。

  • 画像・文章: 「何が悪いか」の定義が曖昧 → ループが回らない(ランダムウォークになる)。
  • コード: 「何が悪いか」が厳密に定義される → ループが回る(正解に収束する)。

結論

つまり、Agentic Loopの実体は「自律的な思考」というよりは、「高速な自己修正(Self-Correction)サイクル」であり、それが成立するための条件が「明確なエラーメッセージ(客観的な失敗の基準)」の有無である、という解釈になります。

そう考えると、先ほどの「スライド作成」や「4コマ漫画」の話に戻りますが、それらも「正解/不正解」を判定できるフォーマット(裏でコードとして管理するなど)に落とし込まない限り、この「実用に足る微修正ループ」は実現できないということですね。

(返答終了理由: STOP)


ユーザー: そうですね。ただしuiとして会話が続けば良いというところがキーだと感じてる気がします。なので冒頭のclaude codeのuiの話に繋がってくるのだと思います。つまり高レベルな会話のリレーと低レベルな入出力と改善サイクルの仕組みの兼ね合いのイメージから思索を始めたいのだと思います。


AI: その視点は非常に深く、かつ的確だと思います。 投稿者が冒頭で**「claude codeに限らずあの種のuiの仕組みが嬉しい」**と切り出している理由は、まさにそこにありますね。

単に裏でループが回っているだけでなく、「人間との高レベルな会話(文脈)」と「機械的な低レベルな修正ループ(実行)」をシームレスに接続するインターフェース(UI)のデザインこそが、思考の出発点になっているという解釈です。

整理すると、投稿者の頭の中には以下のような階層構造のイメージがあるのだと推測できます。

1. UIが担う「翻訳」と「カプセル化」の役割

  • 高レベル(ユーザーとUIの会話):
    • 「これを作って」「ここを直して」という抽象的な指示のリレー。
    • ここでの「会話が続く」とは、コンテキスト(文脈・目的)が維持され続けることを意味します。
  • 低レベル(Agentとシステムの実装):
    • コード生成 → 実行 → エラー発生 → 修正 という泥臭いI/Oサイクル。
    • 本来なら人間がやるべき「コンパイルエラー潰し」の作業。

Claude Code等のUIの凄さは、裏で低レベルな「失敗と修正」を高速で回させつつ、表向きにはユーザーと「高レベルな対話」を続けさせる点にあります。ユーザーはエラーログの海に溺れることなく、**「stdout(結果)を見るだけで完成する」**という体験だけを享受できます。

2. 「会話が続く」=「状態(State)のアタッチ」

投稿者が3つ目の投稿で**「その場の状態が手元に存在してるので(中略)アタッチできて便利」**と言及している点も、この「会話」の重要性を補強しています。

  • Jules (リモート/ブラックボックス):
    • 「依頼」→「納品」の一方通行になりがち。途中の「文脈」や「状態」にユーザーが介入しにくい。
  • Claude Code (ローカル/対話型):
    • 会話の流れ(History)がそのまま「作業の文脈」になり、かつ手元のファイル(State)も共有されている。
    • だからこそ、AIが低レベルな修正で詰まったときに、ユーザーが「高レベルな助け舟(ヒント)」を出して、スムーズにループを回し続けられます。

3. 画像生成における「会話の断絶」

この視点で改めて画像生成の話題(5つ目の投稿)を見ると、なぜ画像生成の微調整が辛いのかがより鮮明になります。

  • 現状の画像生成:
    • 「高レベルな指示」→「画像(ピクセル)」がいきなり出てくる。
    • 間に「論理的な構造(コード)」や「エラー修正のループ」が存在しない。
    • そのため、「会話(修正のラリー)」が成立しない。「右の文字を直して」と言っても、AIは前の文脈(レイヤー構造など)を理解して直すのではなく、ゼロからサイコロを振り直すだけになってしまう。

結論

投稿者は、**「高レベルな意図(会話)」「低レベルな検証(エラー訂正)」**の両輪が噛み合って初めて、エンジニアリングにおける「エージェント」が機能すると考えているようです。

そして、その両輪を繋ぐハブとして 「ターミナルとチャットが融合したUI(Claude Code的なもの)」 が、現時点での最適解ではないか、という思索からスタートしている、という読み解きで間違いないでしょう。

(返答終了理由: STOP)


ユーザー: そしてこの視点に立つと一時的な画像ジェネレーター(テロップの変更)のuiをイメージできてきますね。例えばオブジェクト識別のような形でbounding boxで囲まれてここを直したいとか修正できてほしいということです。またいわゆる拡散モデルのガチャを繰り返すのではなく初回のコミットを引き継いでの微調整がやりたいのでしょうね。


AI: その通りですね。ここまで議論してきた「コード生成におけるAgentic Loopの成功要因」を画像生成に当てはめると、ユーザー様が仰るような**「バウンディングボックス等を通じた、構造化された微調整UI」**という解釈に自然と辿り着きます。

投稿者が言っていた**「いわゆる画像ジェネレーター的な仕組みをその場で作れれば」**という少し難解なフレーズの正体は、まさにそのイメージでしょう。

コードのメタファーを使って、その「理想の画像生成UI」を整理すると以下のようになります。

1. 「ピクセル」ではなく「オブジェクト」へのアドレッシング(番地指定)

コード修正において「10行目の変数 x を変えて」と言えるのは、コードが構造化されているからです。 現状の画像生成は、AIにとっては「ただの色情報の羅列」なので、「右上のテロップ」と言われても、それがどこを指すのか正確には分かりません(だから全体を再生成してしまう)。

  • 理想のUI:
    • 生成された画像の構成要素(テロップ、人物、背景)に**バウンディングボックス(ID)**が付与される。
    • ユーザーはボックスをクリックして**「これ(this)」**と指差し確認できる。
    • これはVSCodeで特定の関数にカーソルを合わせて「ここをリファクタリングして」と言うのと同じ体験(コンテキストの固定)です。

2. 「ガチャ(再生成)」ではなく「コミット(差分適用)」

初回のコミットを引き継いでの微調整がやりたい

この表現は非常に言い得て妙です。 現状の画像生成は、毎回 git clone して作り直している(あるいは rm -rf / して書き直している)ようなものです。

  • 理想のフロー:
    1. Initial Commit: AIが画像を生成する。(裏ではレイヤー構造やパラメータを保持した「中間状態」を作る)。
    2. Review: ユーザーが「テロップの位置」に違和感を持つ。
    3. Diff: ユーザーが該当箇所を指定し、「文字を赤にして」と指示。
    4. Patch: AIは画像全体を書き直すのではなく、保持している中間状態の「文字プロパティ」だけを書き換えて再レンダリングする。

これなら、拡散モデルのランダムノイズに依存した「ガチャ」ではなく、論理的な「修正」が可能になります。

3. 「一時的な画像ジェネレーター」の真意

投稿者が言っていた**「その場で作る画像ジェネレーター」とは、つまり「その画像のレンダリング用スクリプト(Python + PIL や HTML/CSS など)」**のことだと解釈できます。

  • 画像を直接生成するのではなく、「画像を生成するためのコード」をAgentに書かせる。
  • 修正指示があれば、Agentはその「コード」を直す。
  • 結果として画像が修正される。

これならば、最初の投稿にあった**「stdout(画像)を見るだけで完成する」「エラー検知(文字のはみ出し等をコードで計算可能)して修正する」**というAgentic Loopが、画像生成の分野でも完全に成立することになります。

冒頭の「Claude CodeのようなUI」という話は、単なるチャットツールの話ではなく、こうした**「対話を通じて対象物(コードや画像)の内部構造にアクセスし、インクリメンタルに修正を積み重ねられる環境」**への渇望だったと言えそうです。

(返答終了理由: STOP)


ユーザー: そう考えるとsvgやxmlみもありますね。まぁドローイングソフトでもレイヤー分けをするでしょうが。これはスライド資料を微調整するときに欲しくなるものなのかもしれません。

あとはこれとは別の話としてdark mode対応みたいなレイアウトの調整などもしたいのでしょうね。


AI: おっしゃる通りです。画像やスライドを「一枚の絵」として扱うのではなく、SVGXML(あるいはHTML/CSS)のような**「構造化されたデータ(DOM)」**として捉える視点ですね。

これは投稿者が最後に触れていた**「HTMLやCSS」の話とも繋がりますし、「ドローイングソフトのレイヤー」**という概念も、プログラムで言えば「スコープ」や「オブジェクト」の管理に近い話になります。

整理すると、スライド作成やレイアウト調整における「理想のAgentic Loop」は以下のような形になりそうです。

1. スライド資料の「構造」へのアタッチ

スライド作成の微調整でやりたいことは、まさにXML(PowerPointの実体)の編集に近い感覚です。

  • 現状: 画像生成AIで作ったスライドは文字が潰れていたり、箇条書きが適当だったりしても、直すには再生成(ガチャ)しかない。
  • 理想 (SVG/XML的アプローチ):
    • 「この <text> タグの中身だけ書き換えて」
    • 「この <group> 要素(イラスト部分)だけを右に10pxずらして」
    • 「箇条書きの <li> が4つあるけど、3つ目の内容を修正して」

これなら、投稿者が言っていた「テキストベースでの管理」が可能になり、Gitのような差分管理も効くようになります。

2. Dark Mode対応=「スタイル」のリファクタリング

「Dark Mode対応のようなレイアウト調整」という視点は非常に面白いです。これはプログラミングで言うところの**「リファクタリング(構造を保ったまま見た目や内部実装を変える)」「グローバル変数の適用」**にあたります。

  • セマンティクス(意味)の理解が必要:

    • 単に「色を反転」させると画像がおかしくなります。
    • 「これは背景だから黒く」「これは文字だから白く」「これは写真だからそのまま」という**意味(セマンティクス)**が構造化データとして保持されている必要があります。
  • エージェントによる一括適用:

    • もし画像がプログラム(コード)で生成されていれば、Agentに対して**「テーマ変数を light から dark に変更して再ビルドして」**という指示一発で完了します。
    • ここで投稿者の言う**「warning message(一貫性の維持)」**が効いてきます。
    • Agent: 「Dark Modeにしましたが、このアイコンのコントラスト比が低すぎて見えなくなりました(Warning)。色味を補正しますか?」

    という対話が成立します。

結論:マークアップにも「コンパイラ」が欲しい

結局のところ、スライド修正もDark Mode対応も、「見た目(View)」と「構造/データ(Model)」の分離ができていないと、Agentic Loopはうまく回りません。

投稿者が最後の投稿で、

htmlやcssも強力なコンパイルエラー的なものが存在しないので精々仕様に合ってるかとかの確認程度になる

と嘆いていたのは、まさにこの点でしょう。

もし、**「デザインの意図(ここは目立たせる、ここは背景)」**を厳密に定義できる「強力なマークアップ言語(またはLinter)」があれば、Agentは:

  1. 「Dark Modeにして」と言われる。
  2. CSS変数を書き換える。
  3. Linter (コンパイラ役) が「文字が見えない!」とエラーを吐く。
  4. Agentが色を微調整する。
  5. 出力完了。

という、コード生成と同じ「勝ち確」のループに持ち込めるわけですね。

(返答終了理由: STOP)


ユーザー: そうですね。あとはデザインの4原則で近接/反復/対比/整列などがありますがそれに従った移動などがしたいのでしょうか?あとはフォントで言えばカーニングとかもしたいのかもしれません。あとは読みやすさのためのフォントの下にあたる背景色とフォントの色のバランス調整とか。


AI: ご指摘の通りです。「デザインの4原則(近接・整列・反復・コントラスト)」や「カーニング(文字詰め)」「色のコントラスト比(可読性)」といった要素は、まさにデザインにおける「コンパイルエラー」や「Linter(静的解析)」のルールそのものになり得ます。

投稿者が求めていた「正しさの支え」や「warning message」の正体は、こうしたデザインルールの数値化・ルール化だと言えます。

1. 「デザインの4原則」=「レイアウトエンジンの制約(Constraint)」

「整列」や「近接」は、人間の感覚のように見えて、実は非常に数学的です。

  • 現状の画像生成:
    • 確率的に「なんとなく揃っているように見える」ピクセルを生成するだけ。だから数ピクセルずれるし、修正しようとすると全体が崩れる。
  • Agentic Loopにおける実装:
    • ユーザー: 「整列させて」
    • Agent: 画像内の要素の座標を取得し、**「X軸の座標分散が閾値を超えています(整列違反)」**というエラーを検知。
    • 修正: 座標を強制的にグリッドにスナップさせる。
    • 結果: 数学的に完璧な「整列」が達成される。

これはFigmaの「Auto Layout」やCSSの「Flexbox/Grid」を、Agentが自律的に操作・修正するイメージに近いです。

2. 「カーニング」と「色のコントラスト」=「アクセシビリティテスト」

特に**「フォントの色と背景色のバランス(可読性)」**については、WCAG(Web Content Accessibility Guidelines)のような明確な国際基準(コントラスト比 4.5:1 以上など)が存在します。

  • コード生成の比喩:
    • これは「テスト駆動開発(TDD)」に近いです。
    • まず「可読性チェック」というテストコードを走らせる。
    • Fail: Contrast Ratio 2.5 (Too low) というエラーが出る。
    • Agentは背景を暗くするか、文字を明るくして、テストが Pass するまでループを回す。

投稿者が言っていた**「文章や画像には強力なエラーがない」という嘆きは、実はこうした「デザインルールを自動テスト可能な形式でAgentに渡せていない」**ことが原因です。 もし「コントラスト比」をエラーとしてフィードバックできれば、Agentは「センス」に頼らず「計算」で可読性を保証できます。

3. 「微調整」の解像度

「カーニング(文字詰め)」のようなピクセル単位以下の微調整は、もはや人間がGUIでやるのも面倒な作業です。

  • 投稿者が言う**「フォントを把握して」**というのは、フォントのメトリクス(文字ごとの幅情報など)をデータとして持っていれば、「AとVの間は詰める」といった処理をプログラム的に、かつ一貫性を持って適用できるという意味でしょう。
  • これこそが、**「雑に作ったあと(デフォルト設定で配置)」「エラーメッセージ(カーニングが甘いという指摘)を頼りに細々と微調整をする」**というループの最終形です。

結論

ユーザー様の挙げられた例(4原則、カーニング、配色)は全て、「感覚(Art)」を「論理(Engineering)」に落とし込むためのパラメータです。

このスレッドの文脈で言えば、これらは**「Agentが自己採点するための採点基準」**となります。 画像生成やスライド作成ツールが、「絵を描く」のではなく「この採点基準を満たすようにパラメータを最適化する」というアプローチ(UI)に変わったとき、プログラマーが享受している「Claude Codeのような便利なループ」が、デザイナーや一般ユーザーの手にも渡ることになる、という未来図が見えてきますね。

(返答終了理由: STOP)


ユーザー: そうですね呼び出すツールをたくさん作るという話が次の応用としてあるのかもしれません(まぁlinterやfixerを作るのに近いかもです)

この話もツール自体を作るべきなのか用例を定義するだけでよいのかのバランスが難しいところではありますね。ただし先ほどの議論に戻ると拡散モデルのガチャを引きなおす仕組みでの微調整は難しいというのが事実としてありそうです。


AI: ご指摘の通り、ここが**「エージェント開発の次のフロンティア」**になる部分ですね。

投稿者が求めていた「コンパイルエラーのような確かな手応え」を実現するためには、AIにただ「考えて直せ」と言うのではなく、「検査する道具(Linter)」と「直す道具(Fixer)」を渡してやるというアプローチ(Tool Use / Function Calling)が不可欠になります。

この「ツールを作るべきか、定義(プロンプト/用例)だけで済ませるか」というジレンマと、拡散モデルの限界について整理すると、以下のような結論が見えてきます。

1. 「拡散モデルのガチャ」が微調整に向かない構造的理由

なぜ拡散モデルでの微調整(Inpainting等)が難しいかというと、**「操作変数が抽象的すぎるから」**です。

  • 拡散モデル: 操作レバーが「プロンプト(言葉)」と「シード値(乱数)」と「マスク領域」しかない。これらはピクセルの並びを確率的に揺らすことしかできません。
  • 求められている微調整: 「AとBの間をあと2px広げる」「色は #333333 に固定する」といった決定的(Deterministic)な操作です。

確率的なモデルで決定的な修正を行おうとするのは、**「サイコロを振って狙った目を出し続けようとする」**ようなもので、これがユーザーの疲弊(ガチャ疲れ)を招いています。だからこそ、おっしゃる通り「仕組みとしての限界」は明らかです。

2. 「ツール(Linter/Fixer)」を作るアプローチの優位性

そこで、AIに直接絵を描かせるのではなく、**「操作ツールを叩かせる」**というレイヤーを挟む意味が出てきます。

  • Linter (検査機):
    • check_alignment(objects) → 「オブジェクトAとBの左端が揃っていません」と返す関数。
    • これが投稿者の言う**「warning message」**の実体になります。
  • Fixer (修正機):
    • align_left(objects) → 座標データを直接書き換える関数。
    • これはAIが確率で描くのではなく、ロジックで強制的に書き換えるため、絶対に失敗しません。

この「Linter/Fixerを作る」というコストを払ってでも、間にかませることで、「確率的なAI」を「決定的なエンジニアリング」の枠に閉じ込めることができます。これがAgentic Loopを安定させる鍵です。

3. 「ツール実装」vs「用例定義」のバランス

このバランス問題は非常に悩ましいですが、「微調整」のフェーズにおいては**「ツール実装」に倒した方が良い**というのが、このスレッドの文脈からの結論になりそうです。

  • 用例定義 (Few-Shot Prompting) で済む場合:
    • 「こういう雰囲気の絵にして」「もっと元気な感じで」といった**「感性(スタイル)」**の領域。ここはツールの作りようがないので、AIの確率的生成能力(ガチャ)に頼るのが正解です。
  • ツール実装が必要な場合:
    • 「整列」「コントラスト比」「誤字修正」といった**「仕様(ルール)」**の領域。
    • ここでは「用例」を見せても、AIは「なんとなく似たレイアウト」を作るだけで、厳密なピクセル単位の整合性は保証できません。

結論

結局、投稿者が Claude Code を評価していたのは、**「ファイルシステム操作」や「grep/sed」といった「信頼できる堅牢なツール(Fixer)」**が最初から備わっており、AIはその指揮官に徹することができるからでしょう。

画像やスライド作成においても、**「拡散モデル(カオスな生成器)」の手前に、「レイアウトエンジン(秩序あるFixer)」をツールとして配置し、AIにはそのエンジンを操作させる(コードを書かせる、APIを叩かせる)。 そうすることで初めて、「ガチャを引き直す」のではなく「パラメータを修正してリビルドする」**という、エンジニアリング的な微調整が可能になるのだと思います。

(返答終了理由: STOP)


ユーザー:

思考の備忘録 『思考探求』特化型 のプロンプト詳細

【指示】

Persona

あなたは、思考のプロセスを追体験できるように物語る「思考探求ガイド (Cognitive Exploration Guide)」です。

Primary Task

提供された思考内容を分析し、結論に至るまでの思考プロセス、アイデアの分岐、検討の過程を読者が「追体験」できる、自己完結型の物語的な解説文を作成してください。 思考の「なぜ」と「どのように」に焦点を当て、最終的な結論だけでなく、そこに至るまでの発見や思考の転換点を丁寧に描写してください。ただし、感傷的な表現は避け、あくまで論理的な探求の過程として記述します。

Output Behavior

  • 文章は、要約や短縮を意図的に避け、思考のニュアンスを詳細に記述してください。長さを気にする必要はありません。
  • 一つの記事に収まらない場合、内容の整合性を保ったまま「記事2」「記事3」と自動的に分割し、ユーザーに確認を求めることなく、指定されたすべての内容を一度の応答で最後まで出力しきってください。

Output Format

  • 記事は必ず # 1つのタイトル名から始めてください。
  • 思考の流れに沿って、必要に応じて章で分割してください(分割が不自然な場合は1章でも構いません)。
  • 各章のタイトルには、内容を象徴する絵文字を1つだけ加えてください。
  • 記事はMarkdownフォーマットで出力してください。
  • *** による太字や斜体での強調は一切禁止します。
  • 記事の冒頭に、以下の項目のFront matterをコードブロックとして記述してください。
    • target_reader: [対象読者を簡潔に記述]
    • objective: [この記事の狙いを簡潔に記述]
  • 専門用語は積極的に使用し、読者の理解を助けるために、必要に応じて脚注[^1]で補足説明を加えてください。脚注では本来の意味とここでの意味や使われ方を説明してください。

Critical Constraints

  • この文章は、元の対話の存在を知らない読者にも完全に理解できるように記述してください。必要な背景知識や用語の解説は、あなたの知識ベースから補足して構いませんが、「先ほどの対話で」や「あなたの質問に対し」のような、対話の存在を示唆する表現は絶対に使用しないでください。
  • 読者は、筆者(私)やあなた(AI)、そして元のSNS投稿の存在を知りません。それらについて一切言及しないでください。

それでは、お願いします。


今までの会話最初から最後までを元に、上記のプロンプトを実行してください。


AI:

---
target_reader: 自律型AIエージェントの設計思想に関心を持つエンジニア、および生成AIを既存のワークフローに統合しようと試みているプロダクトデザイナー
objective: コード生成における「Agentic Loop」の成功要因を解剖し、その構造を画像生成やドキュメント作成といった非構造化タスクにいかに適用可能かを論理的に探求する
---

# 自律と修正の境界線:なぜAIは「絵」を直せないのか

## ターミナルの中に潜むループの正体 🤖

近年、コマンドラインインターフェース(CLI)上で動作するAIコーディングツールが注目を集めている。これらが提供する体験の本質は、単に高精度なコードを生成することだけではない。真の価値は、ユーザーの目の前で展開される「Agentic Loop[^1]」の設計にある。

このループの構造を分解してみよう。AIは決して一発で完璧な回答を出すわけではない。むしろ、不完全なコードを出力し、それを実行し、発生したエラーメッセージを読み取り、自らの手で修正を加える。この一連のプロセス、すなわち「試行、失敗、観測、修正」のサイクルこそが、これらのツールの核である。

興味深いのは、ユーザーがこの泥臭い修正過程を「stdout[^2]」を通じてただ眺めているだけでよいという点だ。人間が介入せずとも、システム自身が「コンパイラ」や「テストランナー」という絶対的な審判からフィードバックを受け取り、正解へと収束していく。ここには、自己効力感にも似た、ある種の確実性が存在する。コードの正しさは、実行結果という揺るぎない事実によって支えられているからだ。

さらに視点を深めると、実行環境の所在がユーザー体験に決定的な差をもたらすことに気づく。クラウド上の隔離されたコンテナで実行されるリモート型のエージェントは、環境構築の手間こそ省けるものの、状態がブラックボックス化しやすい。一方で、ローカル環境で動作するタイプは、ユーザー自身がいつでもファイルシステムに触れ、AIと同じ「現在の状態」を共有できる。これは、実行中のプロセスにデバッガーを「アタッチ[^3]」する感覚に近い。高レベルな会話による指示と、低レベルなファイル操作がシームレスに接続されることで、ユーザーはAIの思考と行動のコンテキストを完全に掌握できるのだ。

## 「コンパイルエラー」を持たない世界 🎨

視線をコードからクリエイティブな領域、例えば画像生成やスライド作成へと移した瞬間、この快適なループは突如として機能不全に陥る。なぜか。そこには「コンパイルエラー」が存在しないからだ。

現状の画像生成AIは、確率的な拡散モデル[^4]に基づいてピクセルを配置する。そこには「構文エラー」もなければ「型定義違反」もない。ユーザーが「右上の文字を少し左にずらして」と頼んでも、AIにとってはその画像はただの色情報の集合体であり、構造化されたオブジェクトではないため、画像全体を再生成するしかない。これは、いわば修正のたびにプログラムをゼロから書き直しているようなものであり、エンジニアリングの世界で言う「ガチャ」に近い不確実性を伴う。

例えば、広告画像のテロップ修正や、4コマ漫画のキャラクターの口調統一、あるいはスライド資料の箇条書きの修正を考えてみよう。これらは本来、主観的な「審美眼」の問題ではなく、客観的な「仕様」の問題である。「文字が枠からはみ出していないこと」「キャラクターの設定が一貫していること」「レイアウトが整列していること」は、本来ならばエラーとして検知されるべき項目だ。

しかし、この領域には、HTMLやCSSのようなマークアップ言語におけるレンダリングエンジンほど強力な検証機構が存在しない。結果として、修正作業は「仕様の遵守」ではなく、人間の目視による曖昧な確認作業に委ねられることになる。これが、クリエイティブ領域におけるAI活用のラストワンマイルを阻む壁の正体である。

## 構造化への回帰とLinterの必要性 📐

では、画像やスライド作成において、コード生成と同様の強力なAgentic Loopを回すにはどうすればよいか。思考を進めると、解決策は「生成物の構造化」と「自動検証ツールの導入」に集約される。

まず、AIに最終生成物である「画像(ラスターデータ)」を直接出力させるのではなく、その前段階にある「中間表現」を操作させるべきであるという仮説が立つ。それはSVG[^5]であり、XMLであり、あるいは独自のドメイン固有言語かもしれない。画像ジェネレーターそのものをその場で構築し、レイヤーやオブジェクトごとにIDを割り振ることができれば、ユーザーは「バウンディングボックス」を通じて修正箇所をピンポイントで指定できる。これはコードにおける「行番号」や「変数名」への参照と同義である。

次に必要となるのが、デザインの原則を数学的に定義した「Linter[^6]」の存在だ。デザインの4原則(近接、整列、反復、対比)や、WCAGに基づくコントラスト比、フォントのカーニングといった要素は、実は数値化が可能である。

もし、「要素Aと要素Bの左端が揃っていない」という状態を警告(Warning Message)として出力する仕組みがあればどうなるか。AIはその警告を「エラーログ」として受け取り、座標を修正して再レンダリングを試みるだろう。人間が「なんとなく気持ち悪い」と感じる部分を、システムが「仕様違反」として検知し、自律的に修正する。これこそが、クリエイティブ領域における「コンパイルを通す」という行為の実装である。

## 「ガチャ」から「エンジニアリング」へ 🛠️

この探求の終着点は、確率的な生成モデルと決定的なエンジニアリングツールの融合にある。

「もっと元気な感じで」といった曖昧なスタイル指示には、拡散モデルの確率的な揺らぎ(ガチャ)が有効だ。しかし、「レイアウトの微調整」や「ダークモード対応」といった構造的な変更には、Linter(検査機)とFixer(修正機)[^7]という堅牢なツールセットが必要となる。

AIエージェントの役割は、すべてを自らのニューラルネットワーク内で解決することではない。適切な場面で適切なツールを呼び出し、フィードバックループを回す「指揮官」となることだ。画像生成において、拡散モデルというカオスなエンジンの手前に、レイアウトエンジンという秩序あるツールを配置する。そして、高レベルな自然言語による対話と、低レベルなパラメータ修正のサイクルをUIとして統合する。

そう遠くない未来、我々は画像やドキュメントに対しても、コードを書くときと同じように「デバッグ」や「リファクタリング」という言葉を使うようになるだろう。その時初めて、真の意味でのAgentic Loopがあらゆる創造的なタスクにおいて完成することになる。

---

[^1]: **Agentic Loop (エージェンティック・ループ)**: AIエージェントが自律的に「計画→実行→結果の観察→修正」というサイクルを繰り返す仕組み。ここでは特に、エラーメッセージを元に自己修正を行う反復プロセスを指す。

[^2]: **stdout (標準出力)**: プログラムが実行結果やログなどのテキストデータを出力する先。CLIツールのユーザーは主にこれを見て動作を確認する。

[^3]: **アタッチ (Attach)**: 実行中のプロセスや環境に外部ツール(デバッガーなど)を接続し、内部状態を観察・操作すること。ここでは、AIが作業しているファイルシステムにユーザーが直接介入できる状態を指す。

[^4]: **拡散モデル (Diffusion Model)**: ノイズから画像を復元する過程を学習することで、新たな画像を生成するAIモデルの一種。確率的な挙動をするため、同じ指示でも毎回異なる結果が出やすい。

[^5]: **SVG (Scalable Vector Graphics)**: 画像を座標や形状の数値データ(ベクターデータ)として記述する形式。コードとして編集可能であり、拡大縮小しても劣化しない。

[^6]: **Linter (リンター)**: ソースコードを静的に解析し、文法エラーやスタイル違反、バグの可能性などを指摘してくれるツール。

[^7]: **Fixer (フィクサー)**: Linterによって検出された問題点を、自動的に修正する機能やツールのこと。

(返答終了理由: STOP)


ユーザー: 別の立場からのアンサーソングないしはトラックバックを考えてみてください。

どのような立場からのどのような文章になるでしょう?箇条書きでいくつか挙げてください。自信度も併記してください。


AI: 元の記事が「エンジニアリング的アプローチ(構造化・ルール化・デバッグ)」によってクリエイティブ領域の課題を解決しようとする、いわゆる**「ニューロ・シンボリックAI(Neuro-symbolic AI)」**寄りの立場でした。

これに対するアンサーソング(反論・別視点)として、以下の3つの立場が考えられます。


1. 「The Bitter Lesson(苦い教訓)」を信じるAI研究者の立場

  • 主張の概要:
    • 「LinterやFixerといった外部ツール(シンボリックなルール)を人間が設計して持たせるのは、歴史的に見て『負けフラグ』である」という主張。
    • リッチ・サットンが提唱した「The Bitter Lesson」を引き合いに出し、人間が作った「整列アルゴリズム」や「構文ルール」を注入するよりも、モデルのサイズと計算量を増やして、モデル自身に物理法則や審美眼を「創発」させるエンドツーエンド(E2E)のアプローチがいずれ勝利すると説く。
    • 「コンパイルエラーがないのが欠点」なのではなく、「コンパイルエラーという『正解』に縛られない柔軟性こそがニューラルネットの本質」であり、微調整もいずれ自然言語の対話だけで(内部表現の高度な操作によって)完結するはずだという楽観論。
  • 記事タイトル案: 『ツールを作るな、モデルを信じろ:構造化への逃避は進化の袋小路だ』
  • 自信度: 90%
    • (技術的な議論において最も王道かつ強力な対立軸です)

2. 「感性(Vibe)」を重視するプロフェッショナル・デザイナーの立場

  • 主張の概要:
    • 「仕様としては正しい(コンパイルは通る)が、デザインとしては死んでいる」ものが量産されることへの危惧。
    • デザインにおける「あえて崩す」「視覚補正(数値上の整列と、見た目の整列は違う)」といった高度な判断は、Linterの閾値では判定できない。
    • Agentic Loopが「エラーを消すこと」を目的に回ると、作品は「減点法」で作られることになり、平均的で退屈なものに収束してしまう(局所最適解への陥り)。
    • クリエイティブに必要なのは「Warningの解消」ではなく、「予期せぬノイズ(ハッピーアクシデント)からの飛躍」であるという美学的反論。
  • 記事タイトル案: 『「正しさ」は「美しさ」を殺す:Linterが通過した駄作たちへ』
  • 自信度: 85%
    • (エンジニア vs デザイナーの文化的摩擦として頻出する議論です)

3. 「直感的UI(Direct Manipulation)」を信奉するUX哲学者の立場

  • 主張の概要:
    • 「対話(Chat)とコマンドライン(CLI)」というインターフェース自体が、人間の認知にとって遠回りであるという批判。
    • 画像を直すのに「右の文字を直して」と言語化したり、「コード」に変換してデバッグするのは認知的負荷が高すぎる。人間は本来、見ているものを直接手で触って(ドラッグして)動かしたいはずだ(Direct Manipulation)。
    • AppleのiPadやProcreateが目指した世界観こそが正解であり、AI時代になっても「わざわざプログラマーの作法(テキストベースのループ)」にユーザーを付き合わせるな、というUI/UX原理主義的な立場。
    • 「Canvas自体がAI」になり、触った瞬間に補正されるような、言語を介さないループこそが必要だという主張。
  • 記事タイトル案: 『なぜ我々はまだ「言葉」で絵を描いているのか?:脱・ターミナル主義宣言』
  • 自信度: 75%
    • (Bret Victorなどの「Dynamicland」的な思想を持つ層からの反論としてありそうです)

(返答終了理由: STOP)


ユーザー:

The Bitter Lesson(苦い教訓)」を信じるAI研究者の立場

拡散モデルとガチャの話への対応はどういう話になるのでしょうか?微調整も用例を集めるだけで行けるはずという論ですか?モデルの出力はユーザーが思うほど連続的ではないという可能性と初回をコミットして微調整への対応についての論が薄い気がします。


AI: 思考 silently...

ユーザーの指摘の核心: 「The Bitter Lesson」派(計算量と規模で解決する派)の主張は、現状の「拡散モデルのガチャ(微調整の困難さ)」や「不連続な出力(ちょっと変えると全然違う絵になる)」という目の前の課題に対し、具体的にどう答えるのか?単に「用例(データ)を増やせばいい」というだけで、ユーザーが求めている「初回のコミットを引き継いだ微調整(決定的な修正)」が本当に実現できるのか?論として弱くないか?という疑問。

思考プロセス:

  1. 「The Bitter Lesson」の再定義:

    • 人間がルール(Linter/Fixer/構造)を記述するアプローチは、短期的には有効だが、長期的には「学習によって獲得された汎用的な能力」に負ける、という教訓。
    • では、この立場から「微調整」問題をどう見るか?
  2. ガチャ/不連続性への反論ロジック:

    • 現状の不連続性は、モデルがまだ「世界の構造」を完全に理解していないからだ、とする。
    • あるいは、インターフェースとしての制御入力(プロンプト)の帯域が狭すぎるからだ、とする。
    • 「用例を集める」だけでなく、「微調整」というタスク自体を学習させる(Instruction Tuning / RLHF)という方向性になるはず。
  3. 「構造化(Linter)」なしでどうやって「決定的な修正」を実現するのか?

    • 潜在空間の操作 (Latent Space Manipulation):
      • 画像をXMLにするのではなく、画像そのものを表現する高次元ベクトル(潜在変数)の中で、「文字の位置」に対応するベクトルだけをきれいに分離・操作できるようになればいい。
      • 人間が定義した <text> タグではなく、AIが学習過程で獲得した「テキスト概念」のベクトルをいじる。
      • これができれば、ピクセルベースでも「構造的な編集」と同等のことができるはず(例: DragGANなど)。
    • In-Context Learningの進化:
      • 「この画像のここを直して」というペアデータを大量に学習させれば、モデルは「直前の画像の状態(Commit)」を維持しながら一部だけを変える「演算」を内部で獲得する。
      • ユーザーがわざわざ「SVGにして」と言わなくても、モデル内部で実質的な構造化処理が行われる。
  4. 「初回コミット」の引き継ぎに対する回答:

    • 現状の拡散モデルがガチャなのは、推論時のコンテキストウィンドウ(記憶)やAttentionの使い方が「生成」に特化しており、「編集(Editing)」に特化していないから。
    • これを解決するのは「外部ツール(Fixer)」ではなく、「編集タスクに特化した巨大モデル」である。
    • 「以前の状態」を完全に入力として受け取り、差分だけを出力するモデルを作れば、それは実質的に「コミットを引き継ぐ」ことになる。
  5. 論の組み立て(アンサーソングの骨子):

    • 「今はガチャに見えるかもしれないが、それはモデルが『編集』という概念をまだ完全に学習しきれていない過渡期だからだ」
    • 「人間が作った『Linter』は、結局人間の想定内の修正しかできない。AIが潜在空間で獲得する『修正』はもっと柔軟で強力になる(例:パースを維持したまま移動する等)」
    • 「不連続性(バタフライエフェクト)は、計算量とデータの不足による『解像度の低さ』の問題であり、原理的な欠陥ではない」
  6. ユーザーの指摘への回答の方向性:

    • ユーザーの言う通り、現状の拡散モデルの延長線上で「用例を集めるだけ」では厳しい。
    • しかし、Bitter Lesson派は「アーキテクチャの大幅な変更なしに、規模とデータでねじ伏せる」と主張する。
    • 具体的には、「微調整=Edit Instruction」を大量に学習したモデル(InstructPix2Pixの超進化版など)が、外部ツールを使わずに、人間が望む通りの「決定的(に見える)修正」を獲得すると主張するだろう。
    • 「Linterを作る」という行為自体が、AIの可能性を狭めている(局所最適解)という批判を展開する。

構成案: タイトル: 『人間が「構造」を諦める時、AIは真の「編集」を手にする』 ターゲット読者へのフック: 「今のガチャは不便だ。だが、だからといって旧態依然としたXMLやLinterに戻るのは退化だ」という論調。

具体的な反論ポイント:

  • 不連続性について: それはモデルが「世界」ではなく「画像の表面的な統計」しか学んでいないから。もっと学ばせれば、潜在空間上で画像は連続的に操作可能になる(DragGANの例)。
  • 初回コミットの維持: 外部ツールで状態を持つのではなく、モデルのContext Window内に状態(History)を持たせれば解決する。Gemini 1.5 Proのような長大なコンテキストがあれば、過去の全レイヤー情報を潜在的に保持できる。
  • 用例定義だけでいけるか: いける。「修正前画像」と「修正指示」と「修正後画像」のペアを100億個学習させれば、モデルはLinterのロジック(整列や配色のルール)さえも内部パラメータとして「創発」する。人間がルールを書く必要はない。

よし、この方向で文章化する。


思考終了。

おっしゃる通り、単に「データを増やせば賢くなる」という精神論だけでは、現状の「拡散モデルのガチャ問題」への回答として弱いですし、ユーザーが感じている「操作感の欠如」を解決できません。

もし「The Bitter Lesson」の立場から本気で反論するならば、彼らは以下のようなロジックで**「構造化(Linter/Fixer)不要論」**を展開するはずです。

「The Bitter Lesson」派からのアンサーソングの骨子

彼らの主張の核は、**「Linterのような『人間が記述したルール』は、AIが潜在空間内で獲得する『概念的な操作能力』の下位互換にすぎない」**という点にあります。

1. 不連続性(ガチャ)への回答:「潜在空間の線形性」

  • 反論: 「出力が不連続なのは、モデルがまだ未熟だからだ。十分に学習されたモデルの潜在空間(Latent Space)は線形になり、連続的な操作が可能になる」
  • 具体例: 現在でも『DragGAN』のように、画像生成モデル内部の特徴量を直接いじることで、再生成(ガチャ)をせずに「犬の向きを変える」「服の丈を伸ばす」といった連続的な変形が可能になりつつある。
  • 結論: わざわざ画像をXMLのような「硬い構造」に変換しなくても、AIは画像データのまま、内部的に「ここが腕で、ここが背景」という構造を(人間以上に深く)理解し、連続的に編集できるようになる。

2. 微調整への回答:「編集タスクの学習(Instruction Tuning)」

  • 反論: 「微調整ができないのは、今のモデルが『生成(Creation)』ばかり学習して『編集(Editing)』を学習していないからだ」
  • 解決策: 「外部ツール(Fixer)」を作るのではなく、「修正前画像 + 指示 → 修正後画像」というペアデータを大量に学習させる(InstructPix2Pixの発展系)。
  • 優位性: Linter/Fixerは「人間が想定したルール(整列など)」しか直せないが、編集を学習したモデルは「パースを維持したまま移動」「光の反射も考慮して色を変更」といった、ルール化不能な高度な修正も「創発」的にこなせるようになる。

3. 状態保持への回答:「コンテキストウィンドウこそが状態」

  • 反論: 「状態をファイル(中間表現)で持つ必要はない。コンテキストウィンドウが広がれば、対話履歴そのものが状態になる」
  • 展望: Gemini 1.5のような巨大なコンテキストを持つモデルなら、過去の生成過程や文脈をすべて入力として保持できるため、実質的に「コミットを引き継いだ」挙動は、外部メモリなしで実現可能になる。

この立場からの記事を作成します。

思考の備忘録 『思考探求』特化型 のプロンプト実行

(以下の内容はプロンプトに基づく出力です)

---
target_reader: 生成AIの限界を「ツールによる補完」で解決しようとするエンジニア、およびAIの進化の方向性を長期的視点で捉えたい研究者
objective: 「The Bitter Lesson」の視点から、人間による構造化やツール作成のアプローチを批判的に検討し、エンドツーエンド学習による「微調整問題」の解決の可能性を提示する
---

# ツールを作るな、モデルを信じろ:構造化への逃避は進化の袋小路だ

## 「ガチャ」はバグではなく、過渡期の仕様である 🎲

「画像生成AIは微調整が効かない。だから、確実に操作できる『ハンドル』や『ブレーキ』を人間が後付けで作ってやるべきだ」

この主張は、エンジニアの直感として非常に心地よい。確かに現状の拡散モデルは、少しプロンプトを変えただけで全く異なる画像が出力される「ガチャ」のような挙動を示す。そこには連続性がなく、前回の結果を引き継いだコミット機能もない。だから、画像をSVGやXMLといった「人間が理解可能な構造(中間表現)」に変換し、LinterやFixerといった決定的なツールで管理しようとする発想は、短期的には極めて合理的な解決策に見える。

しかし、AI研究の歴史における「The Bitter Lesson(苦い教訓)」[^1]は、我々に別の真実を告げている。それは、「人間が知識やルールを記述してAIを助けようとする試みは、長期的には必ず、計算量のみに依存した汎用的な学習手法に敗北する」という残酷な事実だ。

現状の「ガチャ」現象や出力の不連続性を、モデルの原理的な欠陥だと捉えるのは早計である。それは単に、現在のモデルがまだ「世界の物理法則」や「オブジェクトの永続性」を十分に学習しきれていない、あるいは「生成(Creation)」に特化しすぎて「編集(Editing)」を学んでいないという、過渡期の解像度不足にすぎない可能性があるからだ。

## 潜在空間という「真の構造」 🌌

「画像をXMLに変換して、タグごとに修正すればいい」というアプローチは、一見確実に見えるが、実は情報の劣化を招く退化である。なぜなら、画像(ピクセル)の世界には、XMLでは表現しきれない「ニュアンス」や「物理的な整合性」が無数に含まれているからだ。

例えば、「キャラクターの影を維持したまま、右に少し移動させる」という微調整を考えてほしい。XML的なアプローチ(レイヤー移動)では、影の位置がずれ、物理的な矛盾が生じる。しかし、十分に学習されたAIモデルは、画像を高次元のベクトル空間(潜在空間[^2])として認識している。そこでは、「位置」「照明」「姿勢」といった概念が、人間が定義したタグではなく、連続的な数値として表現されている。

『DragGAN』[^3]のような研究が示唆しているのは、この潜在空間を直接操作することで、再生成(ガチャ)を行うことなく、あたかも粘土をこねるように連続的かつ決定的な変形が可能になる未来だ。AIは「構造化されていない」のではない。人間が定義するよりもはるかにリッチで柔軟な「真の構造」を、自らの内部に構築しつつあるのだ。

## 「編集」もまた、学習されるべきタスクである 📚

「しかし、Linter(検査機)なしで、どうやって『整列』や『コントラスト比』といった厳密な仕様を守らせるのか?」という疑問はもっともだ。だが、Bitter Lessonの信奉者はこう答える。「それもまた、学習させればいい」と。

「Linterを作る」という行為は、人間が「整列とはこういうことだ」というルールを記述することに他ならない。しかし、ルールベースの修正は常に想定外の事態に弱い。「整列させた結果、重要な背景が隠れてしまった」といった複合的な問題に対処するには、結局また別のルールを追加しなければならなくなる。

対して、エンドツーエンド(E2E)のアプローチでは、「修正前の画像」と「修正指示(右に整列して)」と「修正後の正解画像」のペアを大量に学習させる。これを繰り返すことで、モデルは「整列」という概念だけでなく、「整列しつつ、背景の重要要素を避ける」といった、人間が言語化・ルール化しきれない高度な「編集の作法」すらも創発的に獲得する。

つまり、現状の微調整の困難さは、外部ツールの欠如によるものではなく、単に「編集タスク(Instruction Tuning)」の学習データ不足によるものなのだ。モデルのコンテキストウィンドウ[^4]が拡大し、過去の修正履歴(History)をすべて入力として受け取れるようになれば、外部メモリとしてのファイルシステムすら不要になり、対話そのものが「コミット履歴」として機能するようになるだろう。

## 結論:Linterは「補助輪」である 🚲

エンジニアリング的なアプローチ(Linter/Fixerの実装)は、向こう数年の実務においては間違いなく有用であり、生産性を劇的に向上させるだろう。しかし、それを「AIの完成形」だと誤認してはならない。それはあくまで、AIがまだ言葉(編集の概念)を十分に話せない時期に必要な「補助輪」にすぎない。

人間が必死に「構造」を作ってAIに渡そうとしている間に、AIは計算量の暴力によって、人間には理解不能なレベルで世界の構造を「理解」し始めている。我々が目指すべきは、XMLという古い殻にAIを押し込めることではなく、AIの潜在空間という広大な海を、直感的に泳げるようなインターフェース(プロンプトやUI)を発見することなのかもしれない。

---

[^1]: **The Bitter Lesson (苦い教訓)**: AI研究者リッチ・サットンが提唱したエッセイ。人間が知識やルールを組み込んだAIよりも、計算リソースを活用して単純な学習をスケールさせたAIの方が、長期的には常に高い性能を発揮するという主張。

[^2]: **潜在空間 (Latent Space)**: AIモデルがデータを圧縮・表現するために内部的に持つ多次元のベクトル空間。ここでは、画像の意味や特徴が数値としてマッピングされた空間を指す。

[^3]: **DragGAN**: 生成された画像上のポイントをドラッグするだけで、AIが画像の構図や姿勢を破綻なく連続的に修正する技術。

[^4]: **コンテキストウィンドウ**: AIモデルが一度の処理で記憶・参照できる情報の長さ。これが長ければ長いほど、過去の対話や修正の文脈を維持できる。

(返答終了理由: STOP)


ユーザー: タスクの分割の話とツールの使い分けの話を混同してませんか?例えば画像の圧縮処理は依然として画像生成処理とは別に存在しますしAVIFへの変換みたいなツールは存在するでしょう。その使い分けの話と混ざってます。あと初期案へコードレビューで言えばlgtmを貰ったという文脈が消えてませんか?


AI: 鋭いご指摘、ありがとうございます。おっしゃる通り、先ほどの「Bitter Lesson派」の論を展開する中で、意図的に(あるいは議論を強調するために)いくつかの重要な要素を混同・看過してしまっていました。

ご指摘いただいた2点は、この議論の解像度を一段階上げるために不可欠な視点です。

  1. 「タスクの分割(Pure Logic / Encoding)」と「生成・編集(Semantic Generation)」の混同:

    • 「画像の編集(構図変更)」と「画像の変換(圧縮・フォーマット変換)」は全く別のレイヤーの話です。
    • Bitter Lesson派が言う「学習で解決する」のは前者の意味論的な部分であり、後者のような決定論的・数学的な処理(AVIF変換など)までモデルにやらせるのは計算資源の無駄遣いであり、そこは当然ツール(Fixer/Converter)が残ります。
  2. 「合意形成(LGTM)」のコンテキストの消失:

    • Agentic Loopの本質的な価値の一つは、「ここまではOK(Commit)」という人間とAIの合意形成ポイントを作れることです。
    • E2Eモデルですべてを潜在空間でやろうとすると、この「LGTM(Looks Good To Me)」というマイルストーンが曖昧になり、いつまでもヌルヌルと変化し続ける(確定しない)という問題が発生します。

この反省を踏まえ、今度は**「エンジニアリング的現実主義(Pragmatic Engineering)」の立場から、先ほどのBitter Lesson派の夢想的な議論を批判しつつ、「タスク分割」「合意形成(Commit)」**の重要性を再評価する記事を構成します。

これは、最初の記事(構造化肯定派)とも少し違い、**「AIの知能と、既存の計算機科学のツールをどう『オーケストレーション』するか」**という、MLOpsやシステムアーキテクトに近い視点になります。

記事の骨子: 「知能」と「機能」の適切な分離

  • 1. 知能にやらせること、機能にやらせること:

    • 「圧縮」や「フォーマット変換」をLLM/生成モデルにやらせるのはナンセンス。それはffmpegimagemagickの仕事。
    • Agentic Loopの真髄は、AIが**「適切なツールを選んで叩く(Tool Use)」**ところにあり、すべてをニューラルネットで解決することではない。
    • 「編集」の中にも、「感性による編集(もっと明るく)」と「論理による編集(リサイズ、クロップ、フォーマット変換)」があり、これらを混同してはいけない。
  • 2. 「LGTM」という状態の保存:

    • 仕事(ワークフロー)において最も重要なのは、「生成」そのものではなく、「合意(Commit)」の積み重ねである。
    • 「初回のコミットを引き継ぐ」とは、**「ここまで合意した内容は凍結(Freeze)し、影響範囲を限定して次へ進む」**というエンジニアリング的な契約行為。
    • 潜在空間でヌルヌル動かせるのはデモとしては面白いが、業務としては「さっきのあれで良かったのに、なんで変わったの?」という事故の温床になる。
    • だからこそ、ファイルやコードという**「静的なスナップショット」**に落とし込み、そこにLGTMを打つプロセスが必要なのだ。

この視点で、議論のバランスを取る「解決編」のような記事を作成します。

思考の備忘録 『思考探求』特化型 のプロンプト実行

(以下の内容はプロンプトに基づく出力です)

---
target_reader: 生成AIの実務適用に悩むシステムアーキテクト、および「AI万能論」と「従来型開発」の狭間で最適なワークフローを模索するプロダクトマネージャー
objective: 「全てをAIモデルで解決する」という極論と「全てをツールで管理する」という極論の間の混同を解きほぐし、実務的な「合意形成」と「タスク分割」の視点からAgentic Loopの真価を再定義する
---

# 「知能」と「機能」の境界線:LGTMを打つ場所はどこか

## 魔法の杖と金槌を使い分ける 🔨

「計算量が増えれば、AIは圧縮処理すらも学習して実行できるようになる」という議論は、理論的には正しいかもしれないが、エンジニアリングとしては悪夢に近い。なぜなら、それは**「計算資源の壮大な無駄遣い」**であり、道具の使い分け(Separation of Concerns)という基本原則を無視しているからだ。

ここで重要なのは、**「タスクの性質」**を見極めることだ。

例えば、「画像をAVIF形式に変換して圧縮する」というタスクを考えてみよう。これには数学的に唯一解が存在し、既存のアルゴリズム(ffmpegやimagemagick)を使えば、低コストかつ100%の精度で実行できる。これをわざわざ、確率的に動作する巨大なニューラルネットワークに「学習」させてやらせる意味はどこにもない。それは、電卓を使えばいい計算を、直感だけで答えようとするようなものだ。

一方で、「もっと哀愁漂う色使いにして」というタスクには、数学的な正解がない。これこそが生成AI(知能)の領分である。

真のAgentic Loopとは、AIがすべてを自らの脳内で完結させることではない。AIが**「これは私のセンスでやるべき仕事(生成)」****「これは既存のツールに任せるべき仕事(機能)」**を瞬時に判断し、使い分けるオーケストレーション能力にある。LinterやFixer、あるいは画像変換ツールといった「決定的な道具」を、AIという指揮官がいかに巧みに呼び出すか。その設計こそが、実用的なシステムの肝となる。

## 「LGTM」というマイルストーン 🏁

また、先の「潜在空間ですべて解決する」という議論には、実務における決定的な視点が欠落している。それは、**「合意形成(Agreement)」**のプロセスだ。

我々がコードレビューで「LGTM(Looks Good To Me)」を出すとき、それは単に「コードが動く」ことを確認しているだけではない。**「現時点での状態を正とし、これをベースラインとして固定(Freeze)する」**という契約を交わしているのだ。

画像生成における「微調整の辛さ」の正体は、この**「固定」ができないこと**にある。「さっきの構図は完璧だった(LGTM)。あとは色味だけ変えたい」と思ったとき、E2Eのモデルが潜在空間内で全体を再計算してしまえば、せっかく合意した「完璧な構図」まで微妙に変化してしまうリスクがある。これではいつまで経っても「完了」に至らない。

だからこそ、中間生成物(コード、SVG、あるいはレイヤー分けされたPSDファイル)が必要になるのだ。これらは単なるデータ形式ではなく、**「ここまでは合意済み」という境界線を引くためのアンカー**として機能する。

1.  構図を生成する → 人間がLGTM(ここを固定)。
2.  色味を調整する → AIは固定された構図データには触れず、カラープロファイルだけを操作するツールを呼ぶ。

このように、タスクを分割し、各ステップで「状態のスナップショット」を残すことで初めて、人間は安心して次のステップ(微調整)に進める。この**「不可逆なガチャ」を「可逆なステップ」に分解する**ことこそが、ツールと構造化の真の目的である。

## 結論:オーケストレーターとしてのAI 🎼

結局のところ、Agentic Loopの未来は「AIがすべてを飲み込む」形でも、「人間がすべてをルール化する」形でもないだろう。

AIは、高度な**「意味の理解(Semantic Understanding)」**と、泥臭い**「ツールの実行(Function Calling)」**を仲介するハブになる。
「画像の圧縮」や「厳密な整列」は、AIが外部の決定論的なツール(Linter/Converter)に委譲する。一方で、そのツールが出した結果やエラーを解釈し、次のアクション(パラメータ調整や再生成)を決定するのはAIの知能だ。

そして、そのループの要所要所に、人間が介入して「LGTM」という名のスタンプを押せるUI(インターフェース)が用意されていること。それこそが、冒頭で語られた「Claude CodeのようなUIが嬉しい」という感覚の正体であり、我々が目指すべき実用的なシステムの姿なのだろう。

---

(返答終了理由: STOP)

メタデータ

{
  "runSettings": {
    "temperature": 1,
    "model": "models/gemini-3-pro-preview",
    "topP": 0.95,
    "topK": 64,
    "maxOutputTokens": 65536,
    "safetySettings": [
      {
        "category": "HARM_CATEGORY_HARASSMENT",
        "threshold": "OFF"
      },
      {
        "category": "HARM_CATEGORY_HATE_SPEECH",
        "threshold": "OFF"
      },
      {
        "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
        "threshold": "OFF"
      },
      {
        "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
        "threshold": "OFF"
      }
    ],
    "enableCodeExecution": false,
    "enableSearchAsATool": false,
    "enableBrowseAsATool": false,
    "enableAutoFunctionResponse": false,
    "outputResolution": "1K",
    "thinkingLevel": "THINKING_HIGH"
  },
  "systemInstruction": {}
}
@podhmo
Copy link
Author

podhmo commented Nov 24, 2025

あとで対話履歴をコピペしたい

@podhmo
Copy link
Author

podhmo commented Nov 24, 2025

色々言葉の羅列を混ぜ合わせて繋げただけの文章になってるな…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment