個人開発においてAI Agentを開発する機会があり、エージェント開発のノウハウを詰めた12 Factor Agentを読みました。そこで、AI Agentという仕組みは、新たなプログラミングの抽象化の手段にすぎないという考えを持ったため、こちらで言語化します。
AI Agentという概念について、これまでのパラダイムと一線を画す革新的技術であると捉えられがちです。
自然言語で任意のワークフローが思うがままに実行できる技術。Gensparkのようにスライドなどを自然言語で作成できたり、Claude Codeでプログラミングをお任せできたり、もはや出来ないことは無いのではと思わせてくれます。
AI Agentは非常に高度な抽象化で、非決定論的なプログラミングを我々に提供してくれます。そして、つまるところ高度な仕組みを備えた関数のようなものと理解すると、プログラミングにおける新しい抽象化の仕組みと捉えることができます。
これまで決定論的なプログラミングにおいてはifやforによって、Aの場合はhoge、Bの場合はfooといった入力を想定して、プログラマが結果を記述していく必要がありました。
しかし、ここにLLMを組み込むことによって、任意の入力を引数として受け取り処理を実行するブラックボックスみの強い関数を定義してしまうことが可能になりました。
さらにAI Agentといった生のLLM利用よりも一段抽象化した概念を持ち込めば、処理そのものを中断させたり、エラーが発生したときに自己回復によって正しい処理にフォールバックしたり、人間によるフィードバックを受け付けることができるワークフローに変容します。
とりわけ最後の人間によるフィードバックは非常に重要な概念で、任意の入力を受け付けることができるLLMならでは、人間による自然言語による入力をもとに、特定の処理を任意のタイミングで割り込みできることを意味します。
これまでAPI呼び出しによって、決定論的に組まれていたロジックを、自然言語で自由自在に操作できる手法を手に入れた、いわばそれ以上でもそれ以下でもないのです。しかしながら、自然言語で呼び出しができること自体が、人間にとって、改めて魔法のように感じられる理由でしょう。
Martin Fowler氏のブログにおいても、LLMは新しい抽象化をもたらす に近しい記述が言及されています。
しかし、LLMには最初の移行と同程度のインパクトがあると思います。しかも、単に抽象化のレベルを上げるだけでなく、「非決定的なツールでプログラミングするとはどういうことか」という問いを私たちに投げかけています。
ある種、我々のようなプログラマにとっては、もはや決定論的なアプローチに固執する必要もないほど高度な非決定論的な手段を手に入れることに成功しました。
非決定論的なアプローチそのものは、従来の機械学習における異常検知などの手法においても採用されてきました。これらは特定の領域においては非常に強力でしたが、入力や出力自体は決定論的に決められたものだったでした。
ついに任意の入力を引数とする関数を手に入れ、どのように利用するか、それもまた新しい時代のプログラミングにとって必要なことであり、新しい抽象化の道具を我々に与えてくださったのでしょう。
これからのプログラミングも、また一段と面白くなりそうです。