先週、本番環境でエージェントを停止した。30行のPythonに置き換えた。スクリプトの方が速く、安く、絶対にハリュシネートせず、私はよく眠れている。これはAIエージェントをいつ使わないかについての話だ。生計のためにエージェントを作っている人間が語る。
エージェントハイプには盲点がある。エージェントの作り方について書く人は多い。エージェントが間違ったツールである場合について書く人はほとんどいない――しかしそれこそより有用なスキルだ。forループが必要なところで推論ループに手を伸ばすことは、この分野全体で最もコストのかかるミスだからだ。
サイン:タスクは決定論的か?
これが私の最初のフィルタだ。同じ入力が常に同じ出力を生むべきなら、エージェントは要らない。コードが必要だ。
CSVをJSONにパース。パターンでファイルをリネーム。APIを呼んでレスポンスを変形。全レコードにemailフィールドがあることを検証。これらは決定論的だ。エージェントはやってくれる。しかし遅く、高く、ゼロでない確率で尋ねることなくスキーマを「改善」する可能性がある。スクリプトはミリ秒で無料で、毎回同じ方法でやり遂げる。
経験則:エージェントはパスが不明なタスク向けだ。ステップを書き下せるなら、書き下せ。毎回のランでモデルにそれを再発見させるために支払うな。
エージェントが本当に価値を発揮する場所
タスクにランタイムでの判断を必要とする真の曖昧さがある場合、エージェントは輝く。「この失敗しているテストを見て、なぜか調べて、直せ。」「この混乱したサポートチケットを読んでルーティングしろ。」「この3つの半壊したアプローチの中から一つ選んで完成させろ。」エージェントが発見するものに基づいてパスが分岐する。事前にスクリプトできない。何が見つかるか分からないからだ。
これが境界線だ。不明なパス、ランタイムの判断、ファジーな入力。タスクが3つ全部持っているならエージェント。一つも持っていないならスクリプト。面白いケースは中間にあり、そこで人々は間違える――少しの曖昧さを見てフル推論ループに手を伸ばす。中間に一つのLLM呼び出しがあるスクリプトで十分だったのに。
ハイブリッドがたいてい答えだ
私のお気に入りのパターンは「エージェント」でも「スクリプト」でもない。判断が本当に住む場所で一つの集中したモデル呼び出しをするスクリプトだ。
# エージェントではない。一箇所に脳を持つパイプライン。
rows = parse_csv(path) # 決定論的
for r in rows:
r["category"] = classify(r) # 一つのLLM呼び出し、構造化出力
write_json(rows) # 決定論的
classify呼び出しがファジーな部分をやる――フリーテキストを読んでバケット分類する。周囲は全部普通のコードだ。マルチターンループなし、ツール呼び出しダンスなし、エージェントがファイルシステムを探索しようと決めることもない。モデルの判断をちょうど必要な場所で得られ、必要でない場所では得ない。エージェントより桁一つ安く、実際にテストできる。
必要なかったループのコスト
お金の話をしよう。請求書は現実だから。ループするエージェント――読む、考える、ツール呼び出し、観察、また考える――は毎ターンで成長するコンテキストを再送する。8ターンかかるタスクは会話全体を8回再処理できる。「シンプルな」エージェントタスクが作業対象のコードベース全体より多くのtokenを燃やすのを見たことがある。既に読んだファイルを読み続けていたからだ。
決定論的なタスクには純粋な無駄だ。タスクが必要としない推論に支払った。毎時間動くcron jobにそれを掛け算すると、sedコマンドで置き換えられたはずの資金燃焼機を作ったことになる。
レイテンシと信頼性、より静かなコスト
請求書に現れないものもある。エージェントは遅い。ツール呼び出しを伴う推論ループは数秒から数分かかる。それをユーザー向けのホットパスに置いたなら――フォーム送信の検証など――regexを書く手間を省くために製品が壊れているように感じさせてしまった。
そして信頼性。間違えるスクリプトは予測可能に間違える。バグを直せば永久に直る。間違えるエージェントは創造的に間違える。毎回違う方法で。「直す」とはプロンプトを微調整して祈ることを意味する。正確性が交渉不可能なものすべてに対して――お金の移動、auth、データ削除――私は読めるコードと実行できるテストが欲しい。少し押せるだけのモデルではなく。
私の実際のチェックリスト
タスクをエージェントにする前に、これら全てを通過させる:
- ランタイムで見つけるものに基づいてパスが本当に変わる。
- 人間がするには、ルール従遂だけでなく判断が必要だ。
- 入力が十分に乱雑でコードが確実にパースできない。
- 出力の時々の奇妙さは生き延びられる。
どれか一つでも失敗?おそらくスクリプトか、一つのLLM呼び出しを組み込んだスクリプトだ。
不快な真実
全てをエージェントにしたい衝動は、エージェントを売るツール会社からも来ている。当然エージェントフレームワークはあらゆる問題をエージェント問題にしたい。それがビジネスモデルだ。
あなたの仕事はより狭くてより正直だ:動く最低限の機械でタスクを解決しろ。時には洗練されたマルチエージェントシステムだ。しばしばそれは2015年に書けたPythonファイルだ。シニアな動きはどちらかを知ること、そして退屈な方を出荷することに誇りを持ちすぎないことだ。私の本番スクリプトには推論ループがない。一度もアラートを送ってこない。
