0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

どうも、Agent Loopおじさんです。

Agent Skills に MCP、あとは Loop 発動。くぅ〜、たまらねぇ。これが Agent Loop ってやつだ。LLM がよしなに全て解決。

おまけに AG-UI で、画面側に今なにをやっているかも出しちゃう。モダナイゼーションだ。

……と思っていた時期がありました。

うおw、出力がおかしいとき、どこを直せばいいのか分からない。

全部任せたら、全部見えなくなった

PoC は、思ったより簡単に動きます。Agent Framework に任せれば、LLM 呼び出しも tool 接続も structured output も trace も、それっぽく揃います。

でも、少し複雑なタスクに近づけると、別の問題が出てきました。出力がおかしいとき、どこを直せばいいのか分からない。

prompt なのか。context なのか。workflow なのか。schema なのか。reflection なのか。tool calling なのか。

全部を一つの Agent Loop に投げ込んだとき、動くときは気持ちいい。でも、ズレたときに、どの責務でズレたのかが見えない。

自由度が高いということは、責務の境界が溶けている、ということでもありました。

coding Agent でさえ迷っていた

最初は MAF、Microsoft Agent Framework を使っていました。抽象を使えば、呼び出しも structured output も整理できるだろう、と。

ところが、Codex に MAF を使った実装を頼むと、workflow と Agent loop の中間のようなコードが出てきた。完全な workflow でもない。完全な autonomous loop でもない。

うおw、coding Agent でさえ迷ってるじゃん。

Codex が悪いわけではありません。逆です。抽象の自由度が広いから、どこに何を置いても成立してしまう。人間も AI も、置き場所が決まっていないと迷う。

欲しかったのはその自由度ではなく、workflow は workflow、model call は model call、context provider は context provider として分かれていることでした。

orchestration と execution は、同じ責務じゃなかった

見えてきたのは、orchestration(workflow を進める)と execution(node の中で model call を実行する)を、同じ framework の同じ責務にする必要はない、ということでした。

二つを同じ framework に寄せると、一見まとまって見える。でも、実際には責務が混ざる。混ざると、部品を差し替えにくくなる。

うおw、密結合じゃん。

分けておけば、workflow は LangGraph のまま、node 内部の model runtime だけを MAF から Pydantic AI に差し替えられる。全部を一つに入れると、最初は気持ちいい。でも、あとからどこを外せばいいか分からなくなる。

Agent Framework を選ぶ話だと思っていたのに、実際に詰まったのは「どの責務をどこに置くか」でした。

見えるようにしたら、普通のソフトウェア設計になった

責務を分けていったら、残ったのはかなり地味な姿でした。

workflow は LangGraph。output schema は Pydantic。prompt surface は Jinja。context は MCP を application が deterministic に呼ぶ。Skill は判断軸。Reflection は別 node。trace は Langfuse。UI は system state を出す。

うおw、普通にソフトウェア設計じゃん。

状態を外に出す。入出力契約を持つ。prompt surface を分ける。context provider を制御する。trace を残す。新しいことをしているようで、かなり古典的です。古典に戻ったというより、問題構造が古典を呼び戻した。

ズレたときに、修正可能な signal になるか

一番大きかったのは、責務を分けると、失敗が「修正可能な signal」になることでした。

失敗したときに、prompt が悪いのか。context が足りないのか。MCP の candidate が弱いのか。output schema が粗いのか。reflection が弱いのか。routing が間違っているのか。

うおw、CI じゃん。

Agent Loop に全部溶けていると、失敗はただの失敗になります。「なんか微妙」で終わる。でも責務が分かれていれば、失敗は次の PR を切れる signal になる。

見える責務だけが、直せる責務です。

Agent Loopおじさん、見えない責務に敗北しました

Agent Framework への丸投げ。一つの loop で回る気持ちよさ。「とりあえず動いた」の安心感。

対戦ありがとうございました。

Agent Loopおじさん、見えない責務に敗北しました。

負けた相手は、外部サービスでも、もっと賢いモデルでも、もっと強い framework でもなかった。自分で見えなくした責務の置き場所でした。

丸投げ(Agent Loop に全部任せる)で勝とうとしていたものが、引き算(責務を分けて見えるようにする)で勝てた。自由度を上げるほど勝てるのではなく、責務を見える位置に置くほど、直せるようになった、という話です。

この「丸投げをやめて、見える位置に責務を置く」を、Agent 設計の話としてちゃんと書いたのが、この本です。orchestration と execution の分離、MCP を Context Boundary として切ること、Skill を判断軸として持つことまで、責務の置き場所を一通り扱っています。

『PoCで終わらせないAI Agent設計』

Agent Loop を信じる前に、責務が見える位置にあったか、という話です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?