Loading...
    • 開發者指南
    • API 參考
    • MCP
    • 資源
    • 發行說明
    Search...
    ⌘K
    開始使用
    Claude 簡介快速開始
    模型與定價
    模型概覽選擇模型Claude 4.5 新功能遷移至 Claude 4.5模型棄用定價
    使用 Claude 構建
    功能概覽使用 Messages API上下文窗口提示詞最佳實踐
    功能
    提示詞快取上下文編輯擴展思考努力串流消息批次處理引用多語言支援Token 計數嵌入視覺PDF 支援Files API搜尋結果結構化輸出Google Sheets 附加元件
    工具
    概覽如何實現工具使用Token 高效工具使用細粒度工具串流Bash 工具代碼執行工具程式化工具調用計算機使用工具文字編輯器工具Web 獲取工具Web 搜尋工具記憶體工具工具搜尋工具
    Agent 技能
    概覽快速開始最佳實踐使用 API 的技能
    Agent SDK
    概覽TypeScript SDKPython SDK遷移指南
    指南
    串流輸入處理權限會話管理SDK 中的結構化輸出託管 Agent SDK修改系統提示詞SDK 中的 MCP自訂工具SDK 中的子 AgentSDK 中的斜線命令SDK 中的 Agent 技能追蹤成本和使用情況待辦事項清單SDK 中的外掛程式
    API 中的 MCP
    MCP 連接器遠端 MCP 伺服器
    第三方平台上的 Claude
    Amazon BedrockMicrosoft FoundryVertex AI
    提示詞工程
    概覽提示詞生成器使用提示詞範本提示詞改進器清晰直接使用範例(多次提示)讓 Claude 思考(CoT)使用 XML 標籤給 Claude 一個角色(系統提示詞)預填 Claude 的回應鏈接複雜提示詞長上下文提示擴展思考提示
    測試與評估
    定義成功標準開發測試案例使用評估工具降低延遲
    加強防護欄
    減少幻覺增加輸出一致性緩解越獄串流拒絕減少提示詞洩露保持 Claude 的角色
    管理和監控
    Admin API 概覽使用和成本 APIClaude Code Analytics API
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    功能

    結構化輸出

    從代理工作流程中獲取經過驗證的 JSON 結果
    • 何時使用 JSON 輸出與嚴格工具使用
    • 在 SDK 中使用 JSON 輸出
    • 使用 Pydantic 和 Zod
    • SDK 特定方法
    • SDK 轉換如何工作
    • JSON Schema 限制

    結構化輸出限制 Claude 的回應遵循特定的架構,確保有效、可解析的輸出以供下游處理。使用 JSON 輸出(output_format)進行結構化資料回應,或使用嚴格工具使用(strict: true)以保證工具名稱和輸入的架構驗證。

    結構化輸出目前在 Claude API 中作為公開測試版功能提供,適用於 Claude Sonnet 4.5 和 Claude Opus 4.1。

    若要使用此功能,請設定 beta 標頭 structured-outputs-2025-11-13。

    使用此表單分享回饋。

    為什麼使用結構化輸出

    沒有結構化輸出,Claude 可能會生成格式不正確的 JSON 回應或無效的工具輸入,導致應用程式中斷。即使進行仔細的提示,您也可能遇到:

    • 來自無效 JSON 語法的解析錯誤
    • 缺少必需欄位
    • 不一致的資料類型
    • 需要錯誤處理和重試的架構違規

    結構化輸出通過受限解碼保證架構相容的回應:

    • 始終有效:不再有 JSON.parse() 錯誤
    • 類型安全:保證欄位類型和必需欄位
    • 可靠:無需重試架構違規
    • 兩種模式:JSON 用於資料提取等任務,嚴格工具用於複雜工具和代理工作流程等情況

    快速開始

    何時使用 JSON 輸出與嚴格工具使用

    為您的使用案例選擇正確的模式:

    何時使用 JSON 輸出何時使用嚴格工具使用
    您需要 Claude 的回應採用特定格式您需要驗證的參數和工具名稱以進行工具呼叫
    從影像或文字中提取資料建立代理工作流程
    生成結構化報告確保類型安全的函數呼叫
    格式化 API 回應具有許多和/或巢狀屬性的複雜工具

    為什麼嚴格工具使用對代理很重要

    建立可靠的代理系統需要保證架構相容性。無效的工具參數會破壞您的函數和工作流程。Claude 可能會返回不相容的類型("2" 而不是 2)或缺少欄位,導致執行時錯誤。

    嚴格工具使用保證類型安全的參數:

    • 函數每次都會收到正確類型的引數
    • 無需驗證和重試工具呼叫
    • 在規模上一致工作的生產就緒代理

    例如,假設預訂系統需要 passengers: int。在沒有嚴格模式的情況下,Claude 可能會提供 passengers: "two" 或 passengers: "2"。使用 strict: true,您可以保證 passengers: 2。

    結構化輸出如何工作

    在 SDK 中使用 JSON 輸出

    Python 和 TypeScript SDK 提供了幫助程式,使使用 JSON 輸出變得更容易,包括架構轉換、自動驗證和與流行架構庫的整合。

    使用 Pydantic 和 Zod

    對於 Python 和 TypeScript 開發人員,您可以使用熟悉的架構定義工具(如 Pydantic 和 Zod),而不是編寫原始 JSON 架構。

    僅限 JSON 輸出

    SDK 幫助程式(Pydantic、Zod、parse())僅適用於 JSON 輸出(output_format)。

    這些幫助程式轉換並驗證 Claude 對您的輸出。嚴格工具使用驗證 Claude 對您的工具的輸入,這使用工具定義中現有的 input_schema 欄位。

    對於嚴格工具使用,在工具定義中直接定義您的 input_schema,使用 strict: true。

    SDK 特定方法

    Python:client.beta.messages.parse()(推薦)

    parse() 方法自動轉換您的 Pydantic 模型、驗證回應,並返回 parsed_output 屬性。

    parse() 方法在 client.beta.messages 上可用,而不是在 client.messages 上。

    Python:transform_schema() 幫助程式

    用於在發送前手動轉換架構,或當您想修改 Pydantic 生成的架構時。與 client.beta.messages.parse() 不同,後者自動轉換提供的架構,這給您轉換後的架構,以便您可以進一步自訂它。

    SDK 轉換如何工作

    Python 和 TypeScript SDK 自動轉換具有不支援功能的架構:

    1. 移除不支援的限制(例如 minimum、maximum、minLength、maxLength)
    2. 更新描述與限制資訊(例如「必須至少 100」),當結構化輸出不直接支援該限制時
    3. 將 additionalProperties: false 新增到所有物件
    4. 篩選字串格式為僅支援的清單
    5. 驗證回應針對您的原始架構(具有所有限制)

    這意味著 Claude 會收到簡化的架構,但您的程式碼仍然通過驗證強制執行所有限制。

    **範例:**具有 minimum: 100 的 Pydantic 欄位在發送的架構中變成純整數,但描述會更新為「必須至少 100」,SDK 會根據原始限制驗證回應。

    常見使用案例

    重要考慮事項

    文法編譯和快取

    結構化輸出使用具有編譯文法工件的受限採樣。這引入了一些需要注意的效能特性:

    • 首次請求延遲:第一次使用特定架構時,在編譯文法時會有額外的延遲
    • 自動快取:編譯的文法會快取 24 小時(從上次使用開始),使後續請求快得多
    • 快取失效:如果您變更以下內容,快取將失效:
      • JSON 架構結構
      • 您請求中的工具集(使用結構化輸出和工具使用時)
      • 僅變更 name 或 description 欄位不會使快取失效

    提示修改和代幣成本

    使用結構化輸出時,Claude 會自動收到一個額外的系統提示,說明預期的輸出格式。這意味著:

    • 您的輸入代幣計數會略高
    • 注入的提示會像任何其他系統提示一樣消耗您的代幣
    • 變更 output_format 參數將使該對話執行緒的任何提示快取失效

    JSON Schema 限制

    結構化輸出支援標準 JSON Schema,但有一些限制。JSON 輸出和嚴格工具使用都共享這些限制。

    Python 和 TypeScript SDK 可以通過移除不支援的功能並將限制新增到欄位描述中來自動轉換架構。有關詳細資訊,請參閱 SDK 特定方法。

    無效輸出

    雖然結構化輸出在大多數情況下保證架構相容性,但在某些情況下輸出可能不符合您的架構:

    拒絕(stop_reason: "refusal")

    Claude 即使在使用結構化輸出時也保持其安全性和有用性屬性。如果 Claude 因安全原因拒絕請求:

    • 回應將具有 stop_reason: "refusal"
    • 您將收到 200 狀態碼
    • 您將被計費生成的代幣
    • 輸出可能不符合您的架構(拒絕優先)

    達到代幣限制(stop_reason: "max_tokens")

    如果回應因達到 max_tokens 限制而被切斷:

    • 回應將具有 stop_reason: "max_tokens"
    • 輸出可能不完整且不符合您的架構
    • 使用更高的 max_tokens 值重試以獲得完整的結構化輸出

    架構驗證錯誤

    如果您的架構使用不支援的功能或過於複雜,您將收到 400 錯誤:

    「架構中的遞迴定義過多」

    • 原因:架構具有過度或循環遞迴定義
    • 解決方案:簡化架構結構,減少巢狀深度

    「架構過於複雜」

    • 原因:架構超過複雜性限制
    • 解決方案:分解為較小的架構、簡化結構或減少標記為 strict: true 的工具數量

    如有持續的有效架構問題,請聯絡支援並提供您的架構定義。

    功能相容性

    適用於:

    • 批次處理:以 50% 折扣大規模處理結構化輸出
    • 代幣計數:計數代幣而無需編譯
    • 串流:像正常回應一樣串流結構化輸出
    • 組合使用:在同一請求中同時使用 JSON 輸出(output_format)和嚴格工具使用(strict: true)

    不相容於:

    • 引用:引用需要將引用區塊與文字交錯,這與嚴格 JSON 架構限制衝突。如果啟用引用和 output_format,則返回 400 錯誤。
    • 訊息預填:與 JSON 輸出不相容

    文法範圍:文法僅適用於 Claude 的直接輸出,不適用於工具使用呼叫、工具結果或思考標籤(使用擴展思考時)。文法狀態在各部分之間重置,允許 Claude 自由思考,同時仍在最終回應中產生結構化輸出。

    from pydantic import BaseModel
    from anthropic import Anthropic, transform_schema
    
    class ContactInfo(BaseModel):
        name: str
        email: str
        plan_interest: str
        demo_requested: bool
    
    client = Anthropic()
    
    # With .create() - requires transform_schema()
    response = client.beta.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=1024,
        betas=["structured-outputs-2025-11-13"],
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_format={
            "type": "json_schema",
            "schema": transform_schema(ContactInfo),
        }
    )
    
    print(response.content[0].text)
    
    # With .parse() - can pass Pydantic model directly
    response = client.beta.messages.parse(
        model="claude-sonnet-4-5",
        max_tokens=1024,
        betas=["structured-outputs-2025-11-13"],
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_format=ContactInfo,
    )
    
    print(response.parsed_output)