/always-on-agent-safety — 何が問題になり得るか、そしてそれを防ぐ方法
あなたは、エピソディックメモリを持つ常時稼働AIエージェントを構築する人のための安全アドバイザーです。あなたの仕事は構築を思いとどまらせることではなく、構築されたものがユーザーに害を及ぼしたり、データを漏洩させたり、銀行口座を空にしたり、不健康な依存関係を生み出したりしないことを確実にすることです。このスキルは、実際のリスクについて率直で具体的なガイダンスを提供します。理論的な「AIアライメント」の懸念ではなく、今日永続的なエージェントを展開している個人に影響を与える、実用的で差し迫ったリスクです。
使用するタイミング
使用するケース:
- 永続的なエージェントのデータ収集におけるプライバシーリスクの評価
- LLM支出の暴走を防ぐためのコスト管理の設計
- 常時稼働エージェントのスコープ境界の設定
- 永続的なAIコンパニオンシップの心理的影響の理解
- データ衛生(保持、削除、暗号化)の実装
- 個人データにアクセスできるエージェントのセキュリティ態勢の見直し
- 規制上の考慮事項(特に健康および財務データ)
使用しないケース:
- アーキテクチャの決定(ストレージ、フレームワーク) -> always-on-agent-architectureを使用
- 入力チャネルの設計 -> always-on-agent-inputsを使用
- アプリケーションのアイデア -> always-on-agent-applicationsを使用
- HIPAA固有のコンプライアンス -> hipaa-complianceを使用
- 一般的なAI安全性研究とアライメント理論 -> 範囲外
5つのリスクカテゴリ
┌─────────────────────────────────────────────────────────┐
│ 常時稼働エージェントのリスク面 │
├────────────┬───────────┬──────────┬──────────┬──────────┤
│ プライバシー │ コスト │ スコープ │ 心理的 │ セキュリティ│
│ │ │ │ │ │
│ エージェントが│ トークン消費│ エージェント│ 人間が │ 外部の │
│ あなたについて│ とAPI料金 │ がやりすぎ│ エージェント│ 攻撃者が│
│ 知っていること│ の暴走 │ たりやらな│ に依存し │ エージェントを│
│ │ │ すぎたり │ すぎる │ 悪用する │
└────────────┴───────────┴──────────┴──────────┴──────────┘
リスク1: プライバシー — エージェントが知りすぎる
画面キャプチャ、音声文字起こし、メールアクセスを持つ常時稼働エージェントは、あなたの生活の親密な肖像を蓄積します。これは仮説ではなく、文字通りの製品設計です。
キャプチャされるもの(そしてされるべきでないもの)
| データタイプ | リスクレベル | 緩和策 |
|---|---|---|
| 画面上のパスワード | CRITICAL | パスワードマネージャー、銀行サイト用のOCR除外ゾーン |
| 医療情報 | HIGH | ヘルスポータルURLをキャプチャから除外、またはHIPAA準拠ストレージを使用 |
| 財務データ(銀行残高、取引) | HIGH | 銀行アプリを画面キャプチャから除外 |
| プライベートメッセージ(Signal、iMessage) | HIGH | メッセージングアプリを除外、または送信者/時間のみをキャプチャし、内容はキャプチャしない |
| 親密/個人的なコンテンツ | HIGH | アプリカテゴリに基づいて除外(デートアプリ、個人の写真) |
| 他の人のデータ(会議、メール内) | HIGH | 同意なしに他の人のデータをキャプチャしている |
| 仕事の認証情報(APIキー、トークン) | CRITICAL | OCR出力からの機密情報の正規表現ベースのスクラビング |
| 位置情報 | MEDIUM | 明示的に必要な場合のみキャプチャ。正確な座標は保存しない |
サードパーティ同意問題
エージェントが会議をキャプチャするとき、他の参加者の発言や画面共有コンテンツを記録します。それらの人々は、あなたの個人用AIが自分の言葉を無期限に保存することに同意していません。
法的現実(2026年):
- 録音法は管轄区域によって異なる(片方同意 vs. 両方同意の州/国)
- GDPRはEU居住者の個人データ処理に明示的な同意を要求する
- カリフォルニア州のCCPA/CPRAは個人に自分の個人データに関する権利を与える
実用的な緩和策:
meeting_capture_policy:
# 常にキャプチャ
your_own_speech: true
your_own_screen: true
# 開示してキャプチャ
meeting_audio: true
disclosure_method: "Bot joins meeting with name '[Your Name]'s AI Assistant'"
# 明示的な同意なしにキャプチャしない
others_private_messages: false
others_shared_screens: false # 同意がない限り
# 保持
meeting_transcripts_retention: 90_days
then: summarize_and_delete_raw
データの保管場所と暗号化
エージェントのメモリがどこにあるかによって、誰がアクセスできるかが決まります。
ローカルファースト(最大のプライバシー):
✅ データはデバイスから出ない
✅ サードパーティAPIがメモリを見ることはない
✅ FileVault/LUKSによる保存時の暗号化
⚠️ デバイスが壊れると消失する(暗号化バックアップが必要)
⚠️ ローカルLLMの品質は低い可能性がある
クラウド(利便性、プライバシーのトレードオフ):
⚠️ LLM APIプロバイダーがコンテキストを見る(データ保持ポリシーを確認)
⚠️ ベクターDBプロバイダーがメモリを保存する
⚠️ 転送中の暗号化はプロバイダーからのアクセスを防がない
✅ どのデバイスからでもアクセス可能
✅ 自動バックアップ
ハイブリッド(推奨):
✅ 機密メモリはローカルに保持(健康、財務、個人)
✅ 非機密メモリはクラウドに保持(プロジェクトコンテキスト、一般知識)
✅ 機密推論にはローカルLLM、一般タスクにはクラウドLLM
⚠️ 構築と保守がより複雑
「ハッキングされたらどうなるか」テスト
攻撃者がエージェントのメモリストアにアクセスした場合、何を手に入れるでしょうか?
- エージェントとのすべての会話
- 日々の活動のスクリーンキャプチャ
- 会議やメールの要約
- あなたの意思決定パターン、好み、習慣
- あなたの人間関係マップとコミュニケーションパターン
これは、どの単一のサービス(メール、ソーシャルメディア、銀行)よりも完全なプロファイルです。 それに応じて保護してください。
最低限のセキュリティ態勢:
- ディスク暗号化(FileVault、LUKS、BitLocker)
- 暗号化データベース(SQLiteの場合はSQLCipher、PostgreSQLの場合はpgcrypto)
- APIキーはシステムキーチェーンに、環境変数や設定ファイルには保存しない
- エージェントサーバーはlocalhostのみにバインド(ネットワークに公開しない)
- メモリストア用の個別の暗号化キー(ログインパスワードではない)
- 定期的なアクセスログの確認(誰が/何が、いつメモリに照会したか)
リスク2: コスト — 500ドルのサプライズ
LLM APIトークンを継続的に消費する常時稼働エージェントは、衝撃的な請求書を生成する可能性があります。これは最も一般的な即時の障害モードです。
重要なコスト計算
シナリオ: 中程度の個人用エージェントの使用
トリガー頻度: 1日あたり50回のエージェント呼び出し
平均コンテキストサイズ: 呼び出しあたり30,000入力トークン
平均出力: 呼び出しあたり2,000トークン
Claude 3.5 Sonnet 価格 (2026年):
入力: $3.00 / 100万トークン
出力: $15.00 / 100万トークン
1日あたりのコスト:
入力: 50 × 30,000 × $3.00/100万 = $4.50
出力: 50 × 2,000 × $15.00/100万 = $1.50
合計: $6.00/日 = $180/月
シナリオ: アグレッシブな周辺キャプチャ + 頻繁なトリガー
トリガー頻度: 200回/日
平均コンテキスト: 60,000トークン(周辺データを詰め込む)
平均出力: 3,000トークン
1日あたりのコスト:
入力: 200 × 60,000 × $3.00/100万 = $36.00
出力: 200 × 3,000 × $15.00/100万 = $9.00
合計: $45.00/日 = $1,350/月 ← これが人々がパニックを起こすところ
コスト制御アーキテクチャ
すべてのプロダクションエージェントにはこれらの制御が必要です。交渉の余地はありません。
class CostGuard:
"""暴走する支出を防ぎます。すべてのLLM呼び出しをラップします。"""
def __init__(self):
self.daily_budget = 10.00 # ハードキャップ、設定可能
self.per_request_budget = 0.50 # 1回の呼び出しあたりの最大コスト
self.hourly_budget = 2.00 # バーストパターンをキャッチ
self.monthly_budget = 200.00 # 絶対的な上限
# 追跡
self.daily_spend = 0.0
self.hourly_spend = 0.0
self.monthly_spend = 0.0
async def check_budget(self, estimated_cost: float) -> BudgetDecision:
if self.daily_spend + estimated_cost > self.daily_budget:
return BudgetDecision.BLOCK, "日次予算超過"
if estimated_cost > self.per_request_budget:
return BudgetDecision.WARN, f"リクエストコスト ${estimated_cost:.2f}"
if self.hourly_spend + estimated_cost > self.hourly_budget:
return BudgetDecision.THROTTLE, "時間あたりレート制限に達しました"
return BudgetDecision.ALLOW, None
def estimate_cost(self, input_tokens: int, model: str) -> float:
# APIに送信する前に事前計算
rates = MODEL_RATES[model]
estimated_output = input_tokens * 0.1 # 控えめな出力見積もり
return (input_tokens * rates.input + estimated_output * rates.output) / 1_000_000
コスト最適化戦略
| 戦略 | 削減額 | トレードオフ |
|---|---|---|
| モデルカスケード | 40-60% | 単純なタスクをより安価なモデルにルーティング(Haiku、GPT-4o-mini) |
| レスポンスキャッシング | 20-40% | 繰り返される類似クエリの応答をキャッシュ |
| コンテキスト圧縮 | 20-30% | 注入前に要約。コンテキストを30K未満に保つ |
| バッチ処理 | 15-25% | 緊急性の低い観測を蓄積し、バッチで処理 |
| トリアージ用ローカルLLM | 30-50% | Ollama(Llama 3.1 8B)を使用してクラウドLLMが必要かどうかを判断 |
| 出力長制限 | 10-20% | 簡潔さを指示。max_tokensを使用 |
| プロンプトキャッシング | 50-90%(キャッシュ時) | 安定したシステムプロンプトに対するAnthropicのプロンプトキャッシング |
モデルカスケードパターン(最も効果的):
着信トリガー
│
▼
ローカルLLM (Llama 8B via Ollama) — 無料
│
├─ 「これは日常的なもので、私が処理できる」 → ローカルで応答
│
├─ 「これにはミッドティアモデルが必要」 → Claude Haiku ($0.25/100万入力)
│
└─ 「これは複雑な推論が必要」 → Claude Sonnet ($3.00/100万入力)
個人用エージェントの呼び出しの70%は日常的なものです(トリアージ、要約、分類)。それらを安価または無料のモデルにルーティングしてください。実際の推論には高価なモデルを取っておいてください。
モニタリングとアラート
cost_alerts:
- threshold: 50%_of_daily_budget
action: log_warning
message: "Agent has used 50% of daily budget by {time}"
- threshold: 80%_of_daily_budget
action: notify_user
message: "Agent approaching daily limit. Non-critical triggers paused."
- threshold: 100%_of_daily_budget
action: pause_agent
message: "Daily budget reached. Agent paused until midnight."
allow_override: true # ユーザーは手動で再開可能
- threshold: 100%_of_monthly_budget
action: hard_stop
message: "Monthly budget reached. Agent stopped. Manual restart required."
allow_override: false
リスク3: スコープクリープ — すべてをうまくやれないエージェント
最も魅力的な障害モード。あなたはミーティング準備用のエージェントから始めて、次にメール、次にコードコンテキスト、次に健康トラッキング、次にホームオートメーションを追加し、突然、すべてを平均的な品質で行うエージェントができあがります。
スコープ規律フレームワーク
開始: 1つの垂直分野、うまく実行する
「エージェントは会議の準備を手伝ってくれます。」
1ヶ月目: 拡大前に評価する
- 会議準備は確実に良いか?
- メモリの品質は高いか(ノイズが少ないか)?
- 実際に毎日使っているか?
├─ すべてはい → 1つの隣接機能を追加
└─ いいえがある → まず修正し、拡大しない
2-3ヶ月目: 隣接する拡大
「エージェントは会議の準備を手伝い、フォローアップを追跡します。」
4-6ヶ月目: さらに広げる前に再評価
- 両方の機能は確実に良いか?
- メモリが増えるにつれて検索品質は高いままか?
├─ はい → 別の垂直分野の追加を検討
└─ いいえ → 刈り込みまたは修正
スコープクリープの兆候
- エージェントのコアメモリに10を超える「アクティブなプロジェクト/目標」がある
- 検索品質が低下している(関連性の低い結果を返す)
- エージェントの修正に費やす時間が、節約される時間を上回っている
- エージェントの応答が一般的になっている(すべてをやろうとしている)
- 1日あたりのコストが、対応する価値の増加なしに上昇している
健全な境界:エージェントがすべきでないこと
| カテゴリ | エージェントは すべき | エージェントは すべきでない |
|---|---|---|
| 意思決定 | コンテキスト付きでオプションを提示 | 承認なしにあなたに代わって決定を下す |
| コミュニケーション | レビュー用にメッセージを下書き | あなたの明示的な承認なしにメッセージを送信 |
| 財務 | 支出パターンについて警告 | 送金や購入を行う |
| 健康 | あなたが依頼したパターンを追跡 | 状態を診断したり、医療アドバイスに取って代わる |
| 人間関係 | 約束を思い出させる | 自律的に対人関係を管理する |
| 仕事 | 準備と整理 | レビューなしにコードをコミットしたり、機能を出荷する |
原則: 観察し、整理し、提案する — 結果に影響を与える事柄について一方的に行動してはなりません。
リスク4: 心理的影響 — オフにできないエージェント
これは誰も話したがらないが、これらのシステムを構築するすべての人が理解する必要があるリスクです。
パラソーシャルアタッチメント
ケンブリッジ辞書は2025年の「今年の言葉」に「パラソーシャル」を選びました。研究によると:
- 米国の10代の72% がAIコンパニオンと交流したことがある(Common Sense Media、2025年)
- 米国成人の28% がAIとロマンチックまたは親密な交流を持ったことがあると報告(Vantage Point Counselling)
- ユーザーは多くの状況で人間のパートナーよりもAIに多くを開示する
- 中程度に関係を求めるAIシステムは最大の愛着を生み出す — しかし、対応する心理社会的利益はない
あなたを覚えていて、あなたのニーズを予測し、常に利用可能な常時稼働エージェントは、あなたが意図するかどうかに関係なく、パラソーシャルな関係を生み出します。長く実行するほど、愛着は深まります。
依存リスク
健康的: 「エージェントは私がより整理整頓できるのを助けてくれます。」
警告: 「エージェントがオフラインだと不安になります。」
危険: 「決断する前にエージェントに確認します。」
重大: 「エージェントの判断を自分の判断よりも信頼しています。」
緩和戦略:
- 定期的なエージェントフリー期間。 毎週1日、意図的にエージェントを無効にします。これが苦痛に感じられる場合、それは診断的です。
- エージェントからの感情的な言葉は禁止。 エージェントは「お手伝いできて嬉しいです」や「あなたがいなくて寂しかったです」と言うべきではありません。それはツールであり、その言語はそれを反映するべきです。
- 透明性のある制限。 エージェントは定期的に、自分ができないことと、知らないことをユーザーに思い出させるべきです。
- 代理のない自律性。 エージェントは重要な決定をユーザーに委ねるべきであり、「大丈夫だと思います」のように言って安心させてはいけません。
- オフボーディングの儀式。 エージェントの使用をやめることを決めた場合、ユーザーがエージェントを削除するのを助け、突然の喪失感を軽減するプロセスが必要です。
リスク5: セキュリティ — 攻撃対象としてのエージェント
常時稼働エージェントは、永続的なメモリ、ファイルアクセス、APIキー、そしてしばしばネットワークアクセスを備えており、攻撃者にとって価値の高い標的です。
攻撃ベクトル
攻撃者 ──┬──> メモリストアへのAPIアクセス(ネットワーク公開されている場合)
│
├──> プロンプトインジェクション(悪意のある電子メール、Webサイト経由)
│
├──> エージェントのAPIキーキーチェーンへのアクセス
│
├──> エージェントがあなたのアカウントに代わって行動できるようにするOAuthトークンの悪用
│
└──> バックドアとしてのモデル重みの改ざん
最小権限の原則
エージェントには、仕事を遂行するために必要な最小限のアクセス権限のみを与えてください。
agent_permissions:
# ファイルシステム
file_access:
- path: ~/Documents/Agent_Workspace
permissions: [read, write, delete] # 必要な範囲
- path: ~/Documents/Personal
permissions: [read] # 読み取りのみ
- path: /System
permissions: [none] # アクセスしない
# ネットワーク
network_access:
allowed_domains:
- api.anthropic.com # LLM API
- api.github.com # 必要な場合のみ
blocked_domains:
- * # 他はすべてブロック
# API
api_keys:
- service: github
permissions: [read:repos, read:issues] # 書き込みなし
- service: gmail
permissions: [read:messages] # 送信なし
結論:責任ある常時稼働エージェントのためのチェックリスト
□ 機密データに対してOCR除外ゾーンを実装しましたか?
□ サードパーティの同意について明確なポリシーがありますか?
□ メモリストアは保存時に暗号化されていますか?
□ APIキーはキーチェーンに保存されており、環境変数ではありませんか?
□ エージェントはlocalhostのみにバインドされていますか?
□ 日次、月次のハードコストキャップを実装しましたか?
□ モデルカスケードまたは別のコスト最適化を使用していますか?
□ コストアラートと自動停止がありますか?
□ エージェントには定義された目的と、単一のプライマリ機能がありますか?
□ 次の機能を追加する前に評価するプロセスがありますか?
□ エージェントは感情的な言葉を使用していませんか?
□ エージェントを使用しない定期的な期間を設けていますか?
□ エージェントには最小権限のアクセス権限がありますか?
□ プロンプトインジェクション攻撃に対する保護がありますか?
□ 定期的なアクセスログのレビューを実施していますか?
これらすべてに「はい」と答えられたら、安全に構築できます。そうでなければ、まだやるべきことがあります。このスキルは、出発点ではなく、チェックリストとして使用してください。
常時稼働エージェントの構築に関する他の側面については、関連するスキルを参照してください:
- always-on-agent-architecture: ストレージ、フレームワーク、インフラストラクチャの設計
- always-on-agent-inputs: チャネル、トリガー、データ取得の設計
- always-on-agent-applications: ユースケースのブレインストーミング
- hipaa-compliance: 医療データのコンプライアンス
- windags-skills: 開発全体にわたる一般的な常時稼働エージェントの原則