> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ruapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 图像输入(vision)

> 如何通过 RuAPI 向大模型发送图片:Python 示例,image_url 用法,公开链接与 base64,支持哪些模型和格式。

支持 vision 的模型可以在一次请求里同时接收图片和文字。你可以把图片交给模型,让它描述画面、识别其中的文字(OCR)、看懂界面截图、流程图或图表,也可以从拍照的表格里把数据读出来。

底层用的还是和普通对话一样的 OpenAI 兼容端点。唯一变化的是 `content` 字段:不再传一个字符串,而是传一个**由若干部分组成的数组** —— 文本块 `{"type": "text"}` 和图片块 `{"type": "image_url"}`。

<Tip>
  请使用**支持 vision** 的模型:[Claude](/zh/claude-api)(Sonnet / Opus)、[GPT](/zh/gpt-api)、[Gemini](/zh/gemini-api) 和 [GLM](/zh/glm-api)(GLM-5V) 都能接收图片。DeepSeek 只能处理文本 —— 见 [DeepSeek 模型](/zh/deepseek-api)。发请求前,先在主站\*\*「价格」\*\*页面查看各模型的能力标签。
</Tip>

## 通过公开链接传图

最简单的情况 —— 图片已经在网上,有直接可访问的 URL。

```python Python (OpenAI SDK) theme={null}
from openai import OpenAI

client = OpenAI(
    api_key="sk-你的密钥",
    base_url="https://www.ruapi.ai/v1",
)

response = client.chat.completions.create(
    model="claude-opus-4-8",  # vision 模型;准确名称见价格页
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "图里是什么?请简要描述。"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg"
                    },
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)
```

## 本地文件用 base64

如果图片无法公开访问(截图、磁盘上的照片),就把它编码成 base64,以 `data:image/jpeg;base64,...` 这种 **data URI** 形式传入。

```python Python (OpenAI SDK) theme={null}
import base64
from openai import OpenAI

client = OpenAI(
    api_key="sk-你的密钥",
    base_url="https://www.ruapi.ai/v1",
)

# 把本地文件编码成 base64
with open("screenshot.jpg", "rb") as f:
    b64 = base64.b64encode(f.read()).decode("utf-8")

data_uri = f"data:image/jpeg;base64,{b64}"

response = client.chat.completions.create(
    model="claude-opus-4-8",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "识别这张截图里的所有文字。"},
                {"type": "image_url", "image_url": {"url": data_uri}},
            ],
        }
    ],
)

print(response.choices[0].message.content)
```

<Note>
  PNG 把前缀改成 `data:image/png;base64,`,WebP 用 `data:image/webp;base64,`。MIME 类型必须和文件的真实格式一致。
</Note>

## 注意事项

<AccordionGroup>
  <Accordion title="图越大,消耗的 token 越多">
    图片会计入输入 token,分辨率越高,请求越贵。如果不需要看清细节,发送前先把图缩小(比如长边压到 1024–1568 px)。
  </Accordion>

  <Accordion title="超大 base64 会把请求撑大">
    base64 字符串比原文件大约大三分之一,而且整段都塞进请求体里。对于体积大的图片,用公开链接比传几兆字节的 data URI 更稳妥 —— 否则可能撞上请求体积上限。
  </Accordion>

  <Accordion title="支持的格式">
    通常是 `jpeg`、`png`、`webp` 和 `gif`。HEIC、TIFF、SVG 等冷门格式建议先转换成上述之一。
  </Accordion>
</AccordionGroup>

## 接下来

* [快速入门](/zh/quickstart) —— 注册、密钥和第一个请求
* [错误及解决办法](/zh/errors) —— 遇到 400 / 413 / 415 等状态码时怎么办
