パターン検出
データやログから繰り返し出現するパターンを自動的に発見する技術。自動化の候補を見つけたり、異常を検出したりするのに使われる。
検出対象のパターン
1. 繰り返しパターン
同じ操作や処理が複数回出現する場合、自動化の候補となる。
例:
Read "articles/xxx.md" → Grep "概念" → Write "notes/yyy.md"
Read "articles/zzz.md" → Grep "概念" → Write "notes/www.md"
→ 「記事から概念を抽出する」タスクとして自動化
2. 後処理パターン
特定の処理の後に毎回同じ修正が入る場合、元の処理に不備がある可能性がある。
例:
Skill: /commit
Edit: "Co-Authored-By を追加"
→ スキルのテンプレートに Co-Authored-By をデフォルト追加
3. 未使用パターン
長期間使われていないリソース(ツール、スキル、設定など)は削除候補。
例:
30日間一度も呼び出されていないスキル → 削除提案
4. 異常パターン
通常と異なる振る舞いを検出する。
例:
通常と異なる時間帯のアクセス
想定外のファイルへのアクセス
異常に多いエラー発生
検出アルゴリズム
頻度ベース
同じパターンが閾値(例: 3回)以上出現したら検出する。
from collections import Counter
def detect_patterns(logs, threshold=3):
patterns = Counter(logs)
return [p for p, count in patterns.items() if count >= threshold]
シーケンスベース
連続した操作のパターンを検出する。
def detect_sequences(logs, window_size=3):
sequences = []
for i in range(len(logs) - window_size + 1):
sequences.append(tuple(logs[i:i+window_size]))
return Counter(sequences).most_common()
時系列ベース
時間的な間隔や周期性を検出する。
def detect_temporal_patterns(events):
intervals = [events[i+1].time - events[i].time
for i in range(len(events)-1)]
# 定期的な間隔を検出
return find_periodic_intervals(intervals)
メタエージェントでの活用
ユーザーの作業パターンを観察し、スキル化や改善を提案する:
- フックでツール使用履歴を記録
- 定期的にパターン検出を実行
- 検出されたパターンを分析
- 自動化候補として提案
静的解析と動的解析
静的解析
コードやテキストを実行せずに分析する。
例: セキュリティチェックで危険なコマンドパターンを検出
DANGEROUS_PATTERNS = [
r'rm\s+-rf\s+/',
r'curl.*\|.*bash',
r'eval\s*\$\(curl',
]
def check_security(content):
for pattern in DANGEROUS_PATTERNS:
if re.search(pattern, content):
return False
return True
動的解析
実際の実行履歴やログから分析する。
例: ツール使用ログからワークフローパターンを検出
レベル別の対応
検出されたパターンの深刻度に応じて対応を変える。
レベル1: 即座にブロック
明らかに危険なパターン → 自動的に拒否
レベル2: 警告
潜在的に危険なパターン → ユーザーに確認
レベル3: 情報提示
改善候補 → ログに記録し、後で提案
機械学習との組み合わせ
単純なルールベースだけでなく、機械学習を使った高度なパターン検出も可能:
- クラスタリングで類似操作をグループ化
- 異常検知で通常と異なる振る舞いを発見
- 時系列予測で次の操作を予測
実装上の注意
ノイズ除去
一度きりの操作や、意図的でない操作を除外する。
閾値調整
パターンとして認識する基準(回数、期間など)を適切に設定する。
プライバシー
個人情報を含むログは慎重に扱う。