メインコンテンツへスキップ

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

この節の位置づけ

Agent の段階に入ると、多くの人がすぐに別の落とし穴にはまります。

「フレームワークが多すぎる。いったいどれを学べばいいの?」

この講義の目的は、どれかに肩入れすることでも、フレームワーク名を暗記することでもありません。まずは、次のような判断の地図を作ることです。

それぞれのフレームワークは、何を抽象化し、何を手放し、どんな場面に向いているのか。

学習目標

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

たとえ話

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

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

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

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

という点にあります。


まずは大まかな地図を見よう

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

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

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

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


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

状態フローとノード管理

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

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

ツール接続とメッセージ構造

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

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

実行と観察

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

  • trace
  • step の記録
  • 中間状態の可視化

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

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

にあります。


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

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

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

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

よくある問題

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

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

という状態に陥ります。

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

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

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


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

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

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': "['返金ポリシー'] をもとに回答を生成する"}

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

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

  • step
  • state
  • フローの組み立て

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


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

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

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

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

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

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


とても実用的な選び方

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

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

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


初心者がよくはまる落とし穴

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

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

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

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

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

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


まとめ

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

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

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


練習

  1. 自分のプロジェクトの場面をもとに、「グラフ / ワークフロー型」と「役割協調型」のどちらが向いているか判断してみましょう。
  2. なぜ、複雑度が高くないプロジェクトでは、手書きのほうがよい場合があるのか考えてみましょう。
  3. 自分の言葉で説明してみましょう。フレームワークが本当に省いてくれている仕事は何でしょうか?
  4. チームが特にコントロール性を重視するなら、どんなスタイルのフレームワークを選びたくなりますか?