プロンプトが「コード」になる瞬間
AIエージェントを初めて構築するとき、単一のモノリシックなシステムプロンプトで十分です。いくつかの指示とツール定義を1つの読みやすいファイルにまとめられます。
しかし、プロダクション用途で使い始めると、この形式はすぐに破綻します。セキュリティポリシー、ドメイン固有ルール、フォーマット要件、エスカレーション動作が積み重なり、気づけば数千行の単一ファイルが出来上がります。ここからが本当のトラブルの始まりです。
これは典型的なソフトウェアエンジニアリングのスケーリング問題です。すべての関心事を1つのファイルに押し込むと、システムを論理的に把握することが難しくなります。コラボレーションは悪夢となり、テストは煩雑になり、あるワークフローを改善するための小さな変更が、静かに別の機能を壊してしまいます。
プロダクション規模では、プロンプトの保守性がそのままエージェントの信頼性になります。
プロンプトが一定のサイズを超えると、主に3つの失敗モードが観察されます:
- コンテキスト汚染: 不要な指示がトークンを消費し、エージェントの判断を曇らせます。
- テスト困難性: 単一ファイル内の特定の動作だけを分離して検証するのが難しいです。
- 変更影響の把握困難: ある部分の修正が他の部分に与える影響を追跡するのが難しいです。
この問題を解決する方法は、プロンプトを単なる静的テキストではなく、**ビルド成果物(Build Artifact)**として扱うことです。

中核的解決策: モジュール型スキルファイルとトランスパイラ
単一プロンプトファイルを保守する代わりに、モジュール型スキルファイルに分割できます。各ファイルは特定の動作をカプセル化し、チームが関心事を分離して、個々のコンポーネントを独立して反復改善できるようにします。
最上位エージェントのプロンプトテンプレートは次のような形になります:
# agents/sre_agent.prompt.md (プロンプトテンプレートファイル)
{% include "shared/safety.prompt.md" %}
{% include "shared/tool_usage.prompt.md" %}
あなたは{{ environment }}環境で運用されるSREトリアージエージェントです。
{% if allow_remediation %}
あなたは改善手順を推奨できますが、破壊的な操作には人間の承認が必要です。
{% else %}
あなたは問題を調査・要約・説明できますが、改善手順を推奨してはいけません。
{% endif %}
{% macro bullet_section(title, items) %}
## {{ title.rstrip() }}
{% for item in items %}
- {{ item.rstrip() }}
{% endfor %}
{% endmacro %}
{{ bullet_section("必須調査手順", [
"最近のデプロイイベントを調査",
"レイテンシとエラー率の変化に関するサービスメトリクスを確認",
"繰り返される失敗パターンのログをレビュー"
]) }}
この方式は、両方の利点を提供します。テンプレートレイヤーは共有指示を構成し、環境固有の値を注入し、マクロを使用できます。そしてビルドシステムの観点では、すべてのincludeが依存関係となり、すべての変数が要件となります。その結果、モデルに到達する前にテスト・監査・diffが可能な決定論的(Deterministic)で完全にレンダリングされた成果物が生成されます。
トランスパイラを使用してテンプレートのimportを解決すれば、エージェントが使用できる状態のファイルが生成されます。
例えば、environment = production、allow_remediation = trueの場合、トランスパイルされた成果物は次のようになります:
あなたはproduction環境で運用されるSREトリアージエージェントです。
あなたは改善手順を推奨できますが、破壊的な操作には人間の承認が必要です。
## 必須調査手順
- 最近のデプロイイベントを調査
- レイテンシとエラー率の変化に関するサービスメトリクスを確認
- 繰り返される失敗パターンのログをレビュー
高レベルのトランスパイレーションパイプラインの構造は次の通りです:
graph TD
A[ソースプロンプトテンプレート] --> B[トランスパイラ]
C[共有スキルモジュール] --> B
D[環境変数] --> B
B --> E[レンダリング済みプロンプト成果物]
E --> F{CI検証}
F -->|成功| G[デプロイリポジトリ]
F -->|失敗| H[ビルド失敗]

プロダクショングレードのトランスパイラに必要な要素
プロダクション環境で使用するトランスパイラは、ランタイム前にエラーを検出する必要があります。ビルドプロセス中に、欠落したimport、未定義の変数、循環依存関係を検証することが重要です。
依存関係グラフはこのプロセスで非常に有用です。各プロンプト断片を有向グラフのノードとして扱うことで、プロダクションで静かな失敗を引き起こす再帰的importを容易に検出できます。
ドリフトチェックによるソースとデプロイ成果物の差異排除
さらに、ドリフトチェックを有効化できます。CIパイプラインでソースからトランスパイルされたプロンプト(ゴールデンファイル)を再生成し、現在コミットされている成果物と比較します。出力が異なる場合、ビルドは失敗します。これにより、リポジトリ内のコードが本番環境で実行されているものと正確に一致することが保証され、ソースファイルとデプロイ済み成果物のギャップが排除されます。
# CIパイプラインでのドリフトチェック例
import subprocess
import hashlib
def check_prompt_drift():
"""ソースから生成した成果物とコミット済み成果物が一致するか確認"""
generated = subprocess.run(
["prompt-transpiler", "build", "--env", "production"],
capture_output=True, text=True
).stdout
committed = open("dist/agent.prompt.md", "r").read()
if hashlib.sha256(generated.encode()) != hashlib.sha256(committed.encode()):
raise SystemExit("プロンプトドリフト検出! ソースと成果物が一致しません。")
if __name__ == "__main__":
check_prompt_drift()
プログレッシブディスクロージャーでトークン効率を確保
モジュール型プロンプト断片のライブラリが成長すると、すべてのエージェントが毎回すべてのスキルをロードするのは非効率です。トークンを消費し、エージェントのタスク固有のパフォーマンスを妨げるノイズを引き起こします。
より良いアーキテクチャパターンは、プログレッシブディスクロージャーを活用することです。これは安定したコントロールプレーンとタスク固有のコンテキストを分離します:
- コンパイル済み基本プロンプト: アイデンティティやセキュリティ境界など、譲れない動作を強制します。
- ランタイム動的ローディング: エージェントはツールを使用して、現在のタスクに必要な特定のスキルモジュールのみを動的に取得します。
この方式により、コンテキスト枯渇が減り、エージェントがタスクに集中できます。
自己維持型エージェントシステムの可能性
このモジュール型システムが整うと、強力なワークフローが開けます: エージェントが自身の指示レイヤーのメンテナンスに貢献できるようになります。新しいタイプのインシデントを解決したエージェントは、理論的には新しいスキルモジュールを作成し、関連するimportを更新し、プルリクエストを開くことができます。
重要なのは、エージェントがリアルタイムで自身の指示を変更するのではなく、コード変更を提案するという点です。トランスパイラはその提案を他のコード変更と同じ検証・レビュープロセスに適用します。人間のレビュアーはPRを検査し、評価を実行し、変更をマージできます。
![]()
まとめ: プロンプトエンジニアリングをビルドシステム問題として捉える
プロダクション規模のプロンプトトランスパイラは、プロンプトエンジニアリングをビルドシステム問題として再構成します。
モジュール型スキルファイルを構築することで、依存関係を解決し、importを検証し、ドリフトチェックを適用できます。これは標準的なソフトウェアインフラで行うのと同じ方法です。エージェントは、既存の検証・レビュープロセスを通過するという条件のもとで、自身のロジックの改善を提案できるようになります。
AIエージェントが重要ワークフローに深く統合されるにつれて、その指示レイヤーには私たちがソフトウェアに要求するのと同じ信頼性基準が必要です。プロンプトは単に編集されるのではなく、ビルドされ、検証され、バージョン管理され、デプロイされるべきです。
日本市場における適用文脈
国内では、金融、製造、SIer環境でのAIエージェント導入が加速しています。特に日本のエンタープライズ環境では、監査要件と規制順守が非常に厳格です。モジュール型プロンプトトランスパイレーションは、これらの要件を満たす上で特に有利です:
- 監査トレーサビリティ: どのプロンプトがいつ、どのように変更されたかをコードレビュー履歴で追跡可能
- 環境分離: 開発/ステージング/本番環境ごとに異なるセキュリティポリシーを適用でき、規制対応に柔軟
- 人的レビュー強化: エージェントが提案した変更も既存のコードレビュープロセスをそのまま適用し、承認権限を保持
この技術の限界と注意点
- 初期構築コスト: テンプレートエンジンとCI/CDパイプラインの初期構築作業が必要です。
- 過度な抽象化リスク: モジュールが細分化されすぎると、管理ポイントが増える可能性があります。実用的な単位で分割することが重要です。
- エージェント自己修正に関するガバナンス: エージェントがPRを生成しても、最終決定権は常に人間にあるべきです。明確なレビュー基準を設定しましょう。
次のステップの学習指針
- テンプレートエンジンの選定: Jinja2やHandlebarsなどの既存テンプレートエンジンで小規模に始めてみましょう。
- CI/CD統合: GitHub ActionsやGitLab CIにドリフトチェックを追加することから始めましょう。
- 評価体制の構築: プロンプト変更がエージェントのパフォーマンスに与える影響を測定する評価データセットを作成しましょう。
プロンプトをコードとして扱う文化が定着すれば、AIエージェントシステムの信頼性は大幅に向上するでしょう。このテーマに関連して、モジュール型プロンプト管理と類似のパターンを持つPython型ヒントの実際の利用状況を確認すると、コード品質管理の別の側面を理解するのに役立ちます。
また、エージェントの指示がますます高度化し、これをデバイス上で処理するGoogle AI Edgeのオンデバイス関数呼び出しの技術も注目すべきトレンドです。