Trung cấpKỹ thuậtClaude APINguồn: Anthropic

Best Practices cho Vision — Tối ưu hình ảnh gửi Claude

Nghe bài viết
00:00

Điểm nổi bật

Nhấn để đến mục tương ứng

  1. 1 Áp dụng ngay: Cách sai — câu hỏi trước, ảnh sau KHONG TOT: Claude doc cau hoi truoc khi thay anh content = {"type": "text", "text": — phần này cung cấp quy trình cụ thể giúp bạn triển khai hiệu quả mà không cần thử nghiệm nhiều lần.
  2. 2 Góc nhìn thực tế: Thực tế phức tạp hơn: Kích thước ảnh Tokens tiêu thụ Phù hợp cho 512 x 512 ~340 tokens Nhận diện đối tượng đơn giản. Điều quan trọng là hiểu rõ khi nào nên và không nên áp dụng phương pháp này.
  3. 3 Hiệu quả thực chứng: Dưới đây là các pattern hiệu quả nhất: Pattern 1: Specify output format Thay vi: "Mo ta anh nay" Hay dung: Xac dinh ro. Người dùng áp dụng đúng cách thường thấy kết quả cải thiện rõ rệt từ những lần đầu tiên.
  4. 4 Áp dụng ngay: Claude xử lý tốt nhiều ảnh cùng lúc — tối đa 20 ảnh mỗi request — phần này cung cấp quy trình cụ thể giúp bạn triển khai hiệu quả mà không cần thử nghiệm nhiều lần.
  5. 5 So sánh thực tế: Chọn model dựa trên độ phức tạp của task: Model Phù hợp cho Chi phí tương đối claude-haiku-4-5 Phân loại ảnh đơn giản,. Mỗi phương pháp đều có ưu và nhược — lựa chọn phụ thuộc vào ngữ cảnh cụ thể của bạn.
A white robot is standing in front of a black background

Gửi ảnh lên Claude thì dễ — nhưng để khai thác tối đa khả năng Vision đòi hỏi hiểu một số nguyên tắc quan trọng. Bài viết này tổng hợp best practices chính thức từ Anthropic để bạn có được kết quả tốt nhất với chi phí và thời gian thấp nhất.

Nguyên tắc 1: Đặt ảnh trước, câu hỏi sau

Thứ tự ảnh và text trong content array quan trọng hơn bạn nghĩ. Anthropic khuyến nghị: đặt ảnh trước câu hỏi, không phải ngược lại.

Cách sai — câu hỏi trước, ảnh sau

# KHONG TOT: Claude doc cau hoi truoc khi thay anh
content = [
    {"type": "text", "text": "Hang hoa nao trong anh nay bi hong?"},
    {"type": "image", "source": {"type": "base64", ...}},
]

Cách đúng — ảnh trước, câu hỏi sau

# TOT HON: Claude thay anh truoc khi doc cau hoi
content = [
    {"type": "image", "source": {"type": "base64", ...}},
    {"type": "text", "text": "Hang hoa nao trong anh nay bi hong?"},
]

Lý do: Claude xử lý context theo thứ tự. Khi thấy ảnh trước, nó đã có hình ảnh mental model rõ ràng khi đọc câu hỏi — tương tự như con người đọc câu hỏi sau khi đã quan sát đối tượng.

Ngoại lệ: Với multi-image và nhiều câu hỏi phức tạp, đặt instruction ngắn ở đầu, rồi ảnh + câu hỏi tương ứng xen kẽ nhau có thể hiệu quả hơn.

Nguyên tắc 2: Độ phân giải — không cần quá cao

Nhiều người nghĩ ảnh càng lớn càng tốt. Thực tế phức tạp hơn:

Kích thước ảnh Tokens tiêu thụ Phù hợp cho
512 x 512 ~340 tokens Nhận diện đối tượng đơn giản
1024 x 1024 ~1300 tokens Phân tích tổng quát
2048 x 2048 ~5000 tokens Đọc text nhỏ, chi tiết tinh vi
4096 x 4096 ~19000 tokens Tài liệu pháp lý, bản vẽ kỹ thuật

Quy tắc thực tế:

  • Nhận diện đối tượng, phân loại ảnh: 512-1024px là đủ
  • Đọc text in trên tài liệu: 1024-2048px
  • Đọc chữ nhỏ, bản vẽ chi tiết: 2048px trở lên

Tự động resize trước khi gửi

from PIL import Image
import io, base64

def prepare_image(
    path: str,
    max_dim: int = 1568,
    quality: int = 85
) -> tuple:
    """
    Chuan bi anh de gui cho Claude.
    Tra ve (base64_string, media_type).
    """
    with Image.open(path) as img:
        # Giu RGBA neu co, neu khong chuyen RGB
        if img.mode not in ("RGB", "RGBA"):
            img = img.convert("RGB")

        # Chi resize neu qua lon
        if max(img.width, img.height) > max_dim:
            img.thumbnail((max_dim, max_dim), Image.LANCZOS)

        # Luu vao buffer
        fmt = "PNG" if img.mode == "RGBA" else "JPEG"
        media_type = "image/png" if fmt == "PNG" else "image/jpeg"
        buf = io.BytesIO()
        img.save(buf, format=fmt, quality=quality)
        data = base64.standard_b64encode(buf.getvalue()).decode()

    return data, media_type

Nguyên tắc 3: Prompt engineering cho Vision

Prompting cho vision tasks khác với text-only tasks. Dưới đây là các pattern hiệu quả nhất:

Pattern 1: Specify output format

# Thay vi: "Mo ta anh nay"
# Hay dung: Xac dinh ro format ban muon
prompt = """Phan tich bieu do doanh thu nay va tra loi theo format:

TIEU DE BIEU DO: [tieu de]
LOAI BIEU DO: [bar/line/pie/etc]
TONG HOP DU LIEU:
- [diem du lieu 1]
- [diem du lieu 2]
XU HUONG CHINH: [nhan xet]"""

Pattern 2: Role assignment

# Gan vai tro giup Claude tap trung dung expertise
system = """Ban la chuyen gia kiem tra chat luong san pham.
Nhiem vu cua ban la phat hien loi, vet xay xuoc, va van de
tren san pham duoc chup hinh."""

user_prompt = "Kiem tra anh san pham nay va liet ke tat ca loi phat hien duoc."

Pattern 3: Ask for uncertainty

# Yeu cau Claude bao cao khi khong chac chan
prompt = """Phan tich van ban trong hinh anh nay.
Neu co phan nao kho doc hoac khong ro rang,
hay danh dau ro rang voi [KHONG RO] thay vi doan.
Do chinh xac quan trong hon do day du."""

Nguyên tắc 4: Multi-image analysis

Claude xử lý tốt nhiều ảnh cùng lúc — tối đa 20 ảnh mỗi request. Đây là cách tổ chức hiệu quả:

So sánh hai ảnh

def compare_images(before_path: str, after_path: str) -> str:
    """So sanh anh truoc va sau."""
    before_data, before_type = prepare_image(before_path)
    after_data, after_type = prepare_image(after_path)

    client = anthropic.Anthropic()
    message = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": "ANH TRUOC:"},
                    {"type": "image", "source": {"type": "base64",
                        "media_type": before_type, "data": before_data}},
                    {"type": "text", "text": "ANH SAU:"},
                    {"type": "image", "source": {"type": "base64",
                        "media_type": after_type, "data": after_data}},
                    {"type": "text", "text": "Liet ke tat ca su thay doi giua hai anh."},
                ],
            }
        ],
    )
    return message.content[0].text

Xử lý batch nhiều ảnh

def analyze_product_catalog(image_paths: list) -> list:
    """Phan tich nhieu san pham cung luc."""
    # Chuan bi tat ca anh
    content = []
    for i, path in enumerate(image_paths):
        data, media_type = prepare_image(path)
        content.append({
            "type": "text",
            "text": f"San pham {i+1}:"
        })
        content.append({
            "type": "image",
            "source": {"type": "base64", "media_type": media_type, "data": data}
        })

    content.append({
        "type": "text",
        "text": """Voi moi san pham, hay cho biet:
        - Ten/mo ta ngan
        - Tinh trang (tot/trung binh/kem)
        - Cac diem noi bat
        Tra ve dang JSON array."""
    })

    client = anthropic.Anthropic()
    message = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=2048,
        messages=[{"role": "user", "content": content}],
    )
    return message.content[0].text

Nguyên tắc 5: Chọn model phù hợp

Không phải lúc nào cũng cần dùng model mạnh nhất. Chọn model dựa trên độ phức tạp của task:

Model Phù hợp cho Chi phí tương đối
claude-haiku-4-5 Phân loại ảnh đơn giản, OCR cơ bản, batch processing Thấp nhất
claude-sonnet-4-5 Phân tích chi tiết, so sánh ảnh, tài liệu phức tạp Trung bình
claude-opus-4-5 Reasoning phức tạp, tài liệu pháp lý, bản vẽ kỹ thuật Cao nhất

Tip tiết kiệm chi phí: Dùng Haiku để pre-filter — phân loại ảnh có liên quan không, rồi chỉ gửi ảnh liên quan cho Sonnet/Opus phân tích sâu.

def smart_analyze(image_path: str) -> str:
    """
    Dung Haiku de filter truoc,
    chi dung Opus khi can thiet.
    """
    data, media_type = prepare_image(image_path)

    # Buoc 1: Haiku check xem co gi dang phan tich
    haiku_client = anthropic.Anthropic()
    check = haiku_client.messages.create(
        model="claude-haiku-4-5",
        max_tokens=50,
        messages=[{
            "role": "user",
            "content": [
                {"type": "image", "source": {"type": "base64",
                    "media_type": media_type, "data": data}},
                {"type": "text", "text": "Anh nay co chua van ban, bieu do, hoac thong tin quan trong khong? Chi tra loi YES hoac NO."}
            ]
        }]
    )

    if "YES" in check.content[0].text.upper():
        # Buoc 2: Opus phan tich sau
        detail = haiku_client.messages.create(
            model="claude-opus-4-5",
            max_tokens=2048,
            messages=[{
                "role": "user",
                "content": [
                    {"type": "image", "source": {"type": "base64",
                        "media_type": media_type, "data": data}},
                    {"type": "text", "text": "Phan tich chi tiet noi dung trong anh nay."}
                ]
            }]
        )
        return detail.content[0].text
    else:
        return "Anh khong chua thong tin can phan tich."

Pitfalls phổ biến cần tránh

Pitfall 1: Hỏi quá nhiều thứ trong một prompt

# XAU: Qua nhieu yeu cau, kho tra loi chinh xac
"Mo ta anh, tim tat ca loi, so sanh voi anh truoc, tinh toan kich thuoc, va du bao gia tri"

# TOT: Mot nhiem vu ro rang
"Liet ke cac loi nhin thay duoc trong san pham, theo thu tu muc do nghiem trong."

Pitfall 2: Không nói rõ context

# XAU: Thieu context
"Co gi sai khong?"

# TOT: Co context ro rang
"Day la anh X-quang phoi cua benh nhan 45 tuoi.
Hay mo ta nhung bat thuong co the nhin thay.
Luu y: Toi la ky thuat vien y te, khong phai bac si."

Pitfall 3: Gửi ảnh mờ hoặc bị cắt

Claude không thể tạo ra thông tin không có trong ảnh. Nếu ảnh bị mờ hoặc bị cắt mất phần quan trọng, kết quả sẽ không chính xác. Luôn kiểm tra chất lượng ảnh trước khi gửi.

Pitfall 4: Dùng ảnh quá nhỏ cho text recognition

Chữ nhỏ trong ảnh 300x300 sẽ rất khó đọc — dù với con người hay AI. Đảm bảo ảnh đủ độ phân giải cho nội dung cần đọc.

Tổng kết Best Practices

  1. Đặt ảnh trước text trong content array
  2. Resize ảnh phù hợp với task — đừng gửi ảnh 4K khi chỉ cần nhận diện đối tượng
  3. Viết prompt rõ ràng — specify format, role, và mức độ chi tiết mong muốn
  4. Chọn model phù hợp — Haiku cho batch đơn giản, Opus cho reasoning phức tạp
  5. Yêu cầu Claude báo cáo uncertainty thay vì đoán mò
  6. Kiểm tra chất lượng ảnh trước khi gửi

Tiếp theo, xem Crop Tool Pattern để cho Claude khả năng zoom vào vùng chi tiết khi cần phân tích sâu hơn.


Bài viết liên quan

Tính năng liên quan:VisionImage OptimizationPrompt Engineering

Bai viet co huu ich khong?

Bản quyền thuộc về tác giả. Vui lòng dẫn nguồn khi chia sẻ.

Bình luận (0)
Ảnh đại diện
Đăng nhập để bình luận...
Đăng nhập để bình luận
  • Đang tải bình luận...

Đăng ký nhận bản tin

Nhận bài viết hay nhất về sản phẩm và vận hành, gửi thẳng vào hộp thư của bạn.

Bảo mật thông tin. Hủy đăng ký bất cứ lúc nào. Chính sách bảo mật.