Bỏ qua, tới nội dung chính
Đầu vào ảnh · đã kiểm chứng

Gửi ảnh cho Qwen 3.8 27B

Đầu vào ảnh trên qwen3.8-27b chạy đúng kiểu SDK OpenAI vốn đã chờ sẵn: một mảng content gồm phần text và phần image_url. Chỉ hai chi tiết quyết định lần thử đầu tiên của bạn có chạy hay không — ảnh phải nhúng thẳng dạng base64 data URI, và ngân sách token phải chừa chỗ cho model suy nghĩ trước khi trả lời.

Những luật thật sự quan trọng

Định dạng
mảng content: {"type":"text"} + {"type":"image_url"}
Nguồn ảnh
chỉ base64 data URI — link http(s) không được tải về
Nếu model không có vision
Request bị từ chối ngay bằng vision_not_available, và bạn không bị tính tiền
Ngân sách token
Để max_completion_tokens rộng tay (từ 400) — phần suy luận tiêu từ chính ngân sách này
Cỡ request
Tối đa 10 MB mỗi body, tính cả base64
Tính tiền
Token ảnh là token input, theo đúng giá input thường

Giá (giảm 40% so với niêm yết)

qwen3.8-27bGiảm 40%
Input
$0,45$0,27
Output
$3,20$1,92

@cf/qwen/qwen3.8-27b

Ảnh tính như token input theo giá thường — không có phụ phí riêng cho ảnh. Giá live ở trang models.

Chúng tôi đã kiểm những gì

Bài probe 18/08/2026: hai ảnh đặc màu khác nhau, hỏi màu chủ đạo, model trả lời đúng cả hai. Chúng tôi báo cáo thứ đã thử, không phải thứ trang model ghi.

2 / 2

ảnh probe nhận đúng

3 trên 7

model trong catalog thật sự đọc được ảnh

chỉ base64

cách truyền ảnh được chấp nhận

chưa đo

chữ nhỏ, tài liệu scan, biểu đồ dày đặc

Ví dụ chạy được

Đọc file, base64 nó, bỏ vào mảng content. Toàn bộ phần tích hợp chỉ có vậy.

import base64
from openai import OpenAI

client = OpenAI(
    base_url="https://api.clfaigateway.dev/v1",
    api_key="sk-gw-...",  # app.clfaigateway.dev
)

with open("screenshot.png", "rb") as f:
    b64 = base64.b64encode(f.read()).decode()

resp = client.chat.completions.create(
    model="qwen3.8-27b",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "What does this screen show?"},
            # Must be a data: URI. Remote http(s) links are not fetched.
            {"type": "image_url",
             "image_url": {"url": f"data:image/png;base64,{b64}"}},
        ],
    }],
    # Leave room: the model thinks before it answers, and a tiny budget
    # can be spent entirely on reasoning, returning empty content.
    max_completion_tokens=400,
)
print(resp.choices[0].message.content)

Đầu vào ảnh — câu hỏi thường gặp

Gần như luôn là do ngân sách token. Model này suy luận trước khi trả lời, và phần suy luận tiêu từ chính max_completion_tokens — đặt quá thấp thì toàn bộ ngân sách chui vào phần suy nghĩ, để lại trường content rỗng. Nhìn y hệt một model mù. Nâng max_completion_tokens lên 400 trở lên là câu trả lời hiện ra. Chỗ này từng làm chúng tôi mất một giờ, nên hãy kiểm nó đầu tiên.

Không — link http(s) không được tải về, và chúng tôi từ chối ngay từ đầu bằng một lỗi rõ ràng thay vì để nó hỏng ở tầng sâu hơn. Hãy tự tải bytes về rồi nhúng dạng base64 data URI. Cách đó cũng giữ ảnh của bạn khỏi đi qua một đường fetch của bên thứ ba.

Tra cứu lỗi →

Bạn nhận 400 kèm vision_not_available nêu tên model, trước khi request đi lên upstream, và không mất đồng nào. Chúng tôi chặn có chủ đích: một số model nhận payload ảnh mà không kêu ca gì rồi trả lời chỉ dựa vào phần chữ — tức bạn trả tiền cho một câu đoán đầy tự tin. Chúng tôi thà từ chối.

Model nào đọc được ảnh →

Không. Ảnh là một phần nội dung request, mà chúng tôi chỉ log metadata — token, độ trễ, chi phí — không bao giờ log nội dung prompt hay response. Inference chạy trên hạ tầng Cloudflare; phía chúng tôi không giữ lại gì để huấn luyện hay xem lại.

Chính sách dữ liệu →