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)
- 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 →