Tác giả: Jeffrey Zeng và Jonathan Evans
Ngày phát hành: 06 FEB 2026
Chuyên mục: Amazon Bedrock, Artificial Intelligence, Technical How-to
Hôm nay, chúng tôi công bố tính năng đầu ra có cấu trúc trên Amazon Bedrock—một khả năng cơ bản giúp bạn nhận được các phản hồi JSON đã được xác thực từ các mô hình nền tảng thông qua giải mã bị ràng buộc để tuân thủ lược đồ.
Điều này đại diện cho một sự thay đổi mô hình trong phát triển ứng dụng AI. Thay vì xác thực các phản hồi JSON và viết logic dự phòng khi chúng thất bại, bạn có thể trực tiếp xây dựng với dữ liệu. Với đầu ra có cấu trúc, bạn có thể xây dựng các đường ống dữ liệu không cần xác thực mà tin tưởng vào đầu ra của mô hình, các hệ thống tác nhân đáng tin cậy tự tin gọi các hàm bên ngoài và kiến trúc ứng dụng đơn giản hóa mà không cần logic thử lại.
Trong bài đăng này, chúng tôi khám phá những thách thức của việc tạo JSON truyền thống và cách đầu ra có cấu trúc giải quyết chúng. Chúng tôi đề cập đến hai cơ chế cốt lõi—định dạng đầu ra JSON Schema và sử dụng công cụ nghiêm ngặt—cùng với các chi tiết triển khai, các phương pháp hay nhất và các ví dụ mã thực tế. Cho dù bạn đang xây dựng các đường ống trích xuất dữ liệu, quy trình làm việc tác nhân hay API được hỗ trợ bởi AI, bạn sẽ học cách sử dụng đầu ra có cấu trúc để tạo các ứng dụng đáng tin cậy, sẵn sàng cho sản xuất. Sổ tay Jupyter đi kèm của chúng tôi cung cấp các ví dụ thực hành cho mọi tính năng được đề cập ở đây.
Vấn đề với việc tạo JSON truyền thống
Trong nhiều năm, để lấy dữ liệu có cấu trúc từ các mô hình ngôn ngữ, bạn phải tạo các lời nhắc chi tiết, hy vọng điều tốt nhất và xây dựng các hệ thống xử lý lỗi phức tạp. Ngay cả với việc nhắc nhở cẩn thận, các nhà phát triển thường gặp phải:
- Lỗi phân tích cú pháp: Cú pháp JSON không hợp lệ làm hỏng các lệnh gọi
json.loads() - Thiếu trường: Các điểm dữ liệu bắt buộc không có trong phản hồi
- Không khớp kiểu: Chuỗi khi mong đợi số nguyên, làm hỏng quá trình xử lý tiếp theo
- Vi phạm lược đồ: Các phản hồi về mặt kỹ thuật có thể phân tích cú pháp nhưng không khớp với mô hình dữ liệu của bạn
Trong các hệ thống sản xuất, những lỗi này tích lũy. Một phản hồi bị định dạng sai có thể lan truyền qua đường ống của bạn, yêu cầu thử lại làm tăng độ trễ và chi phí. Đối với các quy trình làm việc tác nhân nơi các mô hình gọi công cụ, các tham số không hợp lệ có thể làm hỏng hoàn toàn các lệnh gọi hàm.
Hãy xem xét một hệ thống đặt chỗ yêu cầu passengers: int. Nếu không có việc thực thi lược đồ, mô hình có thể trả về passengers: "two" hoặc passengers: "2"—JSON hợp lệ về mặt cú pháp, nhưng sai về mặt ngữ nghĩa đối với chữ ký hàm của bạn.
Điều gì thay đổi với đầu ra có cấu trúc
Đầu ra có cấu trúc trên Amazon Bedrock không phải là cải tiến gia tăng—đó là một sự thay đổi cơ bản từ định dạng đầu ra xác suất sang định dạng đầu ra xác định. Thông qua giải mã bị ràng buộc, Amazon Bedrock ràng buộc các phản hồi của mô hình để tuân thủ JSON Schema mà bạn đã chỉ định. Hai cơ chế bổ sung có sẵn:
| Tính năng | Mục đích | Trường hợp sử dụng |
|---|---|---|
| Định dạng đầu ra JSON Schema | Kiểm soát định dạng phản hồi của mô hình | Trích xuất dữ liệu, tạo báo cáo, phản hồi API |
| Sử dụng công cụ nghiêm ngặt | Xác thực các tham số công cụ | Quy trình làm việc tác nhân, gọi hàm, tự động hóa nhiều bước |
Các tính năng này có thể được sử dụng độc lập hoặc cùng nhau, giúp bạn kiểm soát chính xác cả những gì mô hình xuất ra và cách nó gọi các hàm của bạn.
Những gì đầu ra có cấu trúc mang lại:
- Luôn hợp lệ: Không còn lỗi
JSON.parse()hoặc ngoại lệ phân tích cú pháp - An toàn kiểu: Các kiểu trường được thực thi và các trường bắt buộc luôn có mặt
- Đáng tin cậy: Không cần thử lại đối với các vi phạm lược đồ
- Sẵn sàng sản xuất: Triển khai tự tin ở quy mô doanh nghiệp
Cách hoạt động của đầu ra có cấu trúc
Đầu ra có cấu trúc sử dụng lấy mẫu bị ràng buộc với các tạo phẩm ngữ pháp đã biên dịch. Đây là những gì xảy ra khi bạn thực hiện một yêu cầu:
- Xác thực lược đồ: Amazon Bedrock xác thực JSON Schema của bạn so với tập con JSON Schema Draft 2020-12 được hỗ trợ
- Biên dịch ngữ pháp: Đối với các lược đồ mới, Amazon Bedrock biên dịch một ngữ pháp (yêu cầu đầu tiên có thể mất nhiều thời gian hơn)
- Bộ nhớ đệm: Các ngữ pháp đã biên dịch được lưu vào bộ nhớ đệm trong 24 giờ, giúp các yêu cầu tiếp theo nhanh hơn
- Tạo bị ràng buộc: Mô hình tạo các token tạo ra JSON hợp lệ khớp với lược đồ của bạn
Các cân nhắc về hiệu suất:
- Độ trễ yêu cầu đầu tiên: Biên dịch ban đầu có thể thêm độ trễ cho các lược đồ mới
- Hiệu suất được lưu vào bộ nhớ đệm: Các yêu cầu tiếp theo với các lược đồ giống hệt nhau có chi phí tối thiểu
- Phạm vi bộ nhớ đệm: Ngữ pháp được lưu vào bộ nhớ đệm cho mỗi tài khoản trong 24 giờ kể từ lần truy cập đầu tiên
Thay đổi cấu trúc JSON Schema hoặc lược đồ đầu vào của công cụ sẽ làm mất hiệu lực bộ nhớ đệm, nhưng chỉ thay đổi các trường name hoặc description thì không.
Bắt đầu với đầu ra có cấu trúc
Ví dụ sau minh họa đầu ra có cấu trúc với Converse API:
import boto3import json# Initialize the Bedrock Runtime clientbedrock_runtime = boto3.client( service_name='bedrock-runtime', region_name='us-east-1' # Choose your preferred region)# Define your JSON schemaextraction_schema = { "type": "object", "properties": { "name": {"type": "string", "description": "Customer name"}, "email": {"type": "string", "description": "Customer email address"}, "plan_interest": {"type": "string", "description": "Product plan of interest"}, "demo_requested": {"type": "boolean", "description": "Whether a demo was requested"} }, "required": ["name", "email", "plan_interest", "demo_requested"], "additionalProperties": False}# Make the request with structured outputsresponse = bedrock_runtime.converse( modelId="us.anthropic.claude-opus-4-5-20251101-v1:0", messages=[ { "role": "user", "content": [ { "text": "Extract the key information from this email: John Smith (john@example.com) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm." } ] } ], inferenceConfig={ "maxTokens": 1024 }, outputConfig={ "textFormat": { "type": "json_schema", "structure": { "jsonSchema": { "schema": json.dumps(extraction_schema), "name": "lead_extraction", "description": "Extract lead information from customer emails" } } } })# Parse the schema-compliant JSON responseresult = json.loads(response["output"]["message"]["content"][0]["text"])print(json.dumps(result, indent=2))
Đầu ra:
{ "name": "John Smith", "email": "john@example.com", "plan_interest": "Enterprise", "demo_requested": true}
Phản hồi tuân thủ lược đồ của bạn—không cần xác thực bổ sung.
Yêu cầu và các phương pháp hay nhất
Để sử dụng đầu ra có cấu trúc một cách hiệu quả, hãy làm theo các hướng dẫn sau:
- Đặt
additionalProperties: falsetrên tất cả các đối tượng. Điều này là bắt buộc để đầu ra có cấu trúc hoạt động. Nếu không có nó, lược đồ của bạn sẽ không được chấp nhận.
{ "type": "object", "properties": { "name": {"type": "string"} }, "required": ["name"], "additionalProperties": false}
- Sử dụng tên trường và mô tả có tính mô tả. Các mô hình sử dụng tên thuộc tính và mô tả để hiểu dữ liệu cần trích xuất. Các tên rõ ràng như
customer_emailhoạt động tốt hơn các tên chung chung nhưfield1. - Sử dụng
enumcho các giá trị bị ràng buộc. Khi một trường có một tập hợp giới hạn các giá trị hợp lệ, hãy sử dụngenumđể ràng buộc các tùy chọn. Điều này cải thiện độ chính xác và tạo ra các giá trị hợp lệ. - Bắt đầu cơ bản, sau đó thêm độ phức tạp. Bắt đầu với các trường tối thiểu cần thiết và tăng độ phức tạp dần dần. Các lược đồ cơ bản biên dịch nhanh hơn và dễ bảo trì hơn.
- Tái sử dụng lược đồ để hưởng lợi từ bộ nhớ đệm. Cấu trúc ứng dụng của bạn để tái sử dụng lược đồ trên các yêu cầu. Bộ nhớ đệm ngữ pháp 24 giờ cải thiện đáng kể hiệu suất cho các truy vấn lặp lại.
- Kiểm tra
stopReasontrong mọi phản hồi. Hai kịch bản có thể tạo ra các phản hồi không tuân thủ: từ chối (khi mô hình từ chối vì lý do an toàn) và giới hạn token (khimax_tokensđạt được trước khi hoàn thành). Xử lý cả hai trường hợp trong mã của bạn. - Kiểm tra với dữ liệu thực tế trước khi triển khai. Xác thực lược đồ của bạn so với các đầu vào đại diện cho sản xuất. Các trường hợp biên trong dữ liệu thực thường tiết lộ các vấn đề thiết kế lược đồ.
Các tính năng JSON Schema được hỗ trợ:
- Tất cả các kiểu cơ bản:
object,array,string,integer,number,boolean,null enum(chỉ chuỗi, số, boolean hoặc null)const,anyOf,allOf(có giới hạn)$ref,$def, vàdefinitions(chỉ tham chiếu nội bộ)- Định dạng chuỗi:
date-time,time,date,duration,email,hostname,uri,ipv4,ipv6,uuid - Mảng
minItems(chỉ giá trị 0 và 1)
Không được hỗ trợ:
- Lược đồ đệ quy
- Tham chiếu
$refbên ngoài - Các ràng buộc số (
minimum,maximum,multipleOf) - Các ràng buộc chuỗi (
minLength,maxLength) additionalPropertiesđược đặt thành bất kỳ giá trị nào khác ngoàifalse
Sử dụng công cụ nghiêm ngặt cho các quy trình làm việc tác nhân
Khi xây dựng các ứng dụng nơi các mô hình gọi công cụ, hãy đặt strict: true trong định nghĩa công cụ của bạn để ràng buộc các tham số công cụ khớp chính xác với lược đồ đầu vào của bạn:
import boto3import jsonbedrock_runtime = boto3.client('bedrock-runtime', region_name='us-east-1')response = bedrock_runtime.converse( modelId="us.anthropic.claude-opus-4-5-20251101-v1:0", messages=[ { "role": "user", "content": [{"text": "What's the weather like in San Francisco?"}] } ], inferenceConfig={"maxTokens": 1024}, toolConfig={ "tools": [ { "toolSpec": { "name": "get_weather", "description": "Get the current weather for a specified location", "strict": True, # Enable strict mode "inputSchema": { "json": { "type": "object", "properties": { "location": { "type": "string", "description": "The city and state, e.g., San Francisco, CA" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "Temperature unit" } }, "required": ["location", "unit"], "additionalProperties": False } } } } ] })# Tool inputs conform to the schemafor content_block in response["output"]["message"]["content"]: if "toolUse" in content_block: tool_input = content_block["toolUse"]["input"] print(f"Tool: {content_block['toolUse']['name']}") print(f"Input: {json.dumps(tool_input, indent=2)}")
Với strict: true, đầu ra có cấu trúc ràng buộc đầu ra sao cho:
- Trường
locationluôn là một chuỗi - Trường
unitluôn làcelsiushoặcfahrenheit - Không có trường không mong muốn nào xuất hiện trong đầu vào
Các ứng dụng thực tế trong các ngành công nghiệp
Sổ tay minh họa các trường hợp sử dụng trải rộng các ngành công nghiệp:
- Dịch vụ tài chính: Trích xuất dữ liệu có cấu trúc từ báo cáo thu nhập, đơn xin vay và tài liệu tuân thủ. Với đầu ra có cấu trúc, mọi trường bắt buộc đều có mặt và được định kiểu chính xác để xử lý tiếp theo.
- Chăm sóc sức khỏe: Phân tích các ghi chú lâm sàng thành các bản ghi có cấu trúc, tuân thủ lược đồ. Trích xuất thông tin bệnh nhân, chẩn đoán và kế hoạch điều trị thành JSON đã được xác thực để tích hợp EHR.
- Thương mại điện tử: Xây dựng các đường ống làm giàu danh mục sản phẩm đáng tin cậy. Trích xuất thông số kỹ thuật, danh mục và thuộc tính từ mô tả sản phẩm với kết quả nhất quán, đáng tin cậy.
- Pháp lý: Phân tích hợp đồng và trích xuất các điều khoản chính, các bên, ngày tháng và nghĩa vụ thành các định dạng có cấu trúc phù hợp cho các hệ thống quản lý hợp đồng.
- Dịch vụ khách hàng: Xây dựng các hệ thống định tuyến và phản hồi vé thông minh, nơi các ý định, cảm xúc và thực thể được trích xuất khớp với mô hình dữ liệu của ứng dụng của bạn.
Chọn cách tiếp cận phù hợp
Thử nghiệm của chúng tôi đã tiết lộ các mẫu rõ ràng về thời điểm sử dụng từng tính năng:
Sử dụng định dạng đầu ra JSON Schema khi:
- Bạn cần phản hồi của mô hình theo một cấu trúc cụ thể
- Xây dựng các đường ống trích xuất dữ liệu
- Tạo các phản hồi sẵn sàng cho API
- Tạo báo cáo hoặc tóm tắt có cấu trúc
Sử dụng công cụ nghiêm ngặt khi:
- Xây dựng các hệ thống tác nhân gọi các hàm bên ngoài
- Triển khai các quy trình làm việc nhiều bước với chuỗi công cụ
- Yêu cầu các kiểu tham số đã được xác thực cho các lệnh gọi hàm
- Kết nối AI với cơ sở dữ liệu, API hoặc dịch vụ bên ngoài
Sử dụng cả hai cùng nhau khi:
- Xây dựng các tác nhân phức tạp cần các lệnh gọi công cụ đã được xác thực và các phản hồi cuối cùng có cấu trúc
- Tạo các hệ thống nơi kết quả công cụ trung gian cung cấp cho đầu ra có cấu trúc
- Triển khai các quy trình làm việc doanh nghiệp yêu cầu tuân thủ lược đồ từ đầu đến cuối
So sánh API: Converse so với InvokeModel
Cả Converse API và InvokeModel API đều hỗ trợ đầu ra có cấu trúc, với các định dạng tham số hơi khác nhau:
| Khía cạnh | Converse API | InvokeModel (Anthropic Claude) | InvokeModel (mô hình mã nguồn mở) |
|---|---|---|---|
| Vị trí lược đồ | outputConfig.textFormat | output_config.format | response_format |
| Cờ nghiêm ngặt của công cụ | toolSpec.strict | tools[].strict | tools[].function.strict |
| Định dạng lược đồ | Chuỗi JSON trong jsonSchema.schema | Đối tượng JSON trong schema | Đối tượng JSON trong json_schema.schema |
| Tốt nhất cho | Quy trình làm việc hội thoại | Suy luận một lượt (Claude) | Suy luận một lượt (mã nguồn mở) |
Lưu ý: InvokeModel API sử dụng các tên trường yêu cầu khác nhau tùy thuộc vào loại mô hình. Đối với các mô hình Anthropic Claude, hãy sử dụng output_config.format cho đầu ra JSON Schema. Đối với các mô hình mã nguồn mở, hãy sử dụng response_format thay thế.
Chọn Converse API cho các cuộc hội thoại nhiều lượt và InvokeModel API khi bạn cần truy cập trực tiếp vào mô hình với các định dạng yêu cầu cụ thể của nhà cung cấp.
Các mô hình được hỗ trợ và tính khả dụng
Đầu ra có cấu trúc hiện có sẵn rộng rãi ở tất cả các AWS Region thương mại cho các nhà cung cấp mô hình Amazon Bedrock được chọn:
- Anthropic
- DeepSeek
- MiniMax
- Mistral AI
- Moonshot AI
- NVIDIA
- OpenAI
- Qwen
Tính năng này hoạt động liền mạch với:
- Suy luận đa Region: Sử dụng đầu ra có cấu trúc trên các AWS Region mà không cần thiết lập bổ sung
- Suy luận hàng loạt: Xử lý khối lượng lớn với đầu ra tuân thủ lược đồ
- Streaming: Truyền các phản hồi có cấu trúc với
ConverseStreamhoặcInvokeModelWithResponseStream
Kết luận
Trong bài đăng này, bạn đã khám phá cách đầu ra có cấu trúc trên Amazon Bedrock giảm sự không chắc chắn của JSON do AI tạo ra thông qua các phản hồi đã được xác thực, tuân thủ lược đồ. Bằng cách sử dụng định dạng đầu ra JSON Schema và sử dụng công cụ nghiêm ngặt, bạn có thể xây dựng các đường ống trích xuất dữ liệu đáng tin cậy, các quy trình làm việc tác nhân mạnh mẽ và các ứng dụng AI sẵn sàng cho sản xuất—mà không cần phân tích cú pháp hoặc logic xác thực tùy chỉnh. Cho dù bạn đang trích xuất dữ liệu từ tài liệu, xây dựng tự động hóa thông minh hay tạo API được hỗ trợ bởi AI, đầu ra có cấu trúc mang lại độ tin cậy mà ứng dụng của bạn yêu cầu.
Đầu ra có cấu trúc hiện đã có sẵn rộng rãi trên Amazon Bedrock. Để sử dụng đầu ra có cấu trúc với Converse API, hãy cập nhật lên AWS SDK mới nhất. Để tìm hiểu thêm, hãy xem tài liệu Amazon Bedrock và khám phá sổ tay mẫu của chúng tôi.
Những quy trình làm việc nào có thể được mở khóa bằng JSON đã được xác thực, tuân thủ lược đồ trong tổ chức của bạn? Sổ tay cung cấp mọi thứ bạn cần để tìm hiểu.
Về tác giả

Jeffrey Zeng
Jeffrey Zeng là Kiến trúc sư Giải pháp Chuyên gia Toàn cầu về AI tạo sinh tại AWS, dẫn đầu các mô hình của bên thứ ba trên Amazon Bedrock. Anh tập trung vào mã hóa và quy trình làm việc tác nhân, với kinh nghiệm thực tế giúp khách hàng xây dựng và triển khai các giải pháp AI từ bằng chứng khái niệm đến sản xuất.

Jonathan Evans
Jonathan Evans là Kiến trúc sư Giải pháp Toàn cầu về AI tạo sinh tại AWS, nơi anh giúp khách hàng tận dụng các công nghệ AI tiên tiến với các mô hình Anthropic Claude trên Amazon Bedrock, để giải quyết các thách thức kinh doanh phức tạp. Với nền tảng về kỹ thuật AI/ML và kinh nghiệm thực tế hỗ trợ các quy trình làm việc học máy trên đám mây, Jonathan đam mê làm cho AI tiên tiến trở nên dễ tiếp cận và có tác động cho các tổ chức ở mọi quy mô.