Theme / v1.7.0

Prompt Master

AI 提示詞工程大師

實戰範例

實戰範例 001:設計高階 C# 性能重構提示詞

實戰演示如何利用 Prompt Master 設計一套帶有 XML 結構化邊界與 Few-Shot 樣例的高級 C# 性能優化提示詞,徹底杜絕 AI 幻覺與語法退化。

實戰背景

在大規模 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:
      1. 嚴禁(SHALL NOT)在執行路徑上分配新物件。
      2. 必須(SHALL)使用 System.Buffers.ArrayPool<T> 來管理緩衝區。
      3. 嚴禁(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>
        請優化 &lt;source_code&gt; 區塊中 C# 代碼的記憶體佔用。
      </instructions>
      <rules>
        <rule>嚴禁分配任何堆內存物件(無 new 關鍵字)。</rule>
        <rule>必須使用 ArrayPool&lt;T&gt; 租借與釋放緩衝區。</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 歸檔。

    請輸入 /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

    執行驗收與歸檔

    1. 確認提示詞模板已通過 ArrayPool 優化沙盒測試。
    2. 將提示詞工程設計規格合併至主 specs。
    3. 歸檔計畫,清理暫存。

    Archive Complete

    變更計畫已成功歸檔!


── 第 8 輪:提示詞工程架構價值總結 ──

  • You:
    總結這次調校提示詞的效益。
  • AI:

    透過 Prompt Master 調校的高性能提示詞,主要有以下三點價值:

    1. 工程化控制 (Engineering Rigor):將原本拍腦袋寫出的指令,轉化為具備「單元測試校驗」的工程學資產,保證 AI 生成代碼時的 100% 邊界合規。
    2. 顯著降低費用:34% 的 Token 體積縮減,意味著在大規模 Autopilot 執行時,能為團隊節省上百美元的 API 帳單。
    3. 杜絕幻覺:Few-Shot 與 XML 邊界的結合,徹底阻斷了 AI 的「自作聰明」,保證生成代碼的架構一致性。