能力
视觉
把图片和文本一起放在同一个 content 数组里。模型会同时阅读图片与文本——没有单独的视觉端点,也不需要两步流程。
哪些模型支持视觉
目前五个虚拟 ID 都接受图片内容块。每个模型的能力开关通过 GET /v1/models 暴露为 supports_vision——如果你想在客户端 UI 上做能力开关,请在运行时读取它。
携带图片的基本调用
把 user 消息构造为 content 数组。顺序很重要——先放图片,再放问题。混合内容支持任意顺序,但模型更喜欢「先上下文、后问题」。
# Encode an image and embed it as a base64 content block.
B64=$(base64 -w0 receipt.jpg 2>/dev/null || base64 receipt.jpg)
curl https://caicaini.com/v1/messages \
-H "Authorization: Bearer cai_api_YOUR_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"caicaini/sonnet\",
\"max_tokens\": 512,
\"messages\": [{
\"role\": \"user\",
\"content\": [
{\"type\": \"image\", \"source\": {\"type\": \"base64\", \"media_type\": \"image/jpeg\", \"data\": \"${B64}\"}},
{\"type\": \"text\", \"text\": \"Extract every line item with price into JSON.\"}
]
}]
}"图片来源
我们接受两种来源类型。生产环境最稳的是内联 base64,因为请求是自包含的——没有额外的网络跳转,也不会因图床中途不可用而失败。
base64——把原始字节用标准 base64 编码后填入data字段。media_type设为image/jpeg、image/png、image/webp、image/gif之一。url——我们在服务端拉取图片。URL 必须是https://,5 秒内返回 200,并提供受支持的 MIME 类型。私有 URL(带签名的 S3 链接、预签名 R2 链接)只要请求时签名仍有效就可以。
url 形式
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/photos/receipt.jpg"
}
}尺寸与数量限制
- 每轮最多 20 张图片。超出会以 type 为
invalid_request_error拒绝。 - 每张图最大 5 MB,分辨率上限 8000 × 8000 像素。我们会在服务端把过大的图片下采样到对模型友好的分辨率,再据此计费输入 token。
- 请求体总大小最大 16 MB。算上 base64 的开销,大约能放下两打照片。
实用建议
- 发送前裁掉无关空白。更小、更清晰的图片更省成本,模型也读得更准。
- 对于文档,请先在客户端把每页 PDF 渲染为 PNG 再发送。我们目前不直接接受
application/pdf。 - 用系统提示来引导——比如「只用合法 JSON 回复,不要做总结。」对 OCR 类提取任务效果很好。
- 对延迟敏感的视觉任务,先路由到
caicaini/haiku,仅在结果不确定时升级到caicaini/sonnet。对长输入的高吞吐文档问答,请固定使用caicaini/kimi。详见 模型。