SkillsとSubAgentの選び方
どちらも同じ問題を解決するためのものです。既に作成済みのAgentがあり、そこに新しい機能を追加したい場合、その機能をどうやって現在のAgentシステムに組み込むのか、という問題です。
ドキュメントの説明からすると、SkillsはメインAgentにより多くの能力を提供するもの、例えばお絵かきや企画などをサポートするものです。
一方、SubAgentは別のAgentを起動し、分離されたコンテキストを通じてこれらのタスクを実行するものです。
SubAgentの追加の利点は以下の通りです。
- コンテキストの分離:メインAgentのコンテキストと区別されるため、汚染を引き起こさない
- 並列化:異なるサブAgentは並列に実行できるため、より高速
以上が、私が考えるSubAgentとSkillsの最も重要な違いです。専用の指示知識やツール制限などについては、SubAgentでもSkillsでも実現可能であり、重要な区別点にはならないと考えます。
では、どちらも新しいタスクを処理する能力を強化するものですが、どのような場合にSkillsを選び、そのタスクをメインAgentに任せ、どのような場合にそのタスクをSubAgentに任せるべきなのでしょうか?
私はソフトウェア工学の「高凝集・低結合」の原則に従えばよいと考えます。
この新しいタスクがメインAgentのタスクと明確に異なる場合、または並列実行が必要な場合は、別のSubAgentを起動して実行することを選択できます。それ以外の場合はSkillsによる実装を推奨します。なぜなら、別のAgentを起動するとアーキテクチャの複雑さと結果の不確実性がもたらされるからです。さらに、コンテキストの分離は祝福であると同時に災いでもあり、メインAgentがサブAgentに指示を伝える際の正確性をどのように保証するのか、という問題もあります。