概要
システムプロンプト(System Prompt)は、AI エージェントの動作を導く中核的な指示です。OpenClaw は静的なプロンプトテンプレートを使用せず、buildAgentSystemPrompt() 関数を通じてシステムプロンプトを動的に構築します。この関数は 15 種類以上のパラメータタイプを受け取り、現在のチャンネル、ユーザーロール、利用可能なツール、セッションコンテキストに基づいて高度にカスタマイズされたプロンプトを生成します。
buildAgentSystemPrompt() メカニズム
この関数は OpenClaw のシステムプロンプトのコアビルダーです。新しいエージェントセッションが作成されるたびに、システムはこの関数を呼び出して現在のコンテキストに適したシステムプロンプトを生成します。Pi SDK は直接埋め込み方式(サブプロセス呼び出しではない)であるため、この構築プロセスは同一ランタイム内で完了し、シリアライゼーションのオーバーヘッドがありません。
パラメータタイプ一覧
buildAgentSystemPrompt() がサポートする主なパラメータタイプは以下の通りです。
- channelType:現在のチャンネルタイプ(Discord / Telegram / Slack / WhatsApp)
- channelId:チャンネルの一意識別子
- userId:現在のユーザー ID
- userRole:ユーザーロール(管理者、一般ユーザー、ゲストなど)
- availableTools:現在利用可能なツールリスト
- toolDescriptions:ツールの詳細な説明情報
- sessionHistory:セッション履歴の概要
- customInstructions:ユーザーカスタム指示
- languagePreference:言語設定
- responseFormat:期待されるレスポンスフォーマット
- safetyPolicy:安全ポリシー設定
- knowledgeBase:ナレッジベース参照
- extensionPrompts:ロード済み拡張機能のプロンプトフラグメント
- timeContext:時間コンテキスト(タイムゾーン、現在時刻)
- platformConstraints:プラットフォーム固有の制約(メッセージ長上限など)
- memoryContext:永続化メモリコンテキスト
チャンネルに応じた動的カスタマイズ
システムプロンプトの最も重要な動的要素はチャンネル適応です。異なるプラットフォームには異なるインタラクション規範と技術的制約があります。
Discord チャンネル
Discord 向けのシステムプロンプトには、埋め込みメッセージ形式の説明、Markdown レンダリングルール、絵文字の使用ガイダンス、スレッドインタラクション規範、および 2000 文字のメッセージ長制限のリマインダーが含まれます。
Telegram チャンネル
Telegram 環境では、システムプロンプトにインラインキーボードインタラクションの説明、HTML フォーマットルール(Telegram は完全な Markdown ではなく HTML を使用)、ファイル送信機能の説明、および 4096 文字のメッセージ制限が追加されます。
Slack チャンネル
Slack のシステムプロンプトには、Block Kit フォーマットの説明、スレッド返信の規範、アプリメッセージとユーザーメッセージの区別、およびワークスペース関連のコンテキスト情報が含まれます。
WhatsApp チャンネル
WhatsApp のシーンでは、簡潔な返信スタイルの指示、限定的なフォーマットサポートの説明、メディアメッセージの処理方法などが注入されます。
カスタム指示レイヤー
システムが自動生成するコンテンツに加えて、管理者とユーザーは複数のレベルでカスタム指示を注入できます。
グローバル指示
OpenClaw の設定ファイルで設定するグローバル指示は、すべてのチャンネルとすべてのユーザーに適用されます。ここには通常、AI エージェントの基本的なペルソナ、中核的な動作規範、汎用的な安全ポリシーを配置します。
チャンネルレベル指示
各チャンネルに独立したカスタム指示を設定できます。例えば、技術サポートチャンネルにはドメイン知識とトラブルシューティングのフローを注入し、雑談チャンネルにはよりカジュアルな会話スタイルを設定できます。
ユーザーレベル指示
個々のユーザーが自分の好みの指示を設定できます。言語設定、回答の詳細度などです。これらの指示は構築プロセスで最終的なシステムプロンプトにマージされます。
拡張プロンプトの統合
OpenClaw が拡張機能(Extension)をロードする際、各拡張機能は独自のプロンプトフラグメントを提供できます。buildAgentSystemPrompt() はこれらのフラグメントを収集し、システムプロンプトの適切な位置にマージします。
例えば、画像生成拡張機能は次のようなプロンプトフラグメントを注入する可能性があります。「ユーザーが画像生成をリクエストした場合、image_generate ツールを使用し、説明は英語で記述し、スタイルパラメータは realistic、anime、sketch などをサポートします。」
この設計により、拡張機能はツール機能を提供するだけでなく、AI にそれらのツールを正しく使用する方法を指導することもできます。
セッションコンテキスト認識
buildAgentSystemPrompt() は現在のセッションの状態も参考にします。
- セッション長:長い会話では要約コンテキストが追加される可能性がある
- 最近のトピック:会話の話題に応じてプロンプトの重点を微調整
- JSONL 永続化状態:セッション永続化ストレージからコンテキストを復元、圧縮(compaction)処理された履歴の要約を含む
プロンプトのデバッグ
開発者は設定で debugSystemPrompt: true を有効にすることで、最終的に構築された完全なシステムプロンプトをログに出力できます。これは予期しない AI の動作をデバッグする際に非常に有用です——AI が受け取った指示を正確に確認できます。
また、API エンドポイント /api/debug/system-prompt を通じて、現在のチャンネルのシステムプロンプトのスナップショットを取得することもでき、ログを確認せずにプロンプトの内容を検査できます。
ベストプラクティス
- 簡潔に保つ:各レベルのカスタム指示は長すぎないようにし、コア指示の効果の希釈を避ける
- 矛盾を避ける:異なるレベルの指示が矛盾する可能性がある。優先順位は:安全ポリシー > グローバル指示 > チャンネル指示 > ユーザー指示
- テストで検証:プロンプトを変更した後、デバッグモードで最終的な構築結果を検証する
- バージョン管理:カスタム指示をバージョン管理に含め、変更履歴を追跡する
まとめ
buildAgentSystemPrompt() は、OpenClaw がインテリジェントなチャンネル適応を実現する中核メカニズムです。15 種類以上のパラメータの動的な組み合わせにより、各会話がカスタマイズされたシステム指示を受け取り、AI エージェントが異なるプラットフォーム、異なるシーンで最適なインタラクション体験を提供できるようになります。