當您需要 Claude 生成結構化資料,例如 JSON、Python 程式碼或項目符號清單時,您經常會遇到一個常見問題:Claude 想要提供幫助,並在您的內容周圍加上說明文字。雖然這通常很棒,但有時您只需要原始資料,不需要其他任何內容。
試想建立一個產生 AWS EventBridge 規則的網頁應用程式。使用者輸入描述,點擊生成,並期望看到可以立即複製使用的乾淨 JSON。如果 Claude 將 JSON 包裝在 markdown 程式碼區塊中並附帶說明文字,使用者就無法直接複製整個回應——他們必須手動選取僅 JSON 的部分。

預設回應的問題
預設情況下,當您要求 Claude 生成 JSON 時,您可能會得到類似這樣的結果:
markdown
```json
\{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": \{
"state": ["running"]
\}
\}
```
This rule captures EC2 instance state changes when instances start running.這個 JSON 是正確的,但它被包裝在 markdown 格式中,並包含說明文字。對於使用者需要複製原始 JSON 的網頁應用程式而言,這會在使用者體驗中造成摩擦。
解決方案:助手訊息預填 + 停止序列
您可以結合助手訊息預填與停止序列,來取得您想要的確切內容。運作方式如下:
python
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])這項技巧的運作方式如下:
- 使用者訊息告訴 Claude 要生成什麼
- 預填的助手訊息讓 Claude 以為它已經開始了一個 markdown 程式碼區塊
- Claude 接著只寫出 JSON 內容
- 當 Claude 試圖用
```結束程式碼區塊時,停止序列會立即結束生成

結果是沒有額外格式的乾淨 JSON:
json
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running"]
}
}處理回應
您可能會注意到回應中有一些額外的換行字元。這些很容易處理:
python
import json
# 清理並解析 JSON
clean_json = json.loads(text.strip())超越 JSON
這項技巧不僅限於 JSON 生成。只要您需要不帶評論的結構化資料,都可以使用它:
- Python 程式碼片段
- 項目符號清單
- CSV 資料
- 任何您只想要內容而不想要說明的格式化內容
關鍵在於識別 Claude 自然而然想要用什麼來包裝您的內容,然後將其用作您的預填內容和停止序列。對於程式碼,通常是 markdown 程式碼區塊。對於清單,可能是不同的格式標記。
這種方法讓您能夠精確控制 Claude 的輸出格式,使將 AI 生成的內容整合到需要乾淨、結構化資料的應用程式中變得更加容易。