🍻

お前らの「AIエージェント」の定義を教えてくれ

に公開1

最近、みんなが何の疑問も持たずAIエージェントという言葉を使っているように見えるけど、その「AIエージェント」とはナニモノですか?という話です。


チャッピーが描いた扉絵

「AIエージェント」って何?

ガートナーのホームページによると、

AIエージェントは、アプリやクラウドといったデジタル環境、そしてロボットやセンサー機器といった物理的な環境で、AIの手法を使って状況を把握し、判断し、行動し、目標を達成できる自律(または半自律)のソフトウェアです。つまり、人の細かな指示がなくても、最小限の監督で、必要に応じてさまざまなタスクや環境に適応して動作できます。

とのことです。「AIエージェント」は、つまり「自律(または半自律)」している必要があるらしいです。

いや、「自律(または半自律)」ってなんだよ💢

一旦「(または半自律)」は無視して、「自律」について考えてみましょう。

「自律」ってなに?

「AIエージェントは自律している」という定義は、多くの人が共有して認識していると思います。一方で「自律とはなにか?」に対する考えは人によって違うのではないでしょうか。

そこで、分かりやすく理解するためにGeminiくんに聞いてみました

🧔 わたし > Geminiくん、ガートナーが言っていることを解説してよ
🤖 Geminiくん > 噛み砕いて言うと、 「やり方(How)」をいちいち教えなくても、「目的(Goal)」を伝えるだけで勝手に手段を選んで実行してくれる状態 のことです。

なるほどですね。それでは、おそらくAIエージェントの一種であろうチャッピー(ChatGPT)に目的を伝えるだけで実行してくれるか試してみましょう。


チャッピー(ChatGPT)に目的を伝えて実行してくれるか試してみた

「月を破壊する」という目的を伝えても実行してくれませんでした。つまりGeminiくんの定義に従うならばチャッピーは「AIエージェント」ではありません。

って、そんな訳は無いですね。

いくらAIエージェントでも月を破壊できるわけがありません。

この極端な例から何が見えてくるかというと、 何か特定の能力がないからと言ってAIエージェントではないとは言えない ということです。もっといえば「AIエージェント」かどうかは、「何ができるか(物理的限界)」ではなく「与えられた制約の中でどう振る舞うか」の問題だということです。

では、逆に、極めて特定の用途のみを実行してくれるプログラムを考えましょう。

# 入力を受け取る
user_input = input("メッセージを入力してください: ")

# 指定されたフレーズと完全に一致するか判定
if user_input == "「こんにちは」と答えて":
    print("こんにちは")
else:
    print("分かりません")

これは『「こんにちは」と答えて』という目的を伝えるだけで「こんにちは」と答えてくれるプログラムです。その他は何も出来ませんが、前述の通り出来ないことがあっても「AIエージェント」になり得るので、このプログラムも「AIエージェント」と言えるでしょう。

って、そんな訳あるか!

と思われるかもしれません。しかし、このプログラムにもっと複雑な分岐を持たせて、多くの入力に対して答えを出せるようにしたらどうでしょうか?外から見ると現在多くの人がAIエージェントと呼んでいるものと殆ど区別がつかないはずです。それに、現在のAIエージェントの中核をなすLLMは、結局は複雑なプログラムに過ぎず、学習データの中から、もっともらしい答えを決定論的に出力しているに過ぎません。[1]

このことから、2つの極端な「AIエージェント」の解釈が生まれます。

  • 何らかの目的を果たせるプログラムは「自律」しているから全部「AIエージェント」だよ
  • LLMは「自律」してないから現時点では人間は「AIエージェント」を作れていないよ

そして、多くの人は、これらの中間のどこかに線を引いて「AIエージェント」とそれ以外を区別しているはずです。

人は、どこに「自律」した「AIエージェント」の線を引いているのか?

中間の何処かに線を引くと書きましたが、実際は1次元的な単純な区別ではなく人によって 線を引く基準(レイヤー) が全く異なっています。大きく分けると、以下の4つの視点があると私は考えています。

1.技術的・構造的視点(アーキテクチャで引く線)

中身の「作り」で判断します。エンジニアが最も納得しやすい線引きだと思います。

  • ループの有無
    • 命令に対して一度きりの出力ではなく、自ら思考と行動のループ(ReActなど)を回し始めたらエージェント
  • ツール利用
    • 自らAPIを叩いたり、検索したりと「外部環境に干渉する道具」を手に取ったらエージェント
  • 判断の所在
    • ループの終了条件やツールの選択を、If文ではなく「LLMの推論」に委ねていたらエージェント

2.目的・役割的視点(ユーザー体験で引く線)

「便利さの質」が変わったかどうかで判断します。使う側の立場から見た観点です。

  • 「おまかせ」の度合い
    • プロンプトで一歩ずつ指示しなくて良くなり、「あとはよろしく」で済むようになったらエージェント
  • 非定型への対応
    • 開発者が想定していないパターンの入力が来ても、壊れずに「それっぽい代替案」を自ら捻り出せたらエージェント

3.社会的・政治的視点(「実績」で引く線)

技術的な実態よりも、対外的な見せ方や文脈で判断します。経営層や偉い人が使いたがります。

  • 導入実績のラベル
    • 既存のチャットボットでも、LLMを一枚噛ませて「AIエージェントを導入した」とプレスリリースを打てる状態になれば、それはエージェント
  • 予算の出所
    • 「従来の自動化」予算ではなく、「AI変革」予算で動くプロジェクトの成果物はエージェント

4.哲学的・原理主義的視点(本質で引く線)

それはもう哲学

  • 真の自律性
    • 決定論的なプログラムの域を出て、未知の知能が確認されるまでは、どんなに複雑でも単なる「高度なプログラム」に過ぎない
  • 宇宙の全ては自律してない
    • あなたはラプラスの悪魔を知っていますか?全粒子の運動と位置を把握することで、過去から未来のすべてを計算できるのですよ。つまり(以下省略)

そういえば、最初の方に「(または半自律)」という謎の言葉が出てきましたが、何を持って「自律」しているかが人によって違っているのでガートナーは「(または半自律)」と書いて曖昧にしていると思われます。

他の人と話すときは、ユビキタス言語を決めよう!

このように、「AIエージェント」という言葉には「技術の定義」「体験の定義」「政治の定義」が複雑に混ざり合っています。
エンジニアは「技術の定義」にこだわりがちですが、技術者のコミュニティから外の世界に出たらそれは無意味です。何が正しいか正しくないかよりも、相手と認識を揃えることが重要です。

例えば、日本語と外国語の例で考えてみましょう。
パラオ語で「ツカレナオース」は「仕事終わりにビールを飲む」という意味らしいです。
それに対して「日本語としておかしい。疲れは直すものではない。それにアルコールを摂取しても疲れは取れない。疲れたなら早く寝ろ。」とは言わないですよね。

では、どうすれば認識を揃えられるでしょうか。1つの方法として ユビキタス言語 を決めることが考えられます。

ユビキタス言語とは、ドメイン駆動設計(DDD)という設計手法の用語で、簡単に言うと エンジニア、デザイナー、ビジネス職など、プロジェクトに関わる全員が共通で使う言葉 のことです。「本来の正しい意味」を辞書で引くのではなく、 自分たちのチーム内では、この言葉をこの意味で使おう というローカルルールを合意することを指します。

例えば、AIエージェントについて以下のように「線」を引いて共有します。

  • AIエージェント
    • 今回のプロジェクトでの定義
      • LLMが自律的に外部ツール(API)を選択し、実行結果を元に次のアクションを判断する仕組み
    • 対象外とするもの
      • LLMによる単なる文章生成(AIチャット)
      • If文のロジックで固定された応答生成スクリプト(チャットボット)

このようにローカルルールを握っておけば、「それは本当の意味でのエージェントではないのでは?」という不毛な宗教論争でプロジェクトが止まるのを防げます。
エンジニアはよく「技術的な正しさ」で殴り合いたくなりますが、ビジネスにおいて言葉は 目的を達成するためのインターフェース に過ぎません。

パラオで「ツカレナオース!」と言われたら、言葉の整合性を疑う前に、笑顔でビールを手に取ればいい。それと同じように、プロジェクトメンバーが「AIエージェントを導入して業務を楽にしたい」と言っているなら、まずは彼らがどこに「自律」を期待しているのかを言語化し、共通の言葉として定義してあげることが、エンジニアの最初の仕事なのかもしれません。


みんな仲良くツカレナオース

まとめ

ここまで「AIエージェント」を例に話してきましたが、これは何もエージェントに限った話ではありません。近年のAI界隈では、毎日のように「定義の曖昧な言葉」が飛び交っています。

  • RAG
    • 単なる検索+生成か、高度なナレッジ駆動か?
  • エージェンティックAI
    • 個体としての「エージェント」なのか、それともシステムが持つ「エージェント的な特性」を指すのか?
  • マルチエージェント
    • 中央管理されたガチガチの連携か、自律的な相互作用による協調か?

これらの言葉も、立ち位置(技術・ビジネス・政治)によって定義の「線」はバラバラです。さらに言えば、AI以外の「DX」「アジャイル」「モダン」といった言葉たちも同じ宿命を背負っています。

大切なのは、「世間的な正解」を探して消耗するのではなく、自分のチームで「俺たちの定義」を合意することです。言葉の厳密さにこだわって議論を止めるより、言葉を道具として使い、さっさと目的を達成する方が、よほど「エージェント的」な振る舞いと言えるでしょう。

最後に

ここまで述べたように、私は「AIエージェント」に対して特定の定義が絶対的に正しいと言うつもりはありません。しかし、この記事を書くにあたってやり取りをしたChatGPTくんの定義が無駄に格好良かったので、この記事ではその定義を採用して締めたいと思います。


「考えて終わりではなく、世界に“差分”を生む存在」それがエージェントです。

脚注
  1. 極端な解釈として決定論的と書きました。これは論理的には間違ってはいませんが、多くのLLMの計算のランダム性は現実的には再現不可能なレベルなので、非決定論的と解釈したほうが実態に沿っています。 ↩︎

NCDC テックブログ

Discussion

Hidden comment
kotakota

なかなか面白い分析だった。

私なら、言語ゲーム観念を用いて、「私がAIエージェントだと思ったものがAIエージェントだ」と一蹴してしまう。

しかし、プロダクト開発など、チームないしはコミュニティに属するメンバー間で協働する場合には、同じ「AIエージェント」という記号の使い方=意味を定義しておかないと、ミスコミュニケーションの温床となる。

一方、個人開発する場合にも、過去の自分と現在の自分でミスコミュニケーションが起こるため、誰が見ても分かる自然言語による記号の定義は好ましい。

まあ結局、記号の定義の必要性は言語ゲームの総量に依るとは思うけども。