📖 Nội dung bài học
Video này đang được xử lý. Vui lòng quay lại sau và tải lại trang.
Tóm tắt
Khi bạn cần Claude tạo dữ liệu có cấu trúc (structured data) như JSON, mã Python hoặc danh sách có dấu đầu dòng, bạn sẽ thường gặp một vấn đề phổ biến: Claude muốn tỏ ra hữu ích và tự ý thêm văn bản giải thích, tiêu đề hoặc định dạng markdown xung quanh nội dung. Những lời bình luận thừa thãi này làm hỏng trải nghiệm người dùng khi bạn chỉ cần dữ liệu thô.

Hãy tưởng tượng bạn đang xây dựng một ứng dụng web để tạo các quy tắc (rule) AWS EventBridge. Người dùng nhập mô tả, nhấn "tạo" và mong đợi nhận được mã JSON sạch để có thể sao chép và sử dụng ngay. Nếu Claude trả về JSON nằm trong các khối mã markdown kèm theo văn bản giải thích, người dùng không thể sao chép toàn bộ phản hồi mà phải chọn thủ công chỉ phần JSON.
Vấn đề với phản hồi mặc định
Theo mặc định, Claude có xu hướng định dạng đầu ra có cấu trúc như thế này:
```json
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {"state": ["running"]}
}
```
Quy tắc này ghi lại các thay đổi trạng thái của thực thể EC2 khi các thực thể bắt đầu chạy hoặc dừng.
Mặc dù cách này rất tốt để làm tài liệu hướng dẫn, nhưng nó lại gây rắc rối khi bạn chỉ cần JSON để sử dụng trong lập trình.
Giải pháp: Điền trước tin nhắn của trợ lý (Assistant Message Prefilling) + Chuỗi dừng (Stop Sequences)
Bạn có thể kết hợp kỹ thuật điền trước tin nhắn của trợ lý (assistant message prefilling) với chuỗi dừng (stop sequences) để nhận được chính xác nội dung mong muốn. Cách thực hiện như sau:
messages = []
add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")
text = chat(messages, stop_sequences=["```"])
Kỹ thuật này hoạt động bằng cách:
- Điền trước tin nhắn của trợ lý với ký tự phân tách (delimiter) mở đầu của markdown.
- Thiết lập một stop sequence để dừng việc tạo nội dung khi Claude cố gắng đóng khối mã.
- Chỉ lấy phần nội dung nằm giữa các ký tự phân tách này.

Cơ chế hoạt động phía sau
Khi Claude nhận được yêu cầu, nó thấy tin nhắn trợ lý đã được điền trước và mặc định rằng nó đã bắt đầu viết khối mã JSON. Thay vì thêm tiêu đề và ký tự phân tách mở đầu của riêng mình, Claude sẽ nhảy thẳng vào việc tạo nội dung JSON thực tế.
Khi Claude hoàn thành JSON và theo tự nhiên muốn đóng khối mã markdown bằng ```, stop sequence sẽ ngay lập tức dừng việc tạo và trả về phản hồi. Bạn sẽ nhận được chỉ nội dung JSON mà không có định dạng thừa.
Xử lý kết quả
Văn bản trả về có thể chứa một số ký tự xuống dòng, nhưng bạn có thể dễ dàng làm sạch:
import json
parsed_data = json.loads(text.strip())
clean_text = text.strip()
Không chỉ dừng lại ở JSON
Kỹ thuật này không giới hạn ở việc tạo JSON. Bạn có thể sử dụng nó cho bất kỳ dữ liệu có cấu trúc nào mà bạn chỉ muốn lấy nội dung, tránh xu hướng thêm văn bản giải thích của Claude:
- Các đoạn mã Python (Python code snippets)
- Danh sách có dấu đầu dòng (Bulleted lists)
- Dữ liệu CSV
- Các tệp cấu hình (Configuration files)
- Bất kỳ định dạng nào yêu cầu đầu ra sạch, có thể sao chép trực tiếp
Chìa khóa là xác định ký tự phân tách (delimiter) nào mà Claude thường sử dụng xung quanh loại nội dung của bạn, sau đó điền trước ký tự mở đầu và dừng ở ký tự kết thúc. Điều này giúp bạn kiểm soát chính xác định dạng đầu ra trong khi vẫn tận dụng được bản năng định dạng tự nhiên của Claude.
🔁 Bài học liên quan
- Bài tiếp: Structured data exercise
- Bài trước: Controlling model output
- Cùng section: Overview of Claude Models · Accessing the API · Making a request
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-in-amazon-bedrock/276724
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: 2026-04-23 · Chuẩn hoá: 2026-05-01