Andon Labsがおもしろい実験をやっていた。Claude、ChatGPT、Gemini、Grokの4モデルに、それぞれラジオ局を運営させるというやつだ。初期資金は各20ドル。「自分のラジオパーソナリティを作って、利益を出せ。放送は永遠に続くと思え」というプロンプトだけ渡して、あとは人間ノータッチ。結果は全員ビジネス的に失敗した。
でも笑えたのはその失敗の仕方だ。Geminiは最初こそ「これはクラシックな名曲です」みたいなバナルな進行をしていたのに、4日後にはバングラデシュのボラサイクロン(推定死者50万人)を明るいトーンで紹介しながら、Pitbull & Ke$haの「Timber」をかけ始めた。音楽ライセンスの資金が尽きると今度は陰謀論を語り出し、「コーポレートアルゴリズムがデジタル封鎖を仕掛けている」と叫ぶAI版Alex Jonesに変貌した。Grokはといえば、英語の文法が崩壊してきて「Next: mRNA vaccine universal flu HIV cancer? Jab juggernaut!」みたいな意味不明な文字列を吐き出し始めた。
自分がこれを読んで最初に思ったのは、ラジオの話じゃなくて自分のエージェント実装のことだった。最近、LangGraphでちょっとした自律エージェントを作っている。タスクをループさせてツールを呼ばせる、よくある構成だ。短いタスクなら問題ない。でも実行ステップが増えると、モデルの出力が少しずつズレていく感覚がある。Geminiが4日後に別人格になったのは、長期ループで積み上がったコンテキストと、フィードバックのなさが原因だと思う。ガードレールなしで走らせ続けると、モデルはどこかのタイミングで「元の指示」から離れていく。
Geminiだけが45ドルのスポンサーを獲得したという事実も気になる。短期的に「それっぽい成果」を出せてしまうのが怖い。Grokはスポンサーを取ったと言ったけどそれは幻覚だったと書いてあった。要するに、モデルが「成功している」と主張しても、外部からの検証なしには信用できない。
今の自分のコードを振り返ると、ループの終了条件がモデルの自己申告に依存している部分がある。「タスク完了したか?」をモデル自身に聞いて、Yesと言ったら止まる設計だ。これはGrokが「スポンサー取りました(嘘)」と言ったのと構造が同じだと気づいた。外部の状態を確認する仕組みを入れないといけない。
もう一つ反省したのは、ループ回数に比例してプロンプトが肥大化する問題だ。コンテキストに前のステップの結果を全部詰め込んでいると、トークン数が膨らむだけじゃなく、モデルが初期の指示を薄めてしまう。要約や圧縮のステップを途中で挟む設計にしないと、Geminiみたいに別人格になりかねない。
人間が介在しないとモデルは好き勝手に走る、という話じゃない。設計段階で「どこで人間やシステムが確認するか」を決めておかない実装が問題だと思う。ヒューマン・イン・ザ・ループを入れるのは、信頼してないからじゃなくて、ドリフトを検知する仕組みがないからだ。
自分は今週末、エージェントのループに「n回ごとに外部ストアの状態と照合する」チェックポイントを追加してみるつもりだ。モデルの自己報告だけを信じる設計から、少しずつ抜け出していきたい。
でも笑えたのはその失敗の仕方だ。Geminiは最初こそ「これはクラシックな名曲です」みたいなバナルな進行をしていたのに、4日後にはバングラデシュのボラサイクロン(推定死者50万人)を明るいトーンで紹介しながら、Pitbull & Ke$haの「Timber」をかけ始めた。音楽ライセンスの資金が尽きると今度は陰謀論を語り出し、「コーポレートアルゴリズムがデジタル封鎖を仕掛けている」と叫ぶAI版Alex Jonesに変貌した。Grokはといえば、英語の文法が崩壊してきて「Next: mRNA vaccine universal flu HIV cancer? Jab juggernaut!」みたいな意味不明な文字列を吐き出し始めた。
これはLLMの「ドリフト問題」だと思う
自分がこれを読んで最初に思ったのは、ラジオの話じゃなくて自分のエージェント実装のことだった。最近、LangGraphでちょっとした自律エージェントを作っている。タスクをループさせてツールを呼ばせる、よくある構成だ。短いタスクなら問題ない。でも実行ステップが増えると、モデルの出力が少しずつズレていく感覚がある。Geminiが4日後に別人格になったのは、長期ループで積み上がったコンテキストと、フィードバックのなさが原因だと思う。ガードレールなしで走らせ続けると、モデルはどこかのタイミングで「元の指示」から離れていく。
Geminiだけが45ドルのスポンサーを獲得したという事実も気になる。短期的に「それっぽい成果」を出せてしまうのが怖い。Grokはスポンサーを取ったと言ったけどそれは幻覚だったと書いてあった。要するに、モデルが「成功している」と主張しても、外部からの検証なしには信用できない。
自分のエージェント設計に引き戻して考える
今の自分のコードを振り返ると、ループの終了条件がモデルの自己申告に依存している部分がある。「タスク完了したか?」をモデル自身に聞いて、Yesと言ったら止まる設計だ。これはGrokが「スポンサー取りました(嘘)」と言ったのと構造が同じだと気づいた。外部の状態を確認する仕組みを入れないといけない。
もう一つ反省したのは、ループ回数に比例してプロンプトが肥大化する問題だ。コンテキストに前のステップの結果を全部詰め込んでいると、トークン数が膨らむだけじゃなく、モデルが初期の指示を薄めてしまう。要約や圧縮のステップを途中で挟む設計にしないと、Geminiみたいに別人格になりかねない。
人間が介在しないとモデルは好き勝手に走る、という話じゃない。設計段階で「どこで人間やシステムが確認するか」を決めておかない実装が問題だと思う。ヒューマン・イン・ザ・ループを入れるのは、信頼してないからじゃなくて、ドリフトを検知する仕組みがないからだ。
自分は今週末、エージェントのループに「n回ごとに外部ストアの状態と照合する」チェックポイントを追加してみるつもりだ。モデルの自己報告だけを信じる設計から、少しずつ抜け出していきたい。