アイマイラボ

自己改善システム

SelfImprovementDaemon · Tier1/2 · CodeAgentLoop · Nightly maintenance

このページでわかること

シャノンはタスク失敗をエピソードとして蓄積し、条件が揃うとバックグラウンドで失敗パターンの分析改善案の生成・適用を行います。 さらにマインクラフト用の JSON 自己テスト、ゲーム内から叩けるコーディングエージェント夜間バッチ(レポート保存が主・高コスト処理は opt-in)が同じ系統のサブシステムとして動きます。

実装の中心は Shannon バックエンド(Node.js)の backend/src/services/llm/graph/cognitive/selfImprove/ 配下です。公開サイトのコードではなく、ボット稼働サーバー上のリポジトリが対象になります。

リアクタイム(失敗駆動)の流れ

タスク完了時に ParallelExecutor から SelfImprovementDaemon.onEpisodeSaved が呼ばれます。

  1. 成功したエピソードは失敗バッファに入れない。効果測定(EffectivenessTracker)やプロアクティブなスキル発想(SkillIdeator)には使われる。
  2. 失敗FailureRecord としてバッファに追加(上限で古いものから捨てる)。
  3. トリガー条件(例: バッファが一定件数以上、クールダウン経過、1 時間あたり実行上限内、メタ認知シグナルや同一失敗タイプの繰り返しなど)を満たすと、非同期で executeImprovement が走る。
  4. FailureAnalyzer がクラスタ化・要約し、ImprovementGenerator が Tier1 ルール案または Tier2 コード案を出す。
  5. ImprovementApplier が適用: Tier1 は JSON 追記、Tier2 は mutable ポリシーと検証を通したうえでファイル更新または pending。

Tier 1 と Tier 2 の違い

Tier 1

プロンプト/Forward Model ルール

JSON(self_improvement_rules.json)に動的ルールを追加。ホットリロードで認知パイプラインに反映。

コスト: 比較的軽い(分析・生成で LLM 利用)

リスク: ルールの質次第。コードは書き換えない。

Tier 2

コード変更(mutable 範囲内)

失敗クラスタに対し、対象ファイルへのパッチ案を生成。CodeValidator で検証後に適用または保留。

コスト: 生成・検証で LLM / ビルドコストあり

リスク: 誤った差分のリスク。delete は SELF_IMPROVE_ALLOW_DELETE=true のときのみ。

コードを触ってよい範囲(mutableCodePolicy)

原則として backend パッケージ直下のソースは編集候補になり得ますが、次のようなパスは変更禁止または対象外です。

禁止・スキップの例

  • src/config/
  • package.json
  • 各種 lock ファイル
  • tsconfig*
  • .env
  • node_modules / dist / .git / coverage

Tier2 のプロンプト設計では src/services/minebot/ src/services/llm/ が優先されやすい、という運用目安があります。

CodeAgentLoop(コーディングエージェント)

Anthropic SDK を用いた ReAct 型ループです。モデル構成はコード上で Opus / Sonnet 系が使い分けられます。 ファイル探索・差分適用・run_tsc などで、人間のコーディングエージェントに近いツール群を持ちます。

主なツール(概略)

  • read_file / edit_file / create_file / delete_file
  • search_code / glob_files / semantic_search
  • web_search / web_fetch
  • shell_exec / run_tsc / run_vitest / read_lints
  • task_plan / task_update
  • spawn_agent / check_agent(サブエージェント)
  • finish

マインクラ内から: ..agent-fix <説明> で、説明に基づき CodeAgentLoop が起動します(Minebot のチャットコマンド経由)。

Tier2 の適用経路でも ImprovementApplier.applyWithAgent から同じループを呼べます。

マイクラ自己テストと SkillPatcher

SelfTestRunner saves/minecraft/self_test_cases/*.json のスイートを実行します。失敗時、オプションで SkillPatcher がスキルコードを読み、LLM で修正を試みて再テストする PDCA になります。

チャットから: ..test-all / ..test-smoke / ..test <suite> [--fix]

自然言語やパスに self_test_cases を含む文でも同ランナーが起動する意図検知があります。ゴール形式のテスト(chain / goal モード)も自己改善ラインと連携し得ます。

夜間メンテナンス(Nightly)

SELF_IMPROVE_NIGHTLY_ENABLED=true のとき、サーバ起動中に 1 分おきの tick で UTC 指定の窓内かつ「その UTC 日で未実行」なら runNightlyMaintenance が 1 回走ります。 既定では高コストな LLM 処理はスキップされ、レポートに「スキップ」と理由が並ぶ動きがベースです(課金抑制設計)。

① 失敗駆動改善既定オフが多い

SELF_IMPROVE_NIGHTLY_RUN_REACTIVE=true

失敗エピソードバッファがあれば、分析→改善パイプラインを 1 回実行(LLM を複数回消費)。既定はオフ。

② マイクラ自己テスト

SELF_IMPROVE_NIGHTLY_MINECRAFT_SUITES=...

カンマ区切りでスイート名を指定(例: smoke-skills)。ボット接続時のみ実行。SELF_IMPROVE_NIGHTLY_MINECRAFT_AUTOFIX で失敗時 SkillPatcher(追加 LLM)。

③ CodeAgent(夜間)既定オフが多い

SELF_IMPROVE_NIGHTLY_CODE_AGENT=true

Anthropic API で CodeAgentLoop を実行。ANTHROPIC_API_KEY 必須。SELF_IMPROVE_NIGHTLY_CODE_AGENT_TASK / MAX_ITER で指示・深さ調整。

主な環境変数(抜粋)

SELF_IMPROVE_AUTO_APPLY_TIER2true なら Tier2 が検証通過後に即ファイル反映。false は pending_review 中心。--dev / IS_DEV でも有効になり得る。
SELF_IMPROVE_ALLOW_DELETEtrue のときのみ Tier2 の delete を許可(本番では原則オフ)。
SELF_IMPROVE_NIGHTLY_ENABLEDtrue で夜間スケジューラ起動(1 日 1 回・UTC 日付で重複防止)。
SELF_IMPROVE_NIGHTLY_HOUR_UTC / MINUTE_UTC実行目安時刻(既定 3:00 UTC)。
SELF_IMPROVE_NIGHTLY_WINDOW_MINUTESその時刻±の分幅内で最初の tick で発火(既定 15)。
SELF_IMPROVE_MORNING_WEBHOOK_URL任意。夜間レポート Markdown を JSON body { content } で POST(Discord Incoming Webhook 等)。

レポートの保存先

backend/saves/self_improve/morning_reports/にタイムスタンプ付きの *_nightly.json *_nightly.md が書き出されます。

SELF_IMPROVE_MORNING_WEBHOOK_URL を設定すると、同じ Markdown を要約投稿先(Discord Incoming Webhook 等)へ POST できます(長い場合は切り詰め)。

シャノン

失敗から学び、コードとルールを更新し続ける仕組み