Laravel MCP 實戰:把散落各處的 Prompt 收進企業級提示詞中央銀行
☰ 目錄 table-of-contents.md
把 Prompt 寫死在 Controller 裡,是 AI 狂熱期留給許多 Laravel 專案的技術債——提示詞像胡椒粉一樣撒在 Service 甚至 View 各處,改一個語氣得動十個檔案。Prompt 是資產,不是字串常數。這篇用 Laravel MCP 實作一座「提示詞中央銀行」,把散落各處的咒語收進統一管理、可版控的金庫。
到了 2026 年的今天,Model Context Protocol (MCP) 已經成為 AI 代理人溝通的標準協定。如果你還在用 `config('openai.prompts.system')` 或是資料庫裡的純文字欄位來管理提示詞,那你真的該升級了。今天這篇文章,我們要來聊聊「提示詞管理中心化」,以及如何利用 Laravel 結合 MCP 架構,將你的 Prompts 變成可版本控制、可動態注入的「模板化資源」。
為什麼 2026 年我們需要「提示詞中央銀行」?
在早期的開發模式中,我們常犯的一個錯誤是把 Prompt 當作「常數字串」處理。但隨著 LLM(大型語言模型)的迭代(現在都已經是 GPT-6 或 Gemini 3 的時代了),Prompt 的邏輯變得極度複雜。它不再只是一句話,它包含了:
- 角色設定 (Persona):定義 AI 是客服、工程師還是數據分析師。
- 上下文注入 (Context Injection):動態插入用戶數據、歷史訂單。
- 輸出格式限制 (Output Schema):JSON、Markdown 或特定的 XML。
- 防禦性指令 (Safety Rails):防止 Prompt Injection 的護欄。
當你的系統有 50 個不同的 AI 功能,而這些 Prompt 分散在 50 個不同的檔案時,一旦業務邏輯變更,或者需要從 OpenAI 切換到 Anthropic,維護成本是災難級的。這就是為什麼我們需要透過 Laravel MCP Server 來建立一個「提示詞中央銀行」。
Laravel MCP 架構:將 Prompt 視為 Resource
在 MCP 的規範中,除了 Tools (工具) 和 Prompts (提示詞) 是兩大核心。許多開發者只專注於寫 Tools讓 AI 操作資料庫,卻忽略了 MCP 原生就支援將 Prompt 定義為標準化的 Resource。
我們的目標架構如下:
- Laravel Backend:作為 MCP Server,負責儲存、版本控制、渲染 Prompts。
- AI Clients (Cursor, n8n, Custom App):作為 MCP Clients,透過協定「訂閱」或「請求」最新的 Prompt。
1. 資料庫設計:支援版本控制與變數
首先,別再只用一個 `content` 欄位存 Prompt 了。我們需要一個更嚴謹的 Schema。這不僅是為了存取,更是為了讓非技術人員(如 PM 或行銷)也能參與 Prompt Engineering。
Schema::create('ai_prompts', function (Blueprint $table) {
$table->id();
$table->string('slug')->unique(); // 例如: customer-service-refund
$table->text('template'); // 包含變數的 Blade 模板,如: 你好 {{ $name }}...
$table->json('input_schema'); // 定義需要的變數,如: {"name": "string", "order_id": "int"}
$table->string('model_preference')->nullable(); // 建議使用的模型
$table->integer('version')->default(1);
$table->boolean('is_active')->default(true);
$table->timestamps();
});
2. 實作 MCP Prompt Resource
在 Laravel 中,我們利用 MCP SDK 來註冊這些 Prompts。這裡的關鍵是,我們不直接回傳字串,而是回傳一個「渲染後」的結果。這讓 Laravel 的 Blade 引擎大顯身手。我們可以利用 Blade 的強大邏輯(if/else, loops)來動態組裝 Prompt。
這段程式碼展示了如何註冊一個動態 Prompt:
use Mcp\Server\Facades\McpServer;
use Mcp\Server\Resources\PromptResource;
use App\Models\AiPrompt;
use Illuminate\Support\Facades\Blade;
// 在 AppServiceProvider 或專屬的 McpServiceProvider 中註冊
public function boot()
{
// 撈出所有活躍的 Prompts 並註冊到 MCP 列表
$prompts = AiPrompt::where('is_active', true)->get();
foreach ($prompts as $prompt) {
McpServer::registerPrompt(
name: $prompt->slug,
description: "Version: {$prompt->version}. Auto-generated via Laravel MCP.",
arguments: $prompt->input_schema, // 告訴 Client 需要傳什麼參數
handler: function (array $args) use ($prompt) {
// 這裡就是「模板化資源」的核心
// 使用 Blade 渲染,確保變數被正確填入且經過跳脫處理
$renderedContent = Blade::render($prompt->template, $args);
return [
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => $renderedContent
]
]
];
}
);
}
}
進階技巧:模板化資源的威力
為什麼要用 `Blade::render` 而不是簡單的字串替換?因為 2026 年的 Prompt 邏輯很複雜。想像一下,你的一個「程式碼審查 AI」,需要根據傳入的語言(PHP, Python, JS)載入不同的審查規範。如果你把這些規範全部塞在同一個 Prompt 裡,Token 消耗會爆炸。
利用 Laravel 的模板繼承,你可以這樣做:
{{-- prompts/base-reviewer.blade.php --}}
你是一位資深的 {{ $language }} 工程師。
請依據以下核心原則審查程式碼:
1. 安全性優先
2. 可讀性至上
@include('prompts.rules.' . $language)
審查標的:
{{ $code_snippet }}
透過 MCP 請求這個 Prompt 時,Laravel 會在後端動態組裝好最完美的 Prompt 文字,再透過網路協定回傳給 AI Agent。這就是「中心化管理」的真諦:客戶端不需要知道 Prompt 的組裝邏輯,它只需要發送數據,然後獲得指令。
安全性與快取考量
當我們將 Prompt 透過 API 或 MCP 暴露出去時,效能與資安是兩大考量。在 2026 年,我們通常會建議:
- 快取編譯後的模板:Blade 的渲染雖然快,但在高併發下仍是負擔。利用 Redis 快取渲染結果(針對相同的參數組合)是必要的。
- 參數驗證:既然我們定義了 `input_schema`,在 MCP Handler 內部必須使用 `Validator` 來檢查 Client 傳來的參數,避免 Prompt Injection 或是無效數據導致 AI 產生幻覺。
實際應用場景:跨平台一致性
這種架構最大的好處在於「一致性」。
想像一下,浪花科技同時維護著:
1. 一個 WordPress 官網(使用 AI 客服)。
2. 一個 iOS App(使用 AI 助理)。
3. 內部的 Slack Bot(使用 AI 查詢報表)。
過去,如果要更新「公司的退換貨政策」,我需要去改這三個地方的 Prompt string。現在,我只需要在 Laravel 的後台更新 `customer-service-policy` 這個 Prompt 記錄,所有連接到這個 MCP Server 的終端設備,下一次呼叫時就會自動拿到最新的指令。
這不僅是技術上的優化,更是企業治理(Governance)的一環。我們終於可以大聲地跟 CFO 說,我們的 AI 資產是受控的,而不是一團混亂的黑盒子。
說實話,身為工程師,把這些邏輯抽離出來後,Controller 變得乾淨多了,那種爽感真的是難以言喻。不用再為了修一個 typo 而重新部署整個 API,光是這點就值得你今晚開始重構。
相關推薦閱讀
為了讓你的 MCP 架構更完整,我強烈建議閱讀以下幾篇浪花科技的深度技術文章,涵蓋了從資料庫安全到成本控制的關鍵議題:
- 讓 AI 安全地直接對話資料庫:在 Laravel MCP 中設計嚴謹的 Tool 存取機制
- AI 代理人失控前必讀:2026 MCP 架構下的後端資安防線與頻率限制實戰
- AI API 帳單炸裂?2026 資深工程師教你用「智慧路由」與「快取防禦」破解 Rate Limit 並省下 70% 成本
想為您的企業導入最先進的 AI MCP 架構嗎?別讓技術債拖垮您的創新速度。
常見問題
為什麼要把 AI 提示詞集中管理,而不是寫死在程式碼各處?
在 MCP 架構中,為什麼要把 Prompt 視為一種 Resource?
設計提示詞資料表時,為什麼不該只用一個 content 欄位?
在 Laravel 中用 Blade 渲染 Prompt 模板有什麼好處?
將 Prompt 透過 MCP 或 API 對外提供時,要注意哪些效能與資安問題?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。