コンテンツにスキップ

9.6.2 Agent フレームワークの全体像

  • Agent プロジェクトでなぜフレームワークがよく使われるのかを理解する
  • さまざまなフレームワークの抽象レベルの違いを整理する
  • フレームワークが何を省いてくれるのか、逆に何を失わせるのかを知る
  • フレームワーク選定の初歩的な視点を身につける

Agent フレームワークの位置づけマップ

この図はトレードオフの地図として読むとわかりやすいです。低レベルのフレームワークほど制御しやすく、高レベルのフレームワークほど立ち上げやすく、検索寄りのフレームワークは文書と知識を中心にしたシステムで強みを発揮します。


なぜ Agent フレームワークが必要なのか?

Section titled “なぜ Agent フレームワークが必要なのか?”

フレームワークがないと、自分で書くときに何が大変なのか?

Section titled “フレームワークがないと、自分で書くときに何が大変なのか?”

少し複雑な Agent システムでは、通常、次のようなことを自分で扱う必要があります。

  • 状態管理
  • ツール呼び出し
  • メッセージの受け渡し
  • 失敗時の再試行
  • トレース
  • 複数 Agent の協調

もちろん手書きでもできますが、すぐに次のような問題にぶつかります。

  • 定型コードの重複が多い
  • プロジェクトごとに構成がバラバラになる
  • デバッグや拡張がどんどん難しくなる

フレームワークは本当に何を解決してくれるのか?

Section titled “フレームワークは本当に何を解決してくれるのか?”

まずは一言で覚えておきましょう。

フレームワークは、あなたの代わりに製品を作るものではなく、よく使う構造を先に整えてくれるものです。

たとえば、次のようなものです。

  • グラフ構造の状態フロー
  • ツール登録の仕組み
  • Agent 間協調の抽象化
  • 実行と観測のインターフェース

フレームワークの大きな違いは、たいてい「できるかどうか」ではなく「どうやるか」にある

Section titled “フレームワークの大きな違いは、たいてい「できるかどうか」ではなく「どうやるか」にある”

とても大事な視点:抽象レベル

Section titled “とても大事な視点:抽象レベル”

多くのフレームワークは、次のようなことができます。

  • ツールを接続する
  • ワークフローを実行する
  • マルチ Agent を扱う

でも、抽象しているレベルは違います。

  • あるものは「低レベルで積み木を組む」感覚に近い
  • あるものは「高レベルで役割を編成する」感覚に近い
  • あるものは検索やデータ整理により強い

さまざまなフレームワークは、いろいろな種類のキッチンだと考えるとわかりやすいです。

  • 鍋や皿を渡されて、自分で料理するタイプ
  • 半完成のセットを渡されて、説明どおりに組み合わせるタイプ
  • 特定の料理が得意な専門タイプ

つまり、フレームワークの違いは「誰が強いか」よりも、むしろ

今のタスクとチームのやり方に、誰がより合っているか。

という点にあります。


以下の図は正確な順位づけではなく、直感をつかむためのものです。

フレームワークの方向性得意なことよくある印象
グラフ / ワークフロー型複雑な状態フロー、明確な制御柔軟だが、よりエンジニアリング寄り
検索 / ナレッジ型文書、インデックス、RAGデータ志向が強い
役割 / チーム型複数 Agent の役割分担と協調すぐ始めやすいが、抽象度が高い
汎用実験型デモを素早く作る柔軟だが、工程面は自分で補う必要がある

この図でいちばん大事なのは、次の考え方です。

まず「どれが一番いいか」を聞くのではなく、「自分の問題はどのタイプに近いか」を考えること。


フレームワークは一般的に何を省いてくれるのか?

Section titled “フレームワークは一般的に何を省いてくれるのか?”

たとえば、次のようなことです。

  • 今のタスク状態をどこに持つか
  • 次にどこへ流すか
  • 失敗したときにどう戻すか

たとえば、次のようなことです。

  • ツール登録
  • 呼び出し結果のラップ
  • エラー処理

たとえば、次のようなことです。

  • トレース
  • ステップ の記録
  • 中間状態の可視化

つまり、フレームワークのよくある価値は「モデルが賢くなること」ではなく、

システムの構成をよりわかりやすくしてくれること。

にあります。


フレームワークにはコストもある

Section titled “フレームワークにはコストもある”

抽象化が高いほど、低レベルの制御は失いやすい

Section titled “抽象化が高いほど、低レベルの制御は失いやすい”

フレームワークは便利ですが、同時に次のようなコストもあります。

  • フレームワーク自体を学ぶ必要がある
  • フレームワークの制約を受ける
  • デバッグ時に内部抽象を理解しないといけない

多くの初心者は、Agent が作れないのではなく、

  • まだタスクをちゃんと整理できていないのに
  • 先にたくさんのフレームワーク API を学んでしまう

という状態に陥ります。

その結果、最後に身につくのはフレームワークの使い方であって、Agent の本質ではありません。

なので、正しい順番はたいていこうです。

まずシステムを理解し、それからフレームワークで速度を上げる。


最小限の「フレームワーク感」の例

Section titled “最小限の「フレームワーク感」の例”

次の例は、特定の実在フレームワークではなく、「フレームワーク的な抽象化の感覚」を示す最小例です。

class MiniWorkflow:
def __init__(self):
self.steps = []
def add_step(self, name, fn):
self.steps.append((name, fn))
def run(self, state):
for name, fn in self.steps:
state = fn(state)
print(name, "->", state)
return state
def retrieve(state):
state["docs"] = ["返金ポリシー"]
return state
def answer(state):
state["answer"] = f"{state['docs']} をもとに回答を生成する"
return state
wf = MiniWorkflow()
wf.add_step("retrieve", retrieve)
wf.add_step("answer", answer)
wf.run({"query": "返金ポリシーとは何ですか"})

想定出力:

retrieve -> {'query': '返金ポリシーとは何ですか', 'docs': ['返金ポリシー']}
answer -> {'query': '返金ポリシーとは何ですか', 'docs': ['返金ポリシー'], 'answer': "['返金ポリシー'] をもとに回答を生成する"}

なぜこのコードに「フレームワーク感」があるのか?

Section titled “なぜこのコードに「フレームワーク感」があるのか?”

これはすでに次のようなものを抽象化しているからです。

  • ステップ
  • state
  • フローの組み立て

本物のフレームワークは、この方向をもっと完全に、もっと複雑にしたものにすぎません。


どんなときはフレームワークを使わないほうがよいのか?

Section titled “どんなときはフレームワークを使わないほうがよいのか?”

次のようなシステムなら、手書きでも十分なことがあります。

  • 小さな実験
  • 単一 Agent
  • ツールが少ない
  • 状態フローがとても単純

このような場合は、手書きのほうが悪くないどころか、むしろ良いこともあります。

  • 本質を理解しやすい
  • フレームワークが抽象負担になることがある

なので、「フレームワークを使うこと」自体を、成熟の唯一の証拠だと思わないでください。


まず、次の質問を自分に投げかけてみてください。

  1. 自分のシステムはどれくらい複雑か?
  2. 状態フローは明らかに複雑か?
  3. 複数 Agent の協調が中核か?
  4. 検索 / 文書機能が主軸か?
  5. チームは低レベルの制御を重視するのか、それとも早く始めることを重視するのか?

これらに答えられるようになると、フレームワークを見たときの判断がかなりしやすくなります。


先にフレームワークを学んでから、システムを学ぶ

Section titled “先にフレームワークを学んでから、システムを学ぶ”

この順番だと、「API は使えるけれど、アーキテクチャの判断ができない」という状態になりやすいです。

流行っているからそのまま選ぶ

Section titled “流行っているからそのまま選ぶ”

流行しているフレームワークが、今のプロジェクトに合うとは限りません。

フレームワーク自体を能力だと思い込む

Section titled “フレームワーク自体を能力だと思い込む”

フレームワークはあくまで組み立て方であって、システム品質の保証ではありません。


このページを終えたら、この証拠カードを残します。

問題の形
ワークフローグラフ、検索アプリ、役割チーム、または実験
フレームワーク選択
どの抽象化を追加し、何を隠すか
追跡記録
state、node、tool call、message、または run id
失敗確認
フレームワークの魔法が状態、再試行、または権限を隠す
判断
シングルエージェントのループが明確になってからフレームワークを選ぶ

この節で最も大事なのは、フレームワーク名をたくさん覚えることではなく、次を理解することです。

Agent フレームワークの本質は、高頻度で出てくる状態フロー、ツールフロー、協調構造を先に抽象化し、システムをより速く組み立てられるようにすること。

これがわかると、今後は具体的なフレームワークを見たときに、流行を追うのではなく、「どんな組み立て方なのか」を比較する目で見られるようになります。


  1. 自分のプロジェクトの場面をもとに、「グラフ / ワークフロー型」と「役割協調型」のどちらが向いているか判断してみましょう。
  2. なぜ、複雑度が高くないプロジェクトでは、手書きのほうがよい場合があるのか考えてみましょう。
  3. 自分の言葉で説明してみましょう。フレームワークが本当に省いてくれている仕事は何でしょうか?
  4. チームが特にコントロール性を重視するなら、どんなスタイルのフレームワークを選びたくなりますか?
プロジェクト参考とレビュー観点
  1. 難所が状態、分岐、retry、observability なら graph/workflow 指向が向いています。専門 role への分担とレビューが難所なら、role-collaboration 指向が向いています。
  2. 複雑度が低いプロジェクトでは、手書きコードのほうがよいことがあります。抽象が少なく、隠れたデフォルトも少なく、デバッグ経路が短いからです。
  3. framework が省くのは、message passing、state container、tool binding、trace、retry、memory hook、よくある workflow pattern といった反復的な配管です。システム設計の理解までは代替しません。
  4. controllability を重視するなら、明示的な workflow / graph 型 framework、または小さな手書き orchestration layer を優先します。状態遷移と失敗経路を確認しやすいからです。