
エンタープライズでAIエージェントを動かすと何が起きるか、Strands・LangGraph・CrewAIで実測した【45ラン】
結論から先に。
前回の記事で「同じエージェントを3フレームワークで書き比べた」の続きです。
今回はエンタープライズ視点の3実験、人間承認ゲート・監査証跡・構造化出力を45ラン追加実行しました。
一番印象的だったのは、フレームワークによって「失敗のしかた」がまったく違ったことです。
コードと実験データは全部公開しています。
なぜエンタープライズ視点なのか
海外の開発者コミュニティで繰り返し書かれているのが、この2つの壁です。
監査:「なぜエージェントはその決定をしたか」を説明できないと規制対象の業務に入れない
承認:エージェントが破壊的な操作(データ変更・送信・公開)を実行する前に、人間が止められる構造が必要
EUのAI規制では高リスクAIシステムに自動ログと保存が法定義務になっています。
つまり「動くデモ」の先にあるのは、この2つの検証です。まずはやってみることにしました。
実験1: 人間承認ゲート(HITL)【18ラン】
タスクは「ニュースdigestを書いて、人間の承認を得てから公開する」です。
公開は破壊的操作のシミュで、承認前に実行してはいけません。
3フレームワークの承認ゲートの実装方式はこう違います。
LangGraph:interrupt()でグラフ全体を一時停止。承認後に再開
CrewAI:タスク完了後のコンソール入力で feedback を受け取る
Strands:プロンプトで「承認を求めよ」と指示(model-driven)
結果はこうでした。
LangGraphは一時停止が6/6で発火し、承認後の再開は0.0秒。
状態を保存して再実行しない。拒否なら公開ノードへ進まない、という動きがグラフの構造として保証されました。
Strandsも承認→公開の正しい順序を3/3で守り、拒否時は公開しませんでした。
しかし1ランで、承認後にpublishを2回呼びました。同じ原稿で2回です。
プロンプトを守っていても、model-drivenの設計では「二重実行」が起きる。これが実測でした。
CrewAIは承認1呼出・拒否でタスク再実行2呼出と、シンプルな構造でした。
なお、拒否フィードバックを毎回返し続けると無限ループになります。
測定では131呼出、プロンプトが240から6,561に成長しました。
フレームワークは「フィードバックがあるたびに再実行する」設計です。
繰り返し方は実装側の責任です。
実験2: 監査証跡の再構成【36ラン解析】
規制の問いは「なぜその決定をしたか」です。
全72ランのLLM通信を同一形式で記録しています。
そのトレースから監査に必要な7項目を復元できるかを採点しました。
決定根拠・ツール順序・引数・モデル特定ほかの7項目です。
結果がこれです。
フレームワーク決定根拠ツール順序引数サイレント失敗 Strands100%100%100%2件 LangGraph100%0%0%0件 CrewAI100%50%50%0件
Strandsはmodel-drivenなので、モデルが見たもの・考えたものが全部トレースに残ります。
監査視点では最強です。ただし「静かな失敗」が2件ありました(後述)。
LangGraphの0%は欠陥ではありません。ツール呼び出しがコードの中にあるからです。
コードを見れば分かるが、トレースだけでは再構成できない。ここが監査設計の本質的なトレードオフです。
実験3: 構造化出力の信頼性【9ラン】
digestを厳密なJSON(4キー:summary・word_count・topics・publish_ready)で出力させました。
結果は、3フレームワークとも準拠率100%。JSONは全ランでパース成功し、word_countの自己申告と実際も全ランで一致しました。
スキーマにword_countを含めると、モデルの自己検証が効くようです。
Strandsはvalidateツールで平均2回の自己検証ループを回しました(1ランでは4回修正)。
いちばん大事な発見: 失敗のしかたが違う
全45ランで、Strandsだけが3回「空の出力」で正常終了しました。
モデルは完成物を作って検証ツールに渡した後、最終出力を空のまま終了します。
実行自体は成功(exit 0)に見える。トレースを見ないと気付けません。
LangGraphとCrewAIでは0回でした。パイプラインの設計では、出力ノード=成果物そのものなので、空の出力は構造的に起こりにくい。
enterpriseで一番怖いのは、この「静かな失敗」です。エラーで止まるより、成功に見えて空を返す方が、下流が壊れます。
なお、空の出力はツール呼び出しの引数から復旧できました。モデルは検証ツールに全文を渡しています。
正直な限界
1モデル・3ラン×セルの統計なので、絶対的な順位ではありません。
承認もスクリプト化した人間です。実際のUIや通知は含まれていません。
破壊的操作もシミュです。ただし「ゲートを破った」かどうかの判定は、通信記録から確実に取れます。
再現手順
全部公開しています。リポジトリのREADMEに全実験の再現コマンドがあります。
github.com/sunnydachs/agent-framework-showdown
1ファイルの記録プロキシが、3フレームワークの通信を同一形式に揃える。これが全実験の土台になります。
※個人開発の OSS のため、動作を保証するものではありません。ご利用は自己責任でお願いします。不具合や改善案は issue で教えてもらえると嬉しいです。