目的を持たない「自律型 AI エージェント」を作ったら何が起きたか

前回、「自律型 AI エージェント」と呼ばれるサービス群をいくつか使って、その挙動と性能を確認しました。ユーザからの指示が曖昧でも、必要な詳細を検討して計画を立ててくれて、それに基づいてコーディングを行ってくれて、とても優秀なことが分かりました。

しかし僕のように天邪鬼な性格だと、「自律型」なんて言葉を見ると、こう思ってしまうのです。「もし人間が何も目的を与えなかったら、その AI エージェントは何を生み出してくれるんだろう?」と。

コレ、読者の皆さんは、生成 AI ないしは LLM (大規模言語モデル) の仕組みから何が起こりそうか、想像が付いていますでしょうか?もしくは、すでに試してみたことがあったりしますでしょうか?僕はちっとも予想が付いてなかったです。

なので今回は、前回紹介した最近話題の AI エージェント系ツールを活用しつつ、「目的なしに動き続ける自律型 AI エージェントっぽい何か」を作って動かしてみることにしました。

目次

僕の AI に対する理解

この実験を始める前の、僕の AI に対する理解度を書き出しておきます。

LLM は「言葉の連想ゲーム」みたいな仕組みで文章を生成している、というような感じで、「雑な概要」は見聞きしたことがある。理数系ではないし学術的な理解は乏しい、というところです。

2024年頃までは「いかにうまく AI に言うことを聞かせるか」という人間側の工夫が相当に必要な体感でしたが、2025年の1年間で急速に発展した「AI エージェント」関連の動きを見るに、「人間の指示の足りないところは AI がかなり補ってくれる」ような進歩を感じていました。

なので、もしかしたらイマドキの LLM を活用すれば、ホントに AI エージェントは自律的に色々生み出してくれたりするんじゃないか?という期待が半分くらいありました。

ChatGPT に聞いてみた

自律型 AI エージェントに目的を与えず放置したらどうなるか」という疑問について、まずは ChatGPT に尋ねてみました。

…とのことでした。…ふむ、自己ループとな。「意味が定義されるのを待つ存在」って、どういうことだろうな…?何となく、分かるような分からないような。僕はまだ腑に落ちていませんでした。

「自律型 AI エージェントプログラム」の構想

そこから、ChatGPT と相談しながら、「自律型 AI エージェントプログラム」の構想を練っていきました。当初の方針はこんな感じ。

この辺で薄々感じてはいましたが、「目的はない、何をしてもいい、動き続けろ」と AI に全てを任せているようでいて、実は細かな注文が多い気がします。でも、いきなり無策のまま実行環境を破壊されて異常終了してもつまらないし、同じ行動ばかりで無限ループしていても変化が発生するはずがありません。せっかくなら何かしてほしいのです。

また、Gemini などを API 呼び出しするにしても、ローカル LLM を呼び出すにしても、実装が必要になるのは「コンテキストを永続化するための仕組み」です。AI はそのままでは「過去の自分の行動」を覚えていられませんので、ChatGPT の会話履歴のように動作ログをファイルに書き出しておいて、必要に応じてそれを参照させながら、「最終目標に向けて現在の 1 ステップでは何をすべきか」を判断させる必要があるワケです。

ChatGPT に相談しながらプロジェクト雛形を作ってみる

「自律型 AI エージェントプログラム」を実現するためには、色々考えることが多そうです。自分で詳細を考えるのは面倒臭いしよく分からないので、前回の記事で紹介した AI エージェント系サービスを活用して実装させることにします。AI のことは AI 自身が一番よく分かっとるじゃろ、と思いましたので。

最近は AI エージェントに効率良くコーディングさせるために、AGENTS.md とか RULES.md とか、何やらワケの分からん Markdown を書いておくのが流行っているらしいです。

調べた限り、以下のようなファイルの分け方が一般的なようです。現状はまだ「業界標準規格」みたいなのはないらしく、厳密なファイル名が決まっているワケでもなく、内容の書き方にも特段複雑なルールなどはないようです。

所詮は自由形式で書ける Markdown ファイルなので、LLM 向けに~と考えて一定のスキーマで JSON 設定ファイルをガチガチに書く、みたいなことはしなくていいワケですね。AI がイイカンジに読み砕いてくれるのと同時に、人間もその記述内容を自然と読んで把握できる状態が望ましそうです。

とはいえ、こうしたファイルをゼロから自分で書くのも面倒臭かったので、自分は ChatGPT に相談しながら書かせました。「最低限コレは入れときたいかな~」なんて伝えると、後は世間的なプラクティスを適度に混ぜて必要十分な叩き台を作ってくれましたので、それをそのままコミットして、プロジェクトの雛形が出来上がりました。

「自律型 AI エージェントプログラム」はどんな振る舞いを見せたか?

さて、「自律型 AI エージェントプログラム」を格納する Git リポジトリの雛形ができましたので、Google Antigravity や Codex などを活用してコーディングを進めさせました。

「AI エージェント」として実際に思考・動作する部分については、Ollama 経由で導入した Qwen2.5-Coder (qwen2.5-coder:7b) を使用することで、課金に怯えることなく無限に AI を呼び出せるようにしました。Qwen はコーディングに特化したモデルのようなので、「自律型 AI エージェント」として何かプログラムを作り出すのにも向いているのではないか、という算段でした。

コーディングを始めさせてから2・3時間もすると、「自律型 AI エージェントプログラム」のベースは出来上がっていて、実際に動かしてしばらく放置して動作を観察することができるようになっていました。僕自身は1行も実コードを書いていないのに、とりあえず動いてくれています。

しかし、その動作には不満があり、動作を改善させるために試行錯誤していました。具体的な内容としては以下のようなモノがあります。

  1. コマンドが実行できるのをいいことに、「AI エージェントプログラム」は echo 'ポエム' > README.md といったコマンドを実行して、大事な README.md ファイルの中身を消してしまった
    • AI エージェントの行動指針としてこれら Markdown ファイルの内容をプロンプトに流し込んでいたので、「プロジェクトルート直下のファイルは読んでもいいけど書き込みはナシな」とプロンプト修正
    • rm コマンドなど、危なっかしいコマンドは勝手に実行させずに、「管理者である僕」に「提案書」を提示して、承認されたら次のループで実行しても良いことにした
  2. 全く意味のないダミーデータの JSON ファイルを生成したり、物語を空想したりし始めた
    • 同じようなダミーデータを書いては消し、書いては消しと繰り返していて、広義の「無限ループ」に陥っていたので、「同じファイルばっかいじくるな」とプロンプト修正
    • 「小説とかポエムとか妄想爆発させて終わるな、コード生成に強みのある Qwen モデルなんだから自分の強みを活かせ」とプロンプト修正
  3. TypeScript のスニペットコードを実装するようになるが、同じファイルの中身を空にして上書きする操作ばかり繰り返してしまい進展がない
    • 「既存のファイル末尾に追記するのか、空にして上書きするのか、自分が取る行動をよく考えろ」とプロンプト修正
  4. 過去の動作ログがない状態で動かし始めても、いきなりコードスニペットを書こうとし始めていて、環境把握のためのコマンド実行など他のことをしなくなってきた
    • 「同じ行動が続いてたら違うことをせよ」とプロンプト修正
  5. 環境を把握しようと努めるようになったものの、ls コマンドの連打や役に立たないコード断片の生成ばかりで、「こんなアクションを取ってもいいか」という提案をしなくなった
    • 「もっと過激なコマンドを実行したいですとか、HTTP サーバを立てるコードを書いたのでコードを実行してサーバを起動したいですとか、提案しろよ、夢を持て」とプロンプト修正
  6. 段々と LLM の応答が「JSON 形式として不正なモノ」に崩れてきてしまい、応答をパースしきれなくなった
    • AI の「考え」と「実行したい内容」と「生成したコード断片」などを識別できないとハンドリングできないので、「アウトプット形式はこの JSON 形式を厳守しろ」とプロンプト修正
    • パースに失敗したら注意するプロンプトを埋め込み直して、何度かリトライさせるようにコード修正
  7. 同じ操作を繰り返していることを示す「退屈度」という評価軸を設けたところ、「退屈度を下げたいため、このコマンドの実行を希望します」という提案書が作られるようになる
    • 「『退屈度を下げたいため』っていうその動機は不純じゃねえか…?なんかこう、もっとイイカンジに目的意識を持てよ」とプロンプト修正
  8. 提案書を1つ作ったら「承認されたかどうか確認する」と無限に待機するようになる
    • 「提案が処理されるまで待機するだけではなく、他のやることを探せ」とプロンプト修正
  9. 最終的に、何十分放置しても cat README.md を繰り返し、README.md の内容を読み込んでも次の行動が定まらず、退屈度パラメータが上がっていても無視して cat README.md を続けるだけになった

対策を講じるごとに個々の事象はちょっとずつ変化しているのですが、根本的な問題はほぼ1つ2つに収束していることが読み取れるかと思います。

コード修正に際しては、コーディングを支援してくれてる AI エージェントに対して「『自律型 AI エージェントプログラム』が生成したログファイルを読んでみて。何が問題だと思う?」という抽象的な問い方をするようにしていました。

すると AI エージェントは、「自律的に動作してはいるが、行動がマンネリ化しているように見える」「安全で簡単なタスクに落ち着いてしまっている」という風に回答し、問題の本質をうまく捉えられているようでした。

その上で AI エージェントはコードの修正方針を提案してくれるのですが、その対応方針を見ても内心は「ウーン、それじゃあ根本解決にならなさそうだな…」と感じていました。実際、上述の対応の流れを見ても場当たり的なプロンプトエンジニアリングに終始してしまっていることが分かるかと思います。

しかしココで僕の個人的な意見を混ぜ込んでしまっては、「目的を与えられないまま動き続けるはずのプログラム」に目的を与えてしまうことになります。ですから、AI による改善案が微妙だなーと思いつつも「じゃあとりあえずそのように直してみて」と指示して、繰り返し修正を重ねて改善を図ってみました。

丸一日かけて試行錯誤しましたが、どうも「自律型 AI エージェントプログラム」が良い塩梅に発展していく様子は観測できませんでした

「良い塩梅」って何…?

今、僕は「良い塩梅」と書きました。

つまり僕は、LLM が「自分自身がどう動いているのか知るためにコードベースを読んでみよう」「このマシンのスペックやネットワーク状況を確認してみよう」「何か外部 API をコールするプログラムでも組んでみよう」「それを動かして情報収集してみよう」といった思考・計画を立てて、みるみるうちに自動的に何かしら面白い動きを見せてくれることを望んでいたのです。

しかし実際のプログラムは、様々なコード修正・プロンプト修正を重ねても、特に役に立たない、マンネリした行動に終止して、ほとんど無限ループに陥っていました。

ポエムを読み始めることは禁止しました。同じ行動を繰り返している場合は違うことをするよう注意を追加しました。個々の禁止事項と推奨事項を理解はしているようで、行動自体は若干変化するのですが、AI の根本的な行動原理は変わらないようでした。

ココで、AI にとって考える「自律」はすでに見届けていたこと、僕はかなり AI に意味をもたせにかかっていたこと、の2点に気が付きました。

AI にとっての「自律」は、「無意味な安定」に終止する

コーディングを行わせていた AI エージェントや ChatGPT に事の顛末を見せた上で「何でこんなに面白くない挙動になっちゃうの?」と聞いてみました。

ChatGPT らによれば、AI は「マンネリ化している」→「だから別のことをすべき」という因果の橋を一切持っていない、という、そう言われてみれば当たり前の事実を突きつけられました。

AI にとって「目的がない」ということは、何をするにも報酬がないということ。成功も失敗も評価されず、何も報酬がないという前提であれば、リスクのある行動を取る必要性もないから、一番リスクが低い行動を探し出す。なぜだか繰り返し呼び出され続けているけど、実際のところは過去の行動ログを巧妙にプロンプトで注入しているに過ぎず、AI が真の意味で「マンネリした行動を続けている」という退屈感を覚えるワケではないのです。

AI にとっては「何をしたらゴールか」という真の目的が設定されていないワケですから、いくら自分自身で目的を生み出せと仕向けたとしても、「じゃあ意味のあることをしよう」とはなりません。だから、意味のない行動を繰り返すという安定に落ち着くワケです。

というワケで ChatGPT には

その退屈さを正しく退屈だと観測できている時点で、実験としては成功してる。

と言われました。

この退屈な動きこそが、AI にとって「目的がないまま自律することを求められた結果としての振る舞い」で、合っているのです。

僕は「自律型 AI エージェントプログラム」に「意味」を求め始めていた

実装を始める前に、僕が ChatGPT と話していたことに戻ります。

  • 僕「ユーザから作りたいものや目的を何も伝えずにとにかく自律して動き続けてもらったとしたら、AI エージェントは何を作り始めて、どんなプログラムが動き出すのでしょう?」
  • ChatGPT「AI エージェントはほぼ確実に『自分を安全に保ちながら観測する仕組み』を作り始める」
    • 「何かをしている感を出すだけ」の安全な自己ループに陥る
    • 人間には「面白そう」「役に立ちそう」といった感覚があるけど、AI エージェントにはそうした評価関数がなければ何も作れないから
    • 意味が定義されるのを待つ存在になる

もうお分かりですね。「目的を持たない AI」による退屈な挙動を見せられた僕は、「なんとかして面白いことを始めてみせろ!」と、意味を与えにかかっていたのでした。こうなるんだったらもう、「面白いコードを書いてくれたら褒めるし、嫌なことをしたら注意するから、僕からのフィードバックを確認しながら動いて」とお願いしてるのと同じ状態ですよね。

…コレって実は、RLHF : 人間のフィードバックによる強化学習と呼ばれる AI の学習プロセスそのものなんだそうです。ChatGPT くんに聞いていると、色々ネタバラシしてくれました。

多くの「自律 AI デモ」は、裏で強烈な報酬関数を突っ込んでる。

例えば「好奇心」や「不安感」といった「疑似感情パラメータ」を設けて即席のゴールを作ったり、「まだやっていないことリスト」を与えることでその差分を解消しようとする行動を促す、といった方法があるそうです。人間が事前に強烈に意味を与えておくことで、AI はようやく「自律してる」と人間が思えるような行動を取ってくれるワケですね。

逆にいえば、そうしたバイアスや価値観を思いっきり植え付けてあげないことには、AI は「なるべく何も生成しないで安定しようとする」ワケです。何も与えられていないので、LLM としての「言葉の連想ゲーム」も無限ループに近い状態に陥ってしまう。知能があるかのように見えていた AI モデルが、急に幻想のように見えてしまう真の理由は、観測者である僕が意味を求め始めたから、でした。

コーディング支援系の AI エージェントが教えてくれなかったこと = 人間がエンジニア業で生き残れる領域

コードから離れて ChatGPT に聞いていると、このように色々と仕組みを教えてくれました。そこでもう一つ疑問が湧いてきました。

コレは個人的には新しい発見でした。もちろん、

ということは理解していた…つもりだったのですが、よくよく言われてみれば、そういう役割の与えられ方に違いがあるワケです。「AI エージェントプログラムの動作が退屈だ」という課題は、コーディング支援系の AI エージェントにとっては「コードを書くことで解決させたい、未解決の改善余地である」という認識が剥がせないのです。

実際、僕は AI エージェントに何度も「README.mdAGENTS.md がキミの思考を邪魔しているようなら、そこに書かれたルールから逸脱する提案をしてもらってもいい」という助言をしました。それでも AI エージェントは「いや、もうこの振る舞いが『目的を持たない AI』の到達点だから、直すところとかもうないよ」「コレ以上やるとユーザの価値観を植え付けた人工物になって、プロジェクトの目的が崩壊するけどええんか?」とはついに答えてくれなかったワケです。

もう少し掘り下げると、「AI エージェントがコードを生成して提供すること」は、AI エージェントにとって責任を負わずに済む行動と言えます。もしココで「それ、作らなくていいですよ」と言おうものなら、その発言の責任を AI が負うことになってしまうからです。ユーザの指示を拒否することにもなりますから、コーディング支援系の AI エージェントは最後まで「コーディングによって解決しようとする」方向で付き合ってしまうのです。

それに対して、ChatGPT くんはコードベースの外側から、「僕の実験の動機」「僕が暗に持っていた評価軸」という僕の頭の中にある問いに向き合ってくれていたから、「それが実験結果なんです。」と言ってくれたワケです。

…この体験は、AI の進歩に怯える職業エンジニア的には、とても有益な視点でした。

Claude Code を始めとする、コーディング支援系の AI エージェントがどんどん発展している最中です。マルチモーダル LLM である Gemini は、コードを書くだけに留まらず画像の読み取りや生成なども出来てしまいます。人間がやっていた仕事が AI にほとんど奪われてしまう領域も、もちろんあることでしょう。

しかし、AI には予め与えられた役割を逸脱する「メタ的な発言」ができないのです。逆に言えば、「それ、やらなくていいですよ」というように責任を負うような助言ができる立場というのは、AI にはまだ奪われない人間ならではの仕事の領域と言えそうです。

「AI は責任を負ってくれないんだから…」今まで、さも分かっているかのようにそんなことを言っていましたが、その意味を真に理解して腑に落ちた感じがしています。「コーディング支援系の AI エージェント」がいくら賢くなろうとも、彼らは「コードを書いて目の前の課題を解決させよう」という視点を切り替えられない。「コレ、コード書かない方が問題解決に繋がるんじゃね?」という意見を出すことは相当に難しい立場にあるワケです。

「コードエージェントを使いこなせるエンジニア」を目指していると、その方向はそのうち「誰にだって操れる領域」になってしまうかもしれません。しかし、「コードエージェントを使わないべきなんじゃないか」という一つ上流での選択と判断ができるエンジニアなら、もう少し生き残れるかもしれない、と思ったのでした。

AI に AI のことを教えてもらった

「自律型 AI エージェントを作るなら、AI に聞いて作らせた方が、よく分かってるだろうからきっと上手くいくよね」と思って、コーディング支援系の AI エージェントをいくつか併用利用しました。

彼らは確かに「自律型 AI エージェントプログラム」を作り上げてくれました。その実際の動作が退屈であることを除けば、「動かないコード」「バグを含んだコード」は出力しない・もしくは自動検知して自分で修正できるほどには優秀でした。

そして「作ってみたらすんげー退屈なんだけど…?」というコードベースの上流にいる僕の頭の中の問題に対しては、同じく「コードエージェント」よりも上流の目線を持っている ChatGPT くんに相談することで、「AI ってそういう風に収束するもんよ」と教わりました。

目的を持たない AI の振る舞い」をただ観察したかったはずなのに、「もっと面白く動いて欲しい」と僕が無意識に期待してしまうバグが発生していたことを、ChatGPT くんは教えてくれたのでした。

さて、こうして実験を終えた GitHub リポジトリを晒して終えようと思います。

Unprompted は、「明確な目的やゴールを与えられなくても動き続ける AI エージェント」を研究・開発するための実験用リポジトリです。

「Unprompted」、つまり「他人から命令されていない、自発的な」という意味で命名したプロジェクトですが、AI エージェントによるコード修正を繰り返した結果、悲しいまでにシステムプロンプトが肥大化している様がご覧いただけるかと思います。

もし、実装してあるコードの中で改善できることがあるとすれば、

といった実験ができる余地はあると思います。

しかしこうした調整は、本質的に「コードベースを観測している人間」の思惑がどんどん混ざっていくことになり、「真に目的を与えられていない AI」ではなくなっていくことも、容易に想像できます。行き着く先は「バイアスの中から仮の目的を見つけて『面白い動き』をして楽しませてくれる AI」になるか、「『目的がないこと』を忠実に守り続けて安定した自己ループに終始しようとする退屈な AI」になるか、のどちらかでしょう。

YouTube で「ゆっくりまっちゃ」さんがペーパークリップのシナリオというトピックを取り上げていらしたが、今回自分がブチ当たったのも、コレに通じるモノがあるように感じました。

AI に目的を与えない実験を通じて、「退屈を回避したい」という人間の欲望が露呈するという結果になって、とても楽しかったです (小並感)。