大きな問題は新しく開設されたエージェントに任せてください
「プロセス分離により、コンテキスト分離が無料で提供されます。」子エージェントはダーティな作業を実行し、親エージェントはクリーンなサマリーのみを収集します。
親エージェントのジレンマ
あなたが Claude Code に、「この 100,000 行の Rust リポジトリが同時実行性をどのように処理するかを調べてください」と頼んだと想像してください。直感的なアプローチ: ls、cat、grep を実行し、メイン コンテキストで検索を行います。
問題: このラウンドの探索では、それぞれ数千のトークンを含む 30 個のツール結果がメッセージ [] に蓄積されます。実際に答えを書き始める頃には、コンテキストは探索プロセスによって埋め尽くされています。さらにいくつかのステップを経た後に上限がトリガーされ、答えは依然として混乱したままになります。
s04 の解決策: 探索タスクを新しいエージェントに投げます。新しいエージェントは messages=[] から開始し、独自のエージェントを探索し、 最後に概要のみを親エージェントに返します。親コンテキストには、「タスク ツールは 1 回調整され、結果は XXX でした」という一文が追加されているだけで、すっきりしています。
def run_subagent(prompt: str) -> str: sub_messages = [{"role":"user", "content": prompt}] # 全新 context for _ in range(30): # 安全上限,防失控 response = client.messages.create(..., messages=sub_messages, tools=CHILD_TOOLS, ...) ... # 只返回最后的文字,中间推理全部丢弃 return "".join(b.text for b in response.content if hasattr(b, "text"))
父と息子の文脈の比較
このウィジェットは、「非推奨の API を呼び出すこのウェアハウス内のすべての場所をリストする」という実際のタスクをシミュレートします。これは 2 つの戦略で実行できます。(A) 親エージェントが単独で実行します。 (B) サブエージェントを生成します。最後の 2 つのコンテキストのサイズを左右で比較します。
CHILD_TOOLS: サブエージェントはどのようなツールを入手できますか?
s04 の実装には見逃しやすい詳細があります。それは、サブエージェントがタスク ツールを取得できないということです。
# 子 agent 只能用基础工具,不能再 spawn 孙子 CHILD_TOOLS = [bash, read_file, write_file, edit_file] # 父 agent 多一个 task 工具 PARENT_TOOLS = CHILD_TOOLS + [task]
なぜですか?再帰的なディスパッチがツリー爆発になることを避けてください。 1 つのサブエージェントが 4 つのサブエージェントを生成し、わずか数ラウンドで数十の同時呼び出しが行われます。トークンも API 速度制限も処理できません。 s04 の規約ではスポーンはフラットで、親→子の1 層が1 層となります。これは、クロード コードの実際の実装にも当てはまります。タスク ツール内でタスク ツールを再度呼び出すことは禁止されています。
見えるものと見えないもの
権利と責任を整理しましょう。次の質問のうちどれが T で、どれが F だと思いますか?