3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LangGraphが渡すのは、設計図

3
Posted at

自分で作ったエージェントに、「なぜ今その処理をしたのか」を説明できなくなったことがあります。

指示を渡せば、検索し、道具を使い、文章を返す。それらしく動いていました。ところが妙な寄り道をしたとき、どこで判断が変わったのかを追えません。賢いのに、手綱がない。正直、その状態を本番へ出すのが怖くなりました。

2026年、AIエージェントを動かすこと自体は難しくなくなりました。次に問われるのは、失敗したときに追えるか、途中から再開できるか、人が止められるかです。デモでは隠れていた運用の条件が前へ出ています。

動くのに御せないエージェントと、失敗しても追跡・再開できるエージェントを分けるものは何か。僕の答えは、モデルではなく設計図です。LangGraphが、暗黙の処理をどう外へ出すのかを順に見ます。

丸投げした処理は、成功している間しか説明できない

一つのモデルへ目標と道具を渡し、あとは任せる。デモを作るなら速い方法です。ただし、途中の判断がモデルの中へ隠れます。

入力と最終出力だけでは、失敗点がわからない

検索結果が悪かったのか、結果の評価を誤ったのか、別の道具を選ぶべきだったのか。最終出力だけを見ても区別できません。

賢さを足すほど、経路の候補も増える

モデルが多くのことを判断できるほど、取り得る経路は増えます。これは能力である一方、観測する側には複雑さです。

丸投げの暗黙処理をノードとエッジへ外出しする

ノード、エッジ、Stateで仕事の骨格を描く

LangGraphの基本は、処理をノード、処理間の移動をエッジ、途中で共有する情報をStateとして表すことです。

ノードは処理、エッジは次の行き先

LangGraphを構成するノード、エッジ、State

「検索する」「要約する」「検証する」のような処理をノードにします。あるノードが終わった後、次にどこへ進むかをエッジでつなぎます。

Stateは、全員が読む共有メモ

Stateへ決定、根拠、未解決を残して次のノードへ渡す

前の処理の結果を次へ渡すには、状態が必要です。質問、検索結果、検証結果、承認状態などをStateに置きます。

ノードの大きさは、一つの失敗理由で決める

失敗したとき一つ前へ戻せる粒度でノードを分ける

ノードを細かくしすぎると図が読めなくなり、大きくしすぎると失敗点が隠れます。僕は「失敗したとき、一つの理由で説明できるか」を境界にしています。

「whileループで書けばよくない?」

処理が短く、分岐も少なく、途中再開も不要なら、通常のループで十分です。LangGraphを使うことが目的ではありません。

保存できる状態が、人と失敗の戻り場所になる

LangGraphの公式資料では、グラフの状態をチェックポイントとして保存し、人の確認、再開、障害からの復帰に使えると説明されています。

人の確認を、例外ではなくノードにする

送信、削除、費用が大きい操作など、AIだけで決めたくない場所があります。そこへ割り込みを置き、状態を保存したまま人の判断を待つ。承認、修正、却下の結果を受けて再開します。

観測では、通った道と状態の変化を分けて残す

経路だけを記録しても、なぜ分岐したかは説明できません。反対に、最終状態だけを残しても、どの処理が値を変えたかわかりません。

失敗しても、最初からやり直さない

途中の状態が保存されていれば、成功した処理をすべて繰り返さず、最後に確定した地点から再開できます。長い調査や複数の道具を使う処理では、費用と時間の違いが大きくなります。

チェックポイント、人の確認、失敗後の再開

再開するノードは、同じ処理をもう一度実行しても壊れないようにする

人の確認や障害から再開するとき、ノードの先頭から処理が再実行される場合があります。送信、課金、削除のような副作用を持つ処理では、同じ操作が二度起きない設計が必要です。

最初の設計図は、4〜5個のノードで十分

最初から全社の業務をグラフへ載せる必要はありません。判断が必要だが、手順は描ける仕事を一つ選びます。

判断はあるが、順番は説明できる仕事を選ぶ

問い合わせの一次対応なら、受け取る、調べる、回答案を作る、人が確認する、返す。社内文書の質問なら、問いを整理する、検索する、十分か判断する、回答する。

一枚目に書く四つ

4つの処理と一つの人間確認で描く最初の設計図

最初の一枚には、次を書きます。

  1. 4〜5個の処理ノード
  2. 通ってよい遷移と戻り道
  3. ノード間で共有するState
  4. 人へ戻す条件

実装前のレビューは、五つの問いで行う

開始、分岐、状態、確認、再開の五つで設計図を確認する

一枚を描いたら、コードを書く前に次を確認します。

  1. 各ノードの出力を、後から確かめられるか
  2. 分岐条件を一文で説明できるか
  3. 途中で止まったとき、どのStateから再開するか
  4. 外部へ影響する操作の前に、人が止められるか
  5. 同じノードを再実行しても、二重の変更が起きないか

まとめ

冒頭の問いに戻ります。動くのに御せないエージェントと、失敗しても追跡・再開できるエージェントを分けるものは何か。

処理、遷移、状態、停止、人の判断を、設計図として外へ出せているかどうかです。LangGraphが渡すのは、モデルの賢さではありません。暗黙のループをノードとエッジへ変え、戻り場所を持たせるための紙です。

僕はあの「なぜ今それをしたのか」を説明できなかった失敗から、実装前に一枚描くようになりました。賢いモデルを選ぶ前に、通ってよい道と人へ戻す場所を決めます。

同じようにエージェントの設計図を描いている方がいれば、最初のノードをどこへ置いたか、コメントで知見を交換できるとうれしいです

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?