當您需要 Claude 生成結構化資料,例如 JSON、Python 程式碼或項目符號列表時,您經常會遇到一個常見問題:Claude 想要提供幫助,並在您的內容周圍添加說明文字、標題或 markdown 格式。當您只需要原始資料時,這些額外的評論會破壞使用者體驗。

試想建立一個產生 AWS EventBridge 規則的網頁應用程式。使用者輸入描述,點擊生成,並期望看到可以立即複製使用的乾淨 JSON。如果 Claude 將 JSON 包裝在 markdown 程式碼區塊中並附帶說明文字,使用者就無法直接複製整個回應——他們必須手動選取僅 JSON 的部分。
預設回應的問題
預設情況下,Claude 傾向於像這樣格式化結構化輸出:
# EventBridge Rule
```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 or stop.雖然這對於文件說明很有用,但當您只需要用於程式化使用的 JSON 時,這就會造成問題。
解決方案:助手訊息預填 + 停止序列
您可以結合助手訊息預填與停止序列,來準確取得您想要的內容。運作方式如下:
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])這項技巧的運作方式如下:
- 使用開頭的 markdown 分隔符號預填助手訊息
- 設定停止序列,在 Claude 嘗試關閉程式碼區塊時停止生成
- 僅擷取這些分隔符號之間的內容

幕後運作原理
當 Claude 收到您的請求時,它會看到預填的助手訊息,並假設自己已經開始撰寫 JSON 程式碼區塊。Claude 不會添加自己的標題和開頭分隔符號,而是直接跳到生成實際的 JSON 內容。
當 Claude 完成 JSON 並自然地想要用 ``` 關閉 markdown 程式碼區塊時,停止序列會立即停止生成並回傳回應。您將只得到 JSON 內容,沒有任何額外的格式。
處理結果
回傳的文字可能包含一些換行字元,但您可以輕鬆清理:
import json
# 解析為 JSON 以驗證並格式化
parsed_data = json.loads(text.strip())
# 或者對其他資料類型只需去除空白字元
clean_text = text.strip()超越 JSON
這項技巧不僅限於 JSON 生成。您可以將其用於任何結構化資料,只要您想要純粹的內容,而不受 Claude 自然傾向添加說明文字的影響:
- Python 程式碼片段
- 項目符號列表
- CSV 資料
- 設定檔
- 任何重視乾淨、可複製輸出的格式
關鍵在於識別 Claude 自然會在您的內容類型周圍使用哪些分隔符號,然後預填開頭分隔符號,並在結尾分隔符號處停止。這讓您能夠精確控制輸出格式,同時善用 Claude 自然的格式化直覺。