← 기사 목록
日本語https://zenn.dev/topics/llm/feed

同じ「Subagent」、5社で意味が全然違った ── 用語論争の正解を探す

추출된 키워드

41
Subagent·5Claude Code·5OpenAI Agents SDK·5CrewAI·5LangGraph·5AutoGen·5マルチエージェントフレームワーク·4ConversableAgent·4グラフのノード·4handoff·4Anthropic·4OpenAI·4Microsoft·3用語衝突·3AutoGen 0.4·3イベント駆動アーキテクチャ·3actor model·3Send API·3CompiledStateGraph·3Edge·3Node·3組織図ベースのオーケストレーション·3Agent クラス·3ステートレスな独立エージェント·3コンテキストの分離装置·3system prompt·3Markdown ファイル·3Deep Agents·3State·3LangChain·3runtime primitive·3LLM·2auto_reply·2register_reply·2v1.0·2Consensual·2Hierarchical·2Sequential·2awesome-claude-code-subagents·2VoltAgent·2YAML frontmatter·2

원문

11,818
同じ「Subagent」、5社で意味が全然違った ── 用語論争の正解を探す

同じ「Subagent」、5社で意味が全然違った ── 用語論争の正解を探す

先週の自分への突っ込み

先週 5/12 にマルチエージェントフレームワーク5社を並べた記事を書きました。Claude Code、OpenAI Agents SDK、CrewAI、LangGraph、AutoGen を「Subagent」「役割」「ノード」みたいなレイヤーで比較した記事です。

書き終えてから、自分でレビューして気持ち悪さが残った。

5社とも Subagent という単語を使っているのに、私はそれを「ほぼ同じ概念」として扱ってしまった。違うんですよね。同じ単語に5つの違う実装が貼り付いている。今週はそこをほどく記事を書きます。

5社のドキュメントから Subagent の定義だけを取り出して、横に並べてみた。結論から言うと、用語論争に「正解」はなかった。でも「どの会社がどう使い分けているか」のマップは作れた。

私は最初、CrewAI の

Agent
と Claude Code の
subagent
が同じものだと思っていました。両方とも「専門化された別の AI」ですよね。でも調べてみると、呼び出し方も状態の持ち方も並列性もライフサイクルも、全部違う。今回はその違いを 5 項目に分解します。

なぜ Subagent という単語だけ取り出すのか

エージェント周りの用語は爆発的に増えています。Agent、Subagent、Worker、Handoff、Node、Graph、Crew、Team、Swarm。フレームワークごとに新語が生まれ、似た意味で違う実装が乱立している。

その中で Subagent という単語は特殊です。

5社のドキュメントすべてに登場します。OpenAI Agents SDK は 2026 年 4 月 15 日のアップデートで「subagent pattern」を runtime primitive として正式採用しました。LangGraph はサブグラフを sub-agent として扱う設計を Deep Agents で前面に出している。Anthropic は Claude Code に

.claude/agents/
という専用ディレクトリまで用意した。CrewAI と AutoGen はもう少し前から Worker や Conversable な相手として subagent 相当を扱っています。

つまり Subagent は、5社が同じ単語で別の概念を指している 用語衝突の典型 なんです。ここを整理しないと、ライブラリ選定の議論が噛み合わない。

Anthropic Claude Code: ファイルとして存在する専門家

Claude Code の Subagent は

.claude/agents/
配下に置かれた Markdown ファイル です。私はこれを最初に見たとき「えっ、ファイル?」となりました。Python クラスでもなく、設定 JSON でもない。Markdown 一枚で Subagent が一人増える。

公式ドキュメントを読むと、構造はこうです。

  • YAML frontmatter にエージェントの名前と説明
  • 本文がそのエージェントの system prompt
  • メインの Claude が「このタスクはこの Subagent に任せたほうがいい」と判断して委譲する

Anthropic 公式は 5 つのビルトイン Subagent を提供しています。Explore、Plan、General-purpose、statusline-setup、Claude Code Guide。さらに VoltAgent の awesome-claude-code-subagents には 100 以上のコミュニティ製 Subagent が並んでいます。

ここで肝心なのは 「呼び出されたら別のコンテキストウィンドウで動く」 という点です。Subagent の冗長な思考は親に逆流せず、結果サマリだけが返ってくる。Anthropic のドキュメントには明示的にこう書かれています。「verbose output stays in the subagent's context while only the relevant summary returns to your main conversation」。

つまり Claude Code の Subagent は コンテキストの分離装置 です。専門家であると同時に、本体のコンテキストを汚さないための隔離壁でもある。

私はこれを知ったとき、上司に頼まれたタスクを部下に丸投げして「終わりました」とだけ報告するイメージが浮かびました。部下の頭の中で何があったかは上司は知らなくていい。そのため上司の頭は他のタスクに使える。

OpenAI Agents SDK: handoff される独立した相手

OpenAI Agents SDK の Subagent は ステートレスな独立エージェント です。これは Anthropic とまったく違う設計思想。

ベースになる概念は

handoff
です。あるエージェントが別のエージェントにタスクを引き渡す。デフォルトでは
transfer_to_<agent_name>
という名前のツールが自動生成される。エージェント A が「これは B に任せたほうがいい」と判断すると、
transfer_to_B
を呼び出して B に処理が移ります。

2026 年 4 月 15 日、OpenAI は Agents SDK 史上最大のアップデートを公開しました。このとき初めて subagent が runtime primitive として正式採用された。それまでは handoff を組み合わせて自前でオーケストレーションを書く必要があったのが、SDK 標準で planning agent → searcher → editor → verifier みたいな構成が組めるようになった。

OpenAI 公式ブログの表現がわかりやすいです。

Instead of writing your own orchestration loop and message bus, subagents become a runtime primitive.

Anthropic との違いを 1 行で言うと、Anthropic は 委譲して結果を返す モデル、OpenAI は タスクごとバトンを渡す モデル。前者はメインが司令塔のまま、後者はバトンを持つやつが主役になる。

handoff は会話の主導権ごと移動するので、ステートはタスクのために整形された状態でだけ引き継がれます。Anthropic の Subagent が「部下に丸投げ」なら、OpenAI のそれは「リレーで次の走者にバトンを渡す」感覚に近いと私は思っています。

CrewAI: 役割を持ったワーカー

CrewAI の Subagent は Agent クラスのインスタンス で、人間のチーム編成をそのまま模倣した設計です。

CrewAI ドキュメントを読むと、Agent には必ず 3 つの属性があります。

  • role
    : 役職(例: Senior Python Developer)
  • goal
    : その役職の目的(例: 高品質な Python コードを書く)
  • backstory
    : 背景設定(例: 10 年の経験を持つエンジニア)

これらは LLM への system prompt として注入されます。さらにツールを持たせたり、他のエージェントへの委譲を許可したり、構造化出力を強制したりできる。

CrewAI が他社と違うのは、プロセス という概念で Agent 群の協調方法を選べる点です。Sequential(順番に走る)、Hierarchical(マネージャー Agent が下に振る)、Consensual(投票で決める)。これは Anthropic の「親が子を呼ぶ」モデルでも、OpenAI の「バトンを渡す」モデルでもない、組織図ベースのオーケストレーション です。

私はここで本気で勘違いしました。CrewAI の Agent と Claude Code の Subagent は、似て非なるものです。前者は チームメンバー として常時待機している。Crew を kickoff した瞬間、定義された全 Agent が同じプロセスの中で動き出す準備をする。後者は呼ばれたときに別コンテキストで起動する 派遣社員 のようなものです。

役割と背景を与えて常時待機させるか、必要なときに呼び出して使い切るか。設計思想がまったく違う。

LangGraph: ノードとしての関数

LangGraph の Subagent は グラフのノード です。これは他のどれとも違う、もっとも抽象的な定義。

LangGraph では Agent や Subagent という言葉よりも先に、State、Node、Edge という基本語彙があります。State はワークフロー全体で共有されるデータ構造。Node は State を変換する関数。Edge はノード間の遷移。Subagent はこの「Node」のひとつにすぎない。

公式ドキュメントの表現を借りると、LangGraph models agent execution as nodes connected by edges sharing a common State object。ここに「Subagent」という独立した一級概念はありません。

ただし 2025 年 10 月の v1.0 リリース以降、subagent パターン自体は強く意識されています。LangChain チームが出している Deep Agents は、任意の CompiledStateGraph を sub-agent として親グラフに差し込める設計。

Send
API を使うと、親が複数の子グラフを動的に並列起動できる。

LangGraph の Subagent は 状態機械として定義された処理単位 であり、CrewAI のような役職も Claude Code のような Markdown 定義も持ちません。あるのは「この State を受け取って、次の State を返す関数」だけ。

抽象度が高いぶん表現力は最強です。ループも分岐もリトライも、グラフを書けば全部表現できる。学習コストと引き換えに、複雑なワークフローの記述能力を手に入れる。私が信長の野望で全国統一を目指すときの内政画面と似ています。柔軟だが、最初は迷う。

Microsoft AutoGen: 会話する相手

AutoGen 0.4 の Subagent は ConversableAgent の対話相手 です。これも他社と発想がだいぶ違う。

AutoGen の世界観では、すべてが会話としてモデル化されます。Agent 同士が自然言語のメッセージをやりとりし、会話履歴がそのまま状態になり、複数ターンの対話からマルチステップのワークフローが立ち上がってくる。

ConversableAgent
は AutoGen のコア抽象です。発話できる、聞ける、応答ロジックを登録できる。
register_reply()
で自前の応答関数を差し込める。
auto_reply
機能で人間の介入なしに対話を継続できる。

2026 年に大幅再設計された AutoGen 0.4 は、actor model ベースのイベント駆動アーキテクチャになりました。複数の ConversableAgent が非同期にメッセージを送り合い、分散実行も可能になっている。

ここで AutoGen の Subagent が他社と決定的に違うのは、ターン制でしか動かない という点です。Claude Code の Subagent は呼ばれたら一気に走り切って結果を返す。CrewAI の Agent は Task 単位で完結する。AutoGen の ConversableAgent は 何ターンも往復しながら徐々に結論に近づく

これは喧嘩の仲裁会議に似ています。AB 両者の言い分を聞きながら少しずつ落としどころを探る。一発で結論は出ない。出るまで対話する。これが AutoGen の世界観。

5項目で並べる比較表

5社の Subagent を 5 つの観点で並べました。

5社のSubagent比較表

観点Claude CodeOpenAI Agents SDKCrewAILangGraphAutoGen
呼び出し方親が委譲handoff (バトン)Crew が orchestrateグラフが起動対話メッセージ
状態別コンテキストステートレス委譲Agent 単位で保持共有 State会話履歴
並列性あり (別 ctx)handoff チェーンTask 単位で並列可Send API で並列非同期 actor
通信プロトコルファイル + 親子tool 呼び出しCrew 内部 APIState 更新メッセージ送信
ライフサイクル呼ばれて起動handoff で起動kickoff で常時グラフ実行中アクター常駐

並べてみるとわかるのですが、同じ単語に 5 つの違う設計哲学 が貼り付いています。

「呼び出し方」の列だけ見ても、親が司令塔のままなのは Anthropic。バトンを渡すのは OpenAI。組織図に従うのは CrewAI。グラフの遷移は LangGraph。発話なのは AutoGen。比喩がまるで一致しない。

これは技術的には混乱の原因ですが、思想的には興味深い。 5 社それぞれが、エージェントの分業を別の哲学で捉えている ということだから。

「正解」はあるのか

ここまで読んで、「で、どの定義が正しいの?」と思った方、残念ながら正解はありません。

正解がないのは、Subagent という単語がそもそも 何かを切り出した部分エージェント という曖昧な意味しか持たないからです。何から切り出したか、どう切り出したかが各社で違う。OpenAI は会話の主導権を、Anthropic はコンテキストを、CrewAI は役職を、LangGraph はグラフのノードを、AutoGen は対話の相手を切り出している。

ただし 実務で選ぶ基準 はあります。

  • 単発タスクをサッと専門家に投げたい: Claude Code 型
  • 長いタスクを段階的にバトン渡ししたい: OpenAI Agents SDK 型
  • 役割分担で組織を作りたい: CrewAI 型
  • 状態遷移とループを細かく制御したい: LangGraph 型
  • 複数 AI が議論しながら結論を出してほしい: AutoGen 型

5 社の Subagent はゼロサムではなく、用途が違うだけです。私は今、Claude Code で日常タスクを回しながら、複雑な分岐がほしいプロジェクトでは LangGraph を試しています。両立可能。

用語が乱立するときの読み方

最後にメタな話。

エージェントの世界では、用語が乱立する時期が今後も続きます。Subagent の次は Skill、Tool、Hook、Capability、Workflow とまだまだ続く。同じ単語に複数の実装が貼り付くのは避けられない。

私の対処法はシンプルで、単語ではなく「5 項目」で読む ようにしています。今回でいえば、呼び出し方・状態・並列性・通信プロトコル・ライフサイクル。これだけ揃えると、新しいフレームワークが出てきても同じ表に並べられる。

新語を見たら、その新語が何を切り出した部分概念なのかを 5 項目で書き出す。これだけで用語論争の 9 割は終わります。残りの 1 割は哲学の話なので、放っておいていい。

エンジニアとして大事なのは、用語の正解を当てることではなく、 目の前のタスクに対してどの設計思想が一番ハマるか を見極めることですよね。私は新しいフレームワークが出るたびにこの 5 項目で並べ直す癖をつけています。3 ヶ月後にまた新しい Subagent が出てきても、これだけあれば慌てない。

これらをさらに掘り下げた Book は執筆中です。マルチエージェント協調の歴史と各社の設計思想の差を、コードレベルまで降りて整理しています。公開時にまたお知らせします。

まとめ

  • Subagent という単語は 5 社で意味が違う。共通定義はない
  • Claude Code は コンテキスト分離、OpenAI はhandoff バトン、CrewAI は役職ワーカー、LangGraph はグラフノード、AutoGen は対話相手
  • 5 項目(呼び出し方・状態・並列性・通信・ライフサイクル)で並べると違いが見える
  • 実務での選び方は、自分のタスクが上の 5 つのどれに当てはまるかで決める
  • 用語論争に時間を使わず、設計思想で判断する

面白くいきましょう。

参考文献

GitHubで編集を提案