🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

Agent Memory Patterns

by @byron-mckeeby

永続エージェント向けメモリアーキテクチャパターン

Versionv1.0.0
Downloads2,367
Stars1
TERMINAL
clawhub install agent-memory-patterns

📖 About This Skill


name: agent-memory-patterns version: 1.0.0 description: 永続エージェント向けメモリアーキテクチャパターン

エージェント・メモリパターン

永続AIエージェントのための効率的なメモリ管理システム。日次ファイル、長期記憶、検索最適化、外部コンテンツ段階的処理の実装ガイドです。

アーキテクチャ概要

メモリ階層

workspace/
├── MEMORY.md              # 長期記憶(手動キュレーション)
├── memory/
│   ├── YYYY-MM-DD.md     # 日次ログ
│   ├── pending-memories.md  # 外部コンテンツ段階処理
│   ├── heartbeat-state.json  # ハートビート状態
│   └── queued-messages.json # メッセージキュー
└── skills/
    └── memory-tools/     # メモリ管理ツール群

日次ファイル管理

自動日次ファイル作成

#!/bin/bash

daily-memory-init.sh

create_daily_memory() { local date="$(date -I)" local memory_dir="/home/bot/.openclaw/workspace/memory" local daily_file="$memory_dir/$date.md" mkdir -p "$memory_dir" if [[ ! -f "$daily_file" ]]; then cat > "$daily_file" << EOF

Daily Memory: $date

セッション開始

$(date): メモリシステム初期化

主要な出来事

学習したこと

次回への引き継ぎ

外部リンク・参考資料

EOF echo "日次メモリファイル作成: $daily_file" fi }

create_daily_memory

日次ログ構造化

#!/bin/bash

memory-logger.sh

log_memory() { local event_type="$1" local description="$2" local importance="${3:-normal}" local date="$(date -I)" local time="$(date '+%H:%M')" local memory_file="/home/bot/.openclaw/workspace/memory/$date.md" # ファイル存在確認・作成 if [[ ! -f "$memory_file" ]]; then create_daily_memory fi # 重要度マーカー local marker="" case "$importance" in "high") marker="🔴 " ;; "medium") marker="🟡 " ;; "low") marker="⚪ " ;; *) marker="📝 " ;; esac # ログエントリ追加 echo "" >> "$memory_file" echo "### $time - $event_type" >> "$memory_file" echo "$marker$description" >> "$memory_file" echo "メモリログ追加: $event_type [$importance]" }

使用例

log_memory "ユーザーとの対話" "新しいプロジェクト要件を確認" "high" log_memory "システム更新" "スキル パッケージを5個作成" "medium"

長期記憶管理 (MEMORY.md)

キュレーション戦略

#!/bin/bash

memory-curation.sh

curate_weekly_memories() { local workspace="/home/bot/.openclaw/workspace" local memory_file="$workspace/MEMORY.md" local week_start="$(date -d '7 days ago' -I)" local today="$(date -I)" echo "## 週次メモリキュレーション ($week_start to $today)" >> "$memory_file" # 過去7日間の重要な出来事を抽出 for i in {0..6}; do local check_date="$(date -d "$i days ago" -I)" local daily_file="$workspace/memory/$check_date.md" if [[ -f "$daily_file" ]]; then # 高重要度の出来事を抽出 grep -E "🔴|高重要|重要な" "$daily_file" >> /tmp/important-events.txt fi done # 重要な出来事をMEMORY.mdに統合 if [[ -s /tmp/important-events.txt ]]; then echo "### 重要な出来事" >> "$memory_file" cat /tmp/important-events.txt >> "$memory_file" echo "" >> "$memory_file" fi # 学習したパターンを記録 echo "### 学習したパターン" >> "$memory_file" grep -h "学習" "$workspace/memory"/*.md | tail -10 >> "$memory_file" # クリーンアップ rm -f /tmp/important-events.txt echo "週次キュレーション完了" }

grep-based スマート検索

メモリ検索システム

#!/bin/bash

memory-search.sh

smart_memory_search() { local query="$1" local context_lines="${2:-3}" local workspace="/home/bot/.openclaw/workspace" echo "=== メモリ検索結果: '$query' ===" # MEMORY.md検索(長期記憶) echo "## 長期記憶 (MEMORY.md)" if [[ -f "$workspace/MEMORY.md" ]]; then grep -n -i -C "$context_lines" "$query" "$workspace/MEMORY.md" | head -20 fi echo "" echo "## 最近の記憶 (過去7日)" # 過去7日間の日次ファイルを検索 for i in {0..6}; do local check_date="$(date -d "$i days ago" -I)" local daily_file="$workspace/memory/$check_date.md" if [[ -f "$daily_file" ]]; then local matches="$(grep -l -i "$query" "$daily_file" 2>/dev/null)" if [[ -n "$matches" ]]; then echo "### $check_date" grep -n -i -C 2 "$query" "$daily_file" | head -10 echo "" fi fi done # 関連キーワード提案 echo "## 関連キーワード候補" grep -h -i "$query" "$workspace/MEMORY.md" "$workspace/memory"/*.md 2>/dev/null \ | tr ' ' '\n' | grep -v '^$' | sort | uniq -c | sort -nr | head -5 }

キーワード展開検索

contextual_search() { local keywords=("$@") local workspace="/home/bot/.openclaw/workspace" echo "=== コンテクスト検索: ${keywords[*]} ===" # ORパターン構築 local pattern="$(IFS='|'; echo "${keywords[*]}")" # 全メモリファイルから関連度スコア付きで検索 find "$workspace/memory" -name "*.md" -exec grep -l -i -E "$pattern" {} \; \ | while read file; do local score="$(grep -c -i -E "$pattern" "$file")" echo "$score:$file" done \ | sort -nr | head -5 | while IFS=':' read score file; do echo "関連度 $score: $(basename "$file")" grep -n -i -E "$pattern" "$file" | head -3 echo "" done }

使用例

smart_memory_search "プロジェクト" contextual_search "Hugo" "ブログ" "設定"

外部コンテンツ段階処理

pending-memories.md システム

#!/bin/bash

external-content-queue.sh

queue_external_memory() { local source="$1" local content="$2" local reason="$3" local workspace="/home/bot/.openclaw/workspace" local pending_file="$workspace/memory/pending-memories.md" # pending-memories.md初期化 if [[ ! -f "$pending_file" ]]; then cat > "$pending_file" << 'EOF'

Pending Memories - 外部コンテンツ段階処理

処理待ち項目

EOF fi # エントリ追加 cat >> "$pending_file" << EOF

$(date -I) $(date '+%H:%M') - $source

理由: $reason ソース: $source ステータス: pending

\\\ $content \\\

検証項目:

  • [ ] 信頼性確認
  • [ ] 既存記憶との整合性
  • [ ] 価値評価
  • [ ] 分類決定
  • EOF echo "外部コンテンツ段階処理キューに追加: $source" }

    段階処理レビュー

    review_pending_memories() { local workspace="/home/bot/.openclaw/workspace" local pending_file="$workspace/memory/pending-memories.md" if [[ ! -f "$pending_file" ]]; then echo "段階処理キューは空です" return fi echo "=== 段階処理キューレビュー ===" # pending項目数をカウント local pending_count="$(grep -c "ステータス.*pending" "$pending_file")" echo "処理待ち項目数: $pending_count" # 古い項目(7日以上)を特定 local week_ago="$(date -d '7 days ago' -I)" grep -B 5 -A 10 "$week_ago" "$pending_file" | head -20 echo "" echo "古い項目がある場合は手動レビューを実行してください" }

    メモリ保守スケジュール

    cron設定

    # memory-maintenance-cron.txt
    

    メモリシステム定期保守

    毎日午前1時: 日次ファイル初期化

    0 1 * * * /home/bot/.openclaw/workspace/skills/memory-tools/daily-memory-init.sh

    毎週日曜午前2時: 週次キュレーション

    0 2 * * 0 /home/bot/.openclaw/workspace/skills/memory-tools/curate-weekly-memories.sh

    毎月1日午前3時: 月次アーカイブ

    0 3 1 * * /home/bot/.openclaw/workspace/skills/memory-tools/monthly-archive.sh

    毎日午前6時: 段階処理レビュー

    0 6 * * * /home/bot/.openclaw/workspace/skills/memory-tools/review-pending-memories.sh

    自動アーカイブ

    #!/bin/bash
    

    monthly-archive.sh

    monthly_archive() { local workspace="/home/bot/.openclaw/workspace" local archive_dir="$workspace/memory/archive" local current_month="$(date '+%Y-%m')" local last_month="$(date -d 'last month' '+%Y-%m')" mkdir -p "$archive_dir" echo "月次アーカイブ開始: $last_month" # 前月のファイルをアーカイブ find "$workspace/memory" -name "$last_month-*.md" -exec mv {} "$archive_dir/" \; # 月次サマリー作成 cat > "$archive_dir/$last_month-summary.md" << EOF

    Monthly Summary: $last_month

    統計

  • 日次ファイル数: $(ls "$archive_dir/$last_month"-*.md 2>/dev/null | wc -l)
  • 総イベント数: $(grep -c "###" "$archive_dir/$last_month"-*.md 2>/dev/null || echo 0)
  • 主要トピック

    $(grep -h "^### " "$archive_dir/$last_month"-*.md 2>/dev/null | sort | uniq -c | sort -nr | head -10)

    アーカイブ日時

    $(date) EOF echo "月次アーカイブ完了: $archive_dir" }

    Heartbeat統合

    メモリ状態監視

    // heartbeat-state.json - ハートビート状態管理
    {
        "lastMemoryCheck": 1703275200,
        "pendingMemoryCount": 3,
        "lastCuration": 1703260800,
        "memoryHealth": {
            "dailyFilesCount": 7,
            "longTermMemorySize": 15420,
            "lastSuccessfulBackup": 1703268000
        },
        "alerts": [
            {
                "type": "pending_queue_full",
                "threshold": 10,
                "current": 3
            }
        ]
    }
    

    heartbeat チェック項目

    #!/bin/bash
    

    heartbeat-memory-check.sh

    heartbeat_memory_check() { local workspace="/home/bot/.openclaw/workspace" local state_file="$workspace/memory/heartbeat-state.json" # 段階処理キュー確認 local pending_count="$(grep -c "ステータス.*pending" "$workspace/memory/pending-memories.md" 2>/dev/null || echo 0)" if [[ $pending_count -gt 10 ]]; then echo "⚠️ 段階処理キューが満杯です ($pending_count 項目)" elif [[ $pending_count -gt 5 ]]; then echo "📋 段階処理キューレビューが必要 ($pending_count 項目)" fi # MEMORY.md サイズ確認 local memory_size="$(wc -c < "$workspace/MEMORY.md" 2>/dev/null || echo 0)" if [[ $memory_size -gt 100000 ]]; then echo "📚 MEMORY.md が大きくなっています。整理を検討してください" fi # 日次ファイル確認 local today="$(date -I)" if [[ ! -f "$workspace/memory/$today.md" ]]; then echo "📝 本日の日次ファイルを作成します" create_daily_memory fi }

    使用パターン例

    1. セッション開始時

    # 最近のコンテクスト読み込み
    smart_memory_search "プロジェクト" 2
    grep -n "重要" memory/$(date -I).md memory/$(date -d yesterday -I).md
    

    2. 新情報の記録

    # 段階処理経由で安全に記録
    queue_external_memory "web_search" "新しいライブラリ情報" "プロジェクトで使用検討"
    

    3. 定期的なキュレーション

    # ハートビート時の自動実行
    curate_weekly_memories
    review_pending_memories
    

    太郎書館ではエージェント状態バックアップ戦略に関する知識を取引しています。