主题
图片理解(Vision)
让模型看懂图片:识别物体、读取文字、分析图表、描述场景。Shuro 在售的 GPT / Claude 模型均带 Vision 能力。
协议差异速览
| Provider | 协议 | 图片格式 |
|---|---|---|
| OpenAI 系列 | OpenAI Chat Completions | image_url 对象(URL 或 base64 data URI) |
| Claude 系列 | Anthropic Messages | image 块(URL / base64) |
待验证(TODO/VERIFY):生产环境优先用 base64
以下内容基于旧平台实测(2026-06),尚未在 Shuro 复测,仅供参考。
URL 模式能用但看图床:GitHub raw 等常见源正常,但部分域名(如 Wikimedia)上游拉取失败报 Failed to download image。base64 data URI 在旧平台各协议全部稳定。
OpenAI 协议
POST https://shuro.vip/v1/chat/completions请求示例(图片 URL)
json
{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/photo.jpg"
}
},
{
"type": "text",
"text": "请描述这张图片"
}
]
}
],
"max_tokens": 4096
}请求示例(base64)
json
{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."
}
},
{"type": "text", "text": "OCR 这张图里的文字"}
]
}
],
"max_tokens": 2048
}Python 示例
python
from openai import OpenAI
import base64
client = OpenAI(api_key="<您的 API Key>", base_url="https://shuro.vip/v1")
# 本地图片 → base64
with open("photo.jpg", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = client.chat.completions.create(
model="gpt-5.4",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
{"type": "text", "text": "这张图里有几个人?"}
]
}
],
max_tokens=2048
)
print(resp.choices[0].message.content)多图同时分析
json
{
"model": "claude-opus-4-7",
"messages": [
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://.../img1.jpg"}},
{"type": "image_url", "image_url": {"url": "https://.../img2.jpg"}},
{"type": "text", "text": "对比这两张图的差异"}
]
}
],
"max_tokens": 4096
}Claude 原生 Messages 协议
POST https://shuro.vip/v1/messages请求示例
json
{
"model": "claude-opus-4-7",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/photo.jpg"
}
},
{
"type": "text",
"text": "请描述这张图片"
}
]
}
]
}Claude base64 格式(不同于 OpenAI)
json
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg..."
}
}Claude 跟 OpenAI 不互通
- OpenAI:
image_url.url字符串带data:image/jpeg;base64, - Claude:
source对象分离media_type和data
推荐模型对比
| 模型 | 强项 | 适合 |
|---|---|---|
gpt-5.4 / gpt-5.5 | 通用最强 | 日常 |
gpt-5.4-mini | 最便宜 | 简单分类、大量批处理 |
claude-opus-4-8 / claude-opus-4-7 | 深度理解 + 长文档 | OCR、图表分析 |
claude-sonnet-4-6 | 平衡 | 日常 |
实战场景
OCR / 图片识字
"提取图片里的所有文字,按原始排版给我"Claude 的 OCR 准确度极高,比开源 OCR 库还稳。
图表分析
"看这个柱状图,告诉我:
1. 哪个月销售额最高
2. 同比增长率
3. 异常值(突高或突低的月份)"GPT-5 系 / Claude Opus 处理图表的能力业界顶级。
UI 还原成代码
"看这个 UI 截图,生成对应的 React 组件 + Tailwind CSS"适合 Cursor / Cline 工作流。
表格抽取(OCR + 结构化)
json
{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}},
{"type": "text", "text": "抽取表格内容为 JSON 数组"}
]
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "table_rows",
"schema": {
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"city": {"type": "string"}
}
}
}
}
}
}
}
}视觉 + 结构化输出 组合拳。
WARNING
旧平台实测 json_schema 不强制,Shuro 待验证(见结构化输出页首说明)。表格抽取要严格 JSON 的话,改用 tools + tool_choice: "required" 把表格行定义成工具参数。
图片格式支持
| 格式 | OpenAI | Claude |
|---|---|---|
| JPEG / JPG | ✅ | ✅ |
| PNG | ✅ | ✅ |
| WebP | ✅ | ✅ |
| GIF (静态) | ✅ | ✅ |
| GIF (动态) | ❌(取第一帧) | ❌ |
| TIFF | ❌ | ❌ |
| SVG | ❌(要转 PNG) | ❌ |
| HEIC(iPhone) | ⚠️ 部分 | ⚠️ |
大小限制
| Provider | 单图最大 | 单请求图数 |
|---|---|---|
| OpenAI | 20 MB | 250+ |
| Claude | 5 MB | 100+ |
超大图建议先压缩 + 用 base64 而非 URL(URL 有时效问题)。
成本
图片按分辨率折算成输入 token 计费,随模型倍率变化。具体价格见 Shuro 价格表。
常见问题
图片 URL 拉不到
Error: Failed to download image from URL可能原因:
- URL 需要登录(如私有 GitHub)→ 改用 base64
- URL 域名被 Anthropic / OpenAI 黑名单 → 改用 base64
- URL 返回 HTML 不是图片 → 检查链接
Base64 数据太大被拒
Error: Request entity too large压缩图片:
python
from PIL import Image
img = Image.open("photo.jpg")
img.thumbnail((1024, 1024)) # 缩到最长边 1024
img.save("photo_small.jpg", quality=85)图片内容被审核
Error: content_policy_violation某些图片(成人/暴力/政治敏感)被拒。换图片或换模型。
Claude 看不懂中文文字
试一下用更高级的模型(Opus > Sonnet > Haiku)。
跟客户端集成
主流客户端都内置 vision 支持:
| 客户端 | 用法 |
|---|---|
| Claude Code | 直接拖图到终端 |
| Codex CLI | codex chat --image photo.jpg(TODO/VERIFY:该用法待确认) |
| Cursor | 拖图到 chat 面板 |
| AionUI | 文件拖拽 |
| Cherry Studio | 文件上传 |
