はじめに
年末年始で勉強したことの振り返りと共有です。特に、AIを使った開発で「出力が安定しない」問題に対して、自分なりに整理した内容をまとめました。
コンテキストは短期記憶であり、容量に制限がある
セッション内では、過去のやり取りや関連情報をもとに毎回「現在のコンテキスト」が生成されます。
コンテキストには以下のような情報が含まれます。
- システムプロンプト
- ユーザーのプロンプト
- 関連ファイルの内容
- 途中の推論結果や生成物
これらは会話の進行とともに逐次追加されますが、容量の上限に近づくと、古い情報から順に 上書きされたように見えたり、要約・圧縮されたりします。
そのため、会話が長くなるほど「最初に伝えた前提条件」や「守ってほしいルール」が失われ、期待した成果物が得られなくなることがあります。
AIから安定したアウトプットを得るためには、コンテキストを意識的に管理することが重要になります。
この課題に対するアプローチとして「Skills」と「Sub Agents」という仕組みが用意されています。
SKILLS📕
Skills = AIに「特定の役割・知識・制約」を持たせる仕組み
例えば、LaravelのコードをAIに実装させる場合を考えます。
1. .cursor/rules/SKILL.mdを作成
2. AIに指示「XXModelを実装して」
3. AIは指示内容と各SKILL.mdのdescriptionをもとに、関連性が高いと判断したSKILL.mdの内容をコンテキストに追加して回答する。
---
name: laravel-model
description: LaravelのModelを実装する際に使用。リレーションの書き方などを記載。
---
(コーディングルール、記載内容や注意点などを自然言語で記載)
※ Skillの適用はdescriptionの書き方に依存します。
抽象的すぎる場合や、指示内容と一致しない場合は
使用されないことがあります。
様々な知識や体系をSKILL.mdに書き出すことで、毎回のプロンプト内で前提条件やルールを説明する必要がなくなります。その結果、タスク達成に直接関係する情報だけをコンテキストに割り当てることができ、タスク達成方法調査のためのコンテキストが最適化されます。
そのため、会話が長くなるほど
「最初に伝えた前提条件」や「守ってほしいルール」が失われ、
期待した成果物が得られなくなることがあります。
という課題を解決できるということです。
descriptionの書き方のコツ
- 「いつ使うSkillか」を明確に書く
- 技術名・対象物を具体的に入れる
- 動詞を含める(実装する / 定義する / 生成する)
Sub Agents🤖
Sub Agents = 特定タスク専用のAI人格を分けて使う仕組み
Skillsが「常に使う前提条件」を扱うのに対し、Sub Agentsは「一時的なタスク処理」を切り出す用途で使われます。
Sub Agentsは、1つの会話の中で「役割の異なるAI」を複数使い分けるための仕組みです。
親となるAIが全体の指示や前提条件を保持し、ログ解析や調査などの一時的な重い処理をSub Agentに切り出して実行します。
例えば、大量のログファイルをそのまま親AIに渡すと、コンテキストを大きく消費し、それまでに共有していた前提条件やルールが失われやすくなります。このような場合に、ログ解析専用のSub Agentを使うことで、親AIのコンテキストを汚染せずに処理を進めることができます。
そのため、会話が長くなるほど
「最初に伝えた前提条件」や「守ってほしいルール」が失われ、
期待した成果物が得られなくなることがあります。
という課題を解決するための仕組みがSub Agentsです。
まとめ
Skillsが「前提条件やルールを外出しする仕組み」なのに対し、
Sub Agentsは「一時的な思考や重い処理を分離する仕組み」です。
- 前提条件やルールを安定させたい → Skills
- 一時的に重い処理をさせたい → Sub Agents
- 両方併用するとコンテキスト管理がかなり楽になる
最後に
次の記事ではCursorで利用するための設定を書こうと思います。
- SKILLSはCursorの設定が必要
- Sub AgentsはMCPの設定が必要
となります。
SKILLSとSub Agentsは2025年8月頃から話題になっていたようで、トレンドとしては少し遅れましたが実際に手を動かして理解することができました。
AIは特に技術の流れが早いので2026年は頑張って流れに乗っていきたいです。