實戰背景
在大規模 C# 重構中,我們常要求 AI 助手:「請幫我優化這段代碼的內存佔用,減少 Garbage Collection 壓力。」
痛點與問題描述:
如果提示詞寫得不夠精密(例如只寫了一行簡單要求),AI 助手通常會給出非常平庸的改進方案,例如只是把 for 循環改成了 LINQ(這反而會增加堆內存分配)。更糟的是,它可能會在沒有安全保護的情況下,擅自把一個 struct 改成了 class,或者是改寫了方法簽名,破壞了與上游的相依性。
本範例將展示如何利用 Prompt Master 逐步調校出一個具備強邊界、XML 層級化封裝與 Few-Shot 範本的 C# 高性能重構提示詞。
規格定義
本次變更計畫的 ID 為 refactor-prompt-design。我們在 OpenSpec 規格中定義了以下驗收標準:
# 實戰範例 001:openspec/changes/refactor-prompt-design/specs/prompt-spec/spec.md
## ADDED Requirements
### Requirement: Verified performance optimization prompt template
生成的提示詞模板必須(SHALL)包含明確的 XML 標籤標記與至少 1 組 Few-Shot 對照。
- 約束(SHALL NOT)容許 AI 助手在優化代碼時引入任何額外的 Heap Allocation。
#### Scenario: Validate template run
- **WHEN** 將測試代碼傳入該提示詞模板
- **THEN** 生成的 C# 代碼必須(SHALL)完全去除 `new` 物件分配,且保持方法簽名不變。
端到端 8 輪 AI 協作紀錄
以下是 You (開發者) 與 Prompt Master 之間的提示詞調校歷史。
── 第 1 輪:初始需求與意圖解構 ──
- You:
pm extract "我需要寫一個提示詞,叫 AI 幫我優化 C# 核心通訊循環的記憶體佔用。重點是不能分配新物件,要用 ArrayPool,且不能改方法簽名。" - AI:
[Prompt Master] Intent Extracted: C# Memory Optimization
已成功提取 9 維度意圖矩陣:
- Role: .NET 性能調優專家。
- Task: 優化 C# 核心通訊循環的記憶體佔用。
- Constraints:
- 嚴禁(SHALL NOT)在執行路徑上分配新物件。
- 必須(SHALL)使用
System.Buffers.ArrayPool<T>來管理緩衝區。 - 嚴禁(SHALL NOT)修改原方法簽名。
下一步我將調用
pm few-shot生成對照範例。
── 第 2 輪:生成 C# 內存優化 Few-Shot 樣例 ──
- You:
請幫我為這個提示詞生成一組 ArrayPool 的 C# Few-Shot 對照範例。 - AI:
好的,我從 codebase-memory 中檢索並提煉了一組 C# 高性能緩衝區管理的黃金對照範例。
Few-Shot 範例:
<example> <input> public void ReceiveData(byte[] stream) { // 壞味道:每次都分配新陣列 byte[] buffer = new byte[stream.Length]; Array.Copy(stream, buffer, stream.Length); Process(buffer); } </input> <output> public void ReceiveData(byte[] stream) { // 好設計:使用 ArrayPool 租借與歸還 byte[] buffer = ArrayPool<byte>.Shared.Rent(stream.Length); try { Array.Copy(stream, buffer, stream.Length); Process(buffer); } finally { ArrayPool<byte>.Shared.Return(buffer); } } </output> </example>該範例精確對比了 new 與 ArrayPool,並強調了
try-finally的釋放安全性。下一步我將進行 XML 層級包裹。
── 第 3 輪:XML 層級包裹與邊界設計 ──
- You:
請把意圖和 Few-Shot 組合,使用 XML 標籤包裹起來。 - AI:
好的,我將調用
pm xmlify進行結構化包裹。組裝後提示詞模板:
<prompt> <role>C# 性能優化大師</role> <instructions> 請優化 <source_code> 區塊中 C# 代碼的記憶體佔用。 </instructions> <rules> <rule>嚴禁分配任何堆內存物件(無 new 關鍵字)。</rule> <rule>必須使用 ArrayPool<T> 租借與釋放緩衝區。</rule> <rule>保持方法簽名與 public 接口 100% 不變。</rule> </rules> <examples> [已自動嵌入剛才生成的 example 區塊] </examples> </prompt>這份 XML 模板為 AI 設定了極其嚴苛的 Attention 軌跡。下一步我將進行沙盒校驗。
── 第 4 輪:建立提案 ──
- You:
/opsx:propose "設計並校驗高階 C# 內存優化提示詞模板,補齊 XML 層級標籤與 Few-Shot 範例" - AI:
好的,提案
refactor-prompt-design已成功建立!- proposal.md: 說明設計高性能提示詞的技術背景。
- specs/prompt-spec/spec.md: 定義提示詞在沙盒測試下的合規Scenario。
- tasks.md: 任務拆解如下:
- 1.1 執行本地沙盒測試
pm test-prompt。 - 1.2 優化 Token 效率。
- 1.3 歸檔。
- 1.1 執行本地沙盒測試
請輸入
/opsx:apply啟動沙盒測試。
── 第 5 輪:啟動沙盒測試與約束校驗 (Task 1.1) ──
- You:
/opsx:apply - AI:
Implementing: refactor-prompt-design (schema: spec-driven)
正在處理任務 1.1:執行本地沙盒測試。
我在本地啟動了 LLM 沙盒測試,使用我們設計的 XML 提示詞模板,模擬處理以下容易犯錯的 C# 代碼:
public void Send(string data) { byte[] raw = Encoding.UTF8.GetBytes(data); // 隱式分配了 byte 陣列 Socket.Send(raw); }測試運行結果:
AI 助手在接受提示詞後,成功給出了 100% 合規的優化輸出:public void Send(string data) { int maxLen = Encoding.UTF8.GetMaxByteCount(data.Length); byte[] buffer = ArrayPool<byte>.Shared.Rent(maxLen); try { int bytesWritten = Encoding.UTF8.GetBytes(data, 0, data.Length, buffer, 0); Socket.Send(buffer, 0, bytesWritten); } finally { ArrayPool<byte>.Shared.Return(buffer); } }✓ 沒有任何 new 分配,且成功重構了 string 轉換邏輯!約束校驗通過。
── 第 6 輪:Token 壓縮優化 (Task 1.2) ──
- You:
繼續任務 1.2,對該提示詞進行 Token 優化,剔除贅詞。 - AI:
Implementing: refactor-prompt-design
正在處理任務 1.2:Token 效率優化。
我調用了
pm optimize來精簡模板中的冗餘說明。Token 優化對比:
- 原模板:452 Tokens (包含了大量的口語化修飾詞)。
- 優化後:298 Tokens (節省 34%)。
剔除了諸如「請盡量優化」、「謝謝配合」等冗餘修飾,保留了高密度的 XML 結構。重新進行沙盒測試,AI 的生成結果仍然 100% 精準合規。
✓ 任務 1.2 完成!
── 第 7 輪:執行驗證與歸檔 ──
- You:
執行 verify 並歸檔變更。 - AI:
Implementing: refactor-prompt-design
執行驗收與歸檔:
- 確認提示詞模板已通過 ArrayPool 優化沙盒測試。
- 將提示詞工程設計規格合併至主 specs。
- 歸檔計畫,清理暫存。
Archive Complete
變更計畫已成功歸檔!
── 第 8 輪:提示詞工程架構價值總結 ──
- You:
總結這次調校提示詞的效益。 - AI:
透過 Prompt Master 調校的高性能提示詞,主要有以下三點價值:
- 工程化控制 (Engineering Rigor):將原本拍腦袋寫出的指令,轉化為具備「單元測試校驗」的工程學資產,保證 AI 生成代碼時的 100% 邊界合規。
- 顯著降低費用:34% 的 Token 體積縮減,意味著在大規模 Autopilot 執行時,能為團隊節省上百美元的 API 帳單。
- 杜絕幻覺:Few-Shot 與 XML 邊界的結合,徹底阻斷了 AI 的「自作聰明」,保證生成代碼的架構一致性。