【要約】[Agents on 16GB] 状態の分離をあきらめた。サブエージェントはそれで動くようになった [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がLangGraphを用いたマルチエージェント構築において、サブエージェントへのコンテキスト漏洩と、中断機能(interrupt)の制御という二律背反の課題に直面した。
- ・サブエージェントに親の会話履歴がすべて見えてしまい、役割を誤認するリスク。
- ・状態を分離するために
subgraph.ainvoke()を使用すると、サブグラフがブラックボックス化し、ユーザー入力待ちからの再開が困難になる。 - ・設計の理想と、フレームワークの仕様が衝突した。
// Approach
開発者は、状態の完全な分離を諦め、LangGraphの標準機能であるチェックポイント機構を最大限活用する設計を選択した。
- ・Option B(subgraph-as-node)を採用。サブグラフを親グラフのノードとして登録し、LangGraphに中断状態の管理を委ねる。
- ・ブリーフィングパケットの導入。サブエージェントに対し、
query,context_hints,artifact_refsを含む構造化メッセージを渡す。 - ・クエリのサニタイズ。オーケストレーターが生成する不要な接頭辞を、文字列操作によって強制的に除去する。
// Result
開発者は、状態の完全な分離には至らなかったが、interrupt を含む複雑なワークフローを確実に動作させることに成功した。
- ・LangGraphの
checkpoint_nsを利用し、サブグラフの停止位置を親のチェックポイントで管理可能になった。 - ・ブリーフィングパケットにより、タスクに必要な情報のみを絞り込んで伝達できるようになった。
- ・後日、役割の誤認問題は状態漏れではなく、使用モデルの性能不足に起因することが判明した。
Senior Engineer Insight
> 理想的なアーキテクチャよりも、フレームワークの制約に適合する設計を選んだ判断は極めて実戦的である。プロンプトによる制御の限界を、サニタイズというコードによる強制力で補完する手法は、LLMの不確実性を制御する上で有効な戦術だ。ただし、モデルの性能に依存する問題をアーキテクチャの問題と誤認しないよう、切り分けの精度を高める必要がある。