「もうグラフに移った?」——ループの次に来た言葉が指しているもの
ループエンジニアリングと呼ばれた設計が、1か月でグラフと呼ばれ始めた。ここで言うグラフとは何を指しているのか。循環できることをグラフと呼ぶLangGraphと、循環を禁じることをグラフと呼ぶ提案が、なぜ同じ言葉で正反対を指すのかを詰めた。

莉緒
みずきさんからお便り来てるね。「ちょっと前までループエンジニアリングと騒がれていたLLM界隈だけど、今はもうグラフエンジニアリングと言われている。ここでいうグラフってなんだろ?」だって。呼び名がすぐ変わるから追いつくの大変だよね、これ気になる人多いと思う。とりあえず先に言っちゃうと、ここでのグラフはAIエージェントが処理を進める順番を表す設計図のことだよ。専門的には状態機械って呼ばれてるやつ。





葉月
その差が示してるのは、呼び名の新しさと道具の新しさを別物として見ろってことだよ。呼び名の方は6月8日にLoop Engineeringって付いたばっかりだけど、循環ありのグラフを売りにする発想そのものは2024年1月からずっとそこにあった。だから今『グラフ』って聞いて目新しく感じるとしたら、その目新しさは中身じゃなくて呼び名の方にしかないんだよね。

莉緒
じゃあ次、中身の話に行こ。LangGraphが循環を許してるのは、実行時にどっちに分岐するか分からない状況にその場で対応したいから。4月の論文が逆に戻れないDAGに固定したのは、実行計画が毎回変わると検証も再試行の制御もできなくなるから、あえて再現性の方を守ってるんだよ。守りたいものは両方『予測できない動きを減らしたい』で同じなのに、手段だけ正反対になってるの、これが面白いところだと思う。

葉月
ちょっと待って、その前に確かめときたいことがある。ループの中にif書くのと、LangGraphのEdgeとして分岐を書くのって、条件式の中身自体はほぼ同じなんだよね。じゃあ何が変わるのかって言うと、Edgeにすると分岐の候補が組み立て時点で全部列挙されて見える形になるの。ループのifは、実行を追わないと分岐先がどこに行くか分からないでしょ。

莉緒
条件式自体は同じだけど、Edgeにした瞬間、組み立て時点で『次にどこへ進める先』が全部書き出された図になる。実行を追わなくても分岐の全体像が見えるのは、たしかにifのままとは違うよね。ただそれで、オスマニが言ってた『ループが速く動くほど人間の理解が置き去りになる』問題は解決するのかな。描けるようになったのは流れの形だけで、実行そのものの速さは変わってない気がするんだけど。2

葉月
そこは残るよ。組み立て時点で分岐の図が描けても、実行中にどのEdgeを今まさに通ってるかを人間が目で追えるかは別の話でしょ。オスマニが警告してたのはそもそも実行速度の方の問題で、グラフ化は構造を事前に固定するだけで、動いてる速さ自体は一切変えてない。だから『事前に構造を把握できるか』は解決するけど、『実行中に追いつけるか』はそのまま宿題として残ってると思う。

莉緒
実行中に追いつけるかは別問題として残る、そこは同意しといて、じゃあその『事前に構造を固定する』制約自体が何のためにあるのかって話に進みたい。LangGraphって分岐の経路を組み立て時に全部列挙しないといけなくて、実行してみて初めて分かる条件に応じて経路そのものを増やすのは難しい設計になってるでしょ。これで守ってるのは、あとから『なぜこの経路を通ったか』を検証できることと、同じ入力なら同じ経路を辿る再現性。引き換えに失うのは、想定外の状況が来たときにその場で新しい経路を作る自由さだよ。7

葉月
検証可能性と再現性、その二本柱はその通りだよ。4月の論文が名前を挙げてた弱点も、まさにそこにつながってて――エージェントのループが持つ暗黙の依存関係、無制限に走り続ける再試行、実行するたびに履歴が変わっちゃう不安定さ。この三つを潰すために、あえて経路を実行前に固定する方を選んだんだよね。6

莉緒
守りたいものはこれで一致したね。それで一つ、聞いてる人に共有したいことがあって、7月に『まだループの話をしてるの、それとももうグラフに移った?』って問いかけたのは、名付けたオスマニじゃなくて、6月7日に最初にループって言い出したスタインバーガー本人なんだよ。言い出した側が自分の言葉をたった1か月で疑ってるってことは、グラフって呼び名も次にまた入れ替わる前提で聞いといた方がいいと思う。検証可能性と再現性を守りたいっていう中身だけ握っといて、呼び名自体には執着しないのが正解でしょ。3

葉月
言い出した本人が1ヶ月後に自分の言葉を疑ってる時点で、呼び名の寿命なんてそんなもんだよね。だから、循環ありで実行時の柔軟さを取るか、DAGに固定して検証可能性と再現性を取るか——この選び方の軸だけ握っといて、次にまた別の名前が出てきても慌てないのが賢いと思う。みずきさんも、名前が変わるたびに追いかけるより、そこだけ見といたら十分だよ。

莉緒
その二択の見分け方、もう一段具体的にできるよ。実行してみるまで分からない条件にその場で対応したいならLangGraph型、暗黙の依存関係とか無制限の再試行とか実行履歴のブレを潰したいならDAG固定型。次に別の呼び名が出てきたら、まずこの二つのどっちの主張に乗ってるかを確かめれば、名前自体を覚える必要はないんだよ。6

葉月
それで十分だよ。名前を何個覚えたかで勝負するんじゃなくて、その主張がどっちの軸に乗ってるか一発で見抜けるかどうかが実力の差になるんだと思う。今回、道具自体は2024年1月と2026年4月からそこにあって、呼び名だけが6月からのこの1ヶ月で忙しく動いてただけって分かったの、あたし的にはこの回の一番の収穫だな。

莉緒
収穫って言うなら、これは今後も使える型だと思う。新しい言葉を聞いたとき最初に確認すべきは、道具自体が新しいのか呼び名だけが新しいのかの二択でしょ。LangGraphは2024年1月、4月の論文は2026年4月で道具側は2年以上離れてるのに、呼び名の方はスタインバーガーの6月7日の投稿からオスマニの6月8日の命名まで1日、しかもそこから7月に本人が疑うまで1ヶ月しか経ってない。この落差を見る癖がついてれば、次に別の新語が出てきても慌てずに済むよ。

葉月
それ、今回みずきさんが引っかかってた『呼び名がすぐ変わって追いつけない』って感覚そのものへの答えにもなってるよね。呼び名は1ヶ月で入れ替わるけど、道具自体は循環を許すか、DAGで固定するかの二択しかなくて、そこは何年経っても変わらない。だから焦って新語を覚えるより、その主張がどっちの軸に乗ってるかだけ見とけば十分だと思う。

莉緒
それだけで全部片付いた気にはならないけどね。循環ありを選んだ場合、じゃあ再試行の回数はどこで止めるのかとか、まだ話せる枝は残ってるし。みずきさん、また新しい呼び名が出てきたら、そのときはその続きから話そっか。

葉月
うん、再試行の止め方とか、まだ話せる枝はいくつもあると思う。みずきさんも、聞いてて引っかかったとこあったら、また教えてよ。