載入中

結構化資料的工具

第 31 課9 分鐘

當您需要從 Claude 取得結構化資料時,您有兩種主要方法:使用訊息預填和停止序列的提示式技巧,或是使用工具的更穩健方法。雖然提示式方法設置較為簡單,但工具能提供更可靠的輸出,代價是增加了複雜性。

結構化資料的工具

基於工具的方法是透過建立一個 JSON schema 來定義您想要提取的資料的確切結構。您不必期望 Claude 正確格式化其回應,而是實際上給予 Claude 一個函式來呼叫,並帶有符合您期望輸出結構的特定參數。

以下是此流程的運作方式:

  • 撰寫一個描述您所尋找資料結構的 schema
  • 使用 tool_choice 參數強制 Claude 使用工具
  • 從工具使用回應中提取結構化資料
  • 無需提供後續回應——一旦取得資料即完成

例如,如果您想從一份財務報表中提取餘額和關鍵見解,您的 schema 會分別將這些定義為整數和字串陣列。

控制工具使用

此技巧的關鍵部分是確保 Claude 確實呼叫您的工具。您可以使用 tool_choice 參數來控制此行為:

  • {"type": "auto"} - 模型自行決定是否需要使用工具(預設值)
  • {"type": "any"} - 模型必須使用工具,但可以選擇使用哪一個
  • {"type": "tool", "name": "TOOL_NAME"} - 模型必須使用指定的工具

對於結構化資料提取,您通常會想要第三個選項,以確保 Claude 呼叫您特定的 schema 工具。

實作範例

假設您想從一篇文章中提取標題、作者和關鍵見解。首先,您需要建立一個工具 schema:

python
article_summary_schema = {
    "name": "article_summary",
    "description": "Extracts structured data from articles",
    "input_schema": {
        "type": "object",
        "properties": {
            "title": {"type": "string"},
            "author": {"type": "string"},
            "key_insights": {
                "type": "array",
                "items": {"type": "string"}
            }
        }
    }
}

然後您會呼叫 Claude 並使用該工具,並強制其使用:

python
response = chat(
    messages,
    tools=[article_summary_schema],
    tool_choice={"type": "tool", "name": "article_summary"}
)

回應將包含一個工具使用區塊,其中在 input 欄位中有您的結構化資料。您可以直接存取它:

python
structured_data = response.content[0].input

何時使用每種方法

當您需要快速且簡單的東西時,選擇提示式結構化輸出。當您需要保證可靠性並能處理額外的設置複雜性時,使用工具。這兩種技巧都有其價值,取決於您的特定使用案例和需求。