# 画像からの抽出

Source: https://aiand-docs-staging.pages.dev/ja/cookbook/vision-extraction/

レシート、請求書、身分証、名刺などの画像から構造化データを取り出すレシピ。3 ステップ:

1. [Files](/ja/api/files/) で画像をアップロード。
2. チャットメッセージで `file_id` を参照。
3. JSON Schema で出力を制約。

## サンプル

```python
from openai import OpenAI
from pydantic import BaseModel
from typing import List

client = OpenAI(base_url="https://api.aiand.com/v1", api_key="sk-...")

class LineItem(BaseModel):
    description: str
    quantity: int
    unit_price_jpy: float

class Receipt(BaseModel):
    merchant: str
    date: str
    items: List[LineItem]
    total_jpy: float

uploaded = client.files.create(
    file=open("receipt.jpg", "rb"),
    purpose="vision",
)

response = client.chat.completions.parse(
    model="zai-org/glm-5.3-flash",
    messages=[
        {"role": "system", "content": "Extract structured data from receipts."},
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Parse this receipt into JSON."},
                {"type": "file", "file": {"file_id": uploaded.id}},
            ],
        },
    ],
    response_format=Receipt,
)

receipt = response.choices[0].message.parsed
for item in receipt.items:
    print(f"{item.description}: ¥{item.unit_price_jpy}")
print(f"Total: ¥{receipt.total_jpy}")
```

## 仕組み

- `client.files.create(..., purpose="vision")` で画像を ai& のストレージにアップロード。`purpose` 省略時は MIME から推論されます。
- `file` コンテンツパート — `{type: "file", file: {file_id}}` — を指定すると、ai& がファイルを参照し、短時間有効な署名付き URL を生成して `image_url` パートに書き換えた上でモデルに転送します。詳細は [ビジョン](/ja/capabilities/vision/) を参照。
- `response_format=Receipt` で Pydantic スキーマを strict な JSON Schema として送信。

## クリーンアップ

ファイルはストレージコストを消費するため、使い終わったら削除します:

```python
client.files.delete(uploaded.id)
```

[30 日間の有効期限](/ja/api/file-lifecycle/) に任せることもできます。

<Aside type="tip">
  非常に大きなファイル (数 GB の動画、数百 MB の画像) は `files.create` ではなくチャンク [Uploads API](/ja/api/uploads/) を使用してください。
</Aside>
