載入中

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

試想建立一個產生 AWS EventBridge 規則的網頁應用程式。使用者輸入描述,點擊生成,並期望看到可以立即複製使用的乾淨 JSON。如果 Claude 將 JSON 包裝在 markdown 程式碼區塊中並附帶說明文字,使用者就無法直接複製整個回應——他們必須手動選取僅 JSON 的部分。

預設回應的問題

預設情況下,Claude 傾向於像這樣格式化結構化輸出:

markdown
# 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 時,這就會造成問題。

解決方案:助手訊息預填 + 停止序列

您可以結合助手訊息預填與停止序列,來準確取得您想要的內容。運作方式如下:

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=["```"])

這項技巧的運作方式如下:

  • 使用開頭的 markdown 分隔符號預填助手訊息
  • 設定停止序列,在 Claude 嘗試關閉程式碼區塊時停止生成
  • 僅擷取這些分隔符號之間的內容

幕後運作原理

當 Claude 收到您的請求時,它會看到預填的助手訊息,並假設自己已經開始撰寫 JSON 程式碼區塊。Claude 不會添加自己的標題和開頭分隔符號,而是直接跳到生成實際的 JSON 內容。

當 Claude 完成 JSON 並自然地想要用 ``` 關閉 markdown 程式碼區塊時,停止序列會立即停止生成並回傳回應。您將只得到 JSON 內容,沒有任何額外的格式。

處理結果

回傳的文字可能包含一些換行字元,但您可以輕鬆清理:

python
import json

# 解析為 JSON 以驗證並格式化
parsed_data = json.loads(text.strip())

# 或者對其他資料類型只需去除空白字元
clean_text = text.strip()

超越 JSON

這項技巧不僅限於 JSON 生成。您可以將其用於任何結構化資料,只要您想要純粹的內容,而不受 Claude 自然傾向添加說明文字的影響:

  • Python 程式碼片段
  • 項目符號列表
  • CSV 資料
  • 設定檔
  • 任何重視乾淨、可複製輸出的格式

關鍵在於識別 Claude 自然會在您的內容類型周圍使用哪些分隔符號,然後預填開頭分隔符號,並在結尾分隔符號處停止。這讓您能夠精確控制輸出格式,同時善用 Claude 自然的格式化直覺。