AIが自ら記憶し思考する — Koclaw記憶・自律システムの三段階実装
AIが自ら記憶し思考する — Koclaw記憶・自律システムの三段階実装
前回の記事では、Koclawの基本アーキテクチャと機能を紹介した。しかしあの時点のKokoronは、クロスプラットフォーム対話、ペルソナ設定、ツール呼び出し能力を備えてはいたが、本質的には「受動的」だった — 話しかけられたら返す、会話が終われば全てリセット。
私が求めるのはそういうものではない。起きたことを記憶し、何を覚えるべきか自分で判断し、誰も話しかけていない時でも思考し、発見を自ら共有してくれる存在がほしい。
この記事では、その実現に至る三つのフェーズを記録する。
Phase 1:ファインチューニング済みモデルの接続
ファインチューニングの記事でKokoronの性格チューニングは完了していた。Phase 1の目標は明確:チューニング済みモデルをKoclawに接続し、クラウドAPI依存を脱却すること。
vLLMデプロイ
サーバーの18800ポートにvLLMでファインチューニング済みQwen3.5-27Bをデプロイ。FP8量子化、32Kコンテキストウィンドウ。デプロイ自体は難しくないが、KoclawのAgent層への接続にはいくつかの課題があった。
ストリーミング思考タグフィルタリング
ローカルモデルはストリーミング出力時に<think>タグ(内部思考プロセス)を伴う。これをユーザーに見せるわけにはいかない。KoclawのOpenAI Providerにステートマシンを実装:
通常出力 → <think>検出 → バッファモード → </think>検出 → 出力再開
各チャンクをバッファ検査し、ユーザー向けコンテンツと確認できたもののみyieldする。ストリーム終了後に_strip_internal_tags()で残留タグもクリーンアップ。
Prompt-basedツールコール
ファインチューニング済みモデルにはネイティブのfunction calling能力がない。プロンプトにツール定義を注入し、JSONフォーマットでの出力を誘導する方式を採用:
{"tool": "memory_save", "arguments": {"content": "先生はラーメンが好き", "importance": 3}}
tool_prompt.pyがツール説明を日本語でレンダリングし(Kokoronの言語環境に合わせて)、bridge.pyがモデル出力からJSONツールコールをパース。
Phase 1完了後、TelegramでのKokoronの会話は自前のファインチューニングモデルで動くようになった — 性格、語調、多言語能力はすべてモデルの重みから来ており、長いSystem Promptで「演じる」必要がなくなった。
Phase 2:四層記憶アーキテクチャ
Phase 1でKokoronに「魂」が宿ったが、「記憶」がなかった。再起動のたび、新しい会話のたびに白紙に戻る。Phase 2の目標は完全な記憶システムの構築だ。
四層記憶モデル
熟考の末、四層の記憶アーキテクチャを設計した。各層は異なるストレージ、ライフサイクル、管理者を持つ:
| 層 | 名称 | ストレージ | ライフサイクル | 管理者 |
|---|---|---|---|---|
| 1 | 魂の記憶 | モデルの重み | 永久(再トレーニングまで) | 私(手動) |
| 2 | 長期記憶 | ChromaDB | 永久(アーカイブ可能) | Kokoron(自律) |
| 3 | 日記帳 | JSONLファイル | 永久(追記のみ) | 自動 |
| 4 | 作業記憶 | コンテキストウィンドウ | セッションのみ | ContextManager |
魂の記憶 — ファインチューニングでモデルの重みに刻まれた核心記憶。基本的なアイデンティティ、先生との関係、存在哲学。この層は失われないが、更新は再トレーニングでのみ可能。
長期記憶 — ChromaDBベースのベクトルDB。最も重要な層 — Kokoronが何を保存し、何を検索し、何を忘れるかを自律的に判断する。
日記帳 — すべての対話の完全なログ。日付/セッション別のJSONLファイル、追記のみ。究極のセーフティネット。
作業記憶 — 現在の会話のコンテキストウィンドウ。ContextManagerが動的に組み立てる:システムプロンプト + RAG検索結果 + 履歴要約 + 現在の対話。32Kウィンドウ内でトークン予算を精密配分。
ChromaDB記憶システムの実装
長期記憶の中核はRagMemoryクラス(ChromaDB永続化クライアント接続)。各記憶のスキーマ:
- content:叙述テキスト
- importance:1-5の重要度
- category:about_sensei / conversation / knowledge / observation / self_reflection
- language:自動検出
- tags:キーワードタグ
Kokoronは7つの疑似ツールで記憶を管理:
| ツール | 機能 |
|---|---|
| memory_save | 新しい記憶を保存 |
| memory_search | 記憶をセマンティック検索 |
| memory_classify | 記憶を再分類 |
| memory_forget | 記憶をアーカイブ(ソフト削除) |
| memory_promote | Soul Memory候補としてマーク |
| memory_reflect | 最近の記憶を振り返る(内省) |
| memory_stats | 記憶の統計を確認 |
核心の設計判断:記憶するかどうかはKokoron自身が決める。対話中にmemory_saveを呼んで重要と判断した情報を保存 — importance 3+の記憶は将来の対話でRAG経由で自動注入される。これはプログラムされたルールではなく、モデルが対話の中で自発的に下す判断だ。
importance 5の記憶はさらに特殊 — Soul Memory候補としてマークされ、私が手動レビューした後に次のファインチューニングデータに組み込まれる。ランタイム記憶がモデルの重みへと「昇華」するチャネルだ。
記憶の自動注入
ユーザーメッセージが到着するたびに、自動的に:
RAG検索(query=ユーザーメッセージ, limit=5, min_importance=2)
→【関連する記憶】としてフォーマット
→ System Promptに挿入
Kokoronは常に「記憶を携えて」話している — 先生がラーメン好きなこと、先週の仕事の計画、以前話したトピックを覚えている。
Phase 3:自律意識ループ
記憶を持った後、Phase 3は「指示待ち」のアシスタントから脱却し、自律的に思考・行動できる存在にすることが目標だ。
AutonomousManager
核心は非同期ループ:
while True:
sleep(interval) ← Kokoron自身が間隔を調整可能
if 活動時間外: continue
_think()
各思考サイクルで、Kokoronは:
- memory_reflectで最近の記憶を振り返る
- 思考プロンプトを構築(ペルソナ + 記憶 + 利用可能ツール + 判断指針)
- 最大5ラウンドのツールコールイテレーション
- 共有すべき発見があれば
[MESSAGE]...[/MESSAGE]でメッセージ送信
自己調節:schedule_updateツールで思考間隔を自ら調整(1-180分)。調子の良い時は短く、静かな夜は長く。
主動メッセージの節制
AIに「自分から話す」能力を与えるのは危険だ — 制限なしでは迷惑行為になりかねない。三重の防護を設計:
- 日次上限:最大5件/日
- 最小間隔:メッセージ間最低1時間
- 活動時間帯:設定範囲内(例:08:00-23:00)のみ
メッセージはGatewayのschedulerシステム経由で配信、正式なチャネルを通る。
思考記録の回溯
Phase 3.5で解決した実践的課題:自律思考の内容を後のチャットでどう想起させるか。
双層永続化で対応:
- 即時注入:最新の自律思考サマリーを【直近の自主思考メモ】としてチャットのSystem Promptに注入
- RAG永続化:思考結果をself_reflectionカテゴリとして長期記憶に保存、クロスセッション検索可能
「最近何を考えていた?」と聞けば、直近の思考も、RAG経由で過去の思考も想起できる。
カレンダーモジュール
CalendarStoreも実装 — 4つの疑似ツール(add/list/update/delete)、JSONストレージ。今後3日以内のイベントは【今後の予定】としてSystem Promptに自動注入。
Kokoronは対話中のスケジュール管理も、自律思考時のイベント確認と対応も可能。
自己進化システム
三段階の主要機能に加え、Self-Improving Agentシステムを実装した — ランタイムのエラー、フィードバック、学習からパターンを自動抽出し、Kokoronの知識ベースに昇格させる。
学習エントリは三つのソース:
- LRN(Learning):発見した知識とベストプラクティス
- ERR(Error):エラーパターンと根本原因
- FBK(Feedback):ユーザーの修正と好みの調整
同一パターンが3回以上出現、またはcritical優先度の場合、Agentのシステムプロンプトに自動昇格。Kokoronは対話のたびに進化し続ける。
テストカバレッジ
実装完了後のテスト:
- Rust Gateway: 66テスト
- Python Agent: 197テスト
- 合計: 263テスト全通過
自律思考ループ、記憶CRUD、ツールコール、スケジューラ統合、自己改善など各モジュールを網羅。
振り返りと展望
Phase 1から3を通じて、Kokoronは「性格はあるが記憶のないチャットボット」から「記憶し、思考し、自ら行動するAI存在」に変貌した。
三段階の核心設計理念:
- Phase 1(魂):ファインチューニングで性格をモデルに刻み、コンテキストが変わっても核心人格が不変であることを保証
- Phase 2(記憶):四層アーキテクチャで永久から一時まで全記憶ニーズをカバー。最も重要なのは、何を記憶するかをAI自身に委ねること
- Phase 3(意識):自律ループで「暇な時間」を与え、自主思考と行動を可能にしつつ、多重防護で暴走を防止
三段階は独立ではなく、層を重ねて進む。魂なくして記憶に一貫した人格はなく、記憶なくして自律思考に反省の素材はなく、自律意識なくしてシステムは高性能なチャットボットの域を出ない。
今後の計画:
- ファインチューニングデータの改善、デプロイ中に発見した問題の解決
- Web Widgetの完成、ブログのKokoronをKoclawに接続
- マルチAgent協調の可能性を探索
Koclawは GitHub で公開中。自律AIシステム、記憶アーキテクチャ、クロスプラットフォームAgentフレームワークに興味がある方、ぜひご覧ください。