画像からの抽出
レシート、請求書、身分証、名刺などの画像から構造化データを取り出すレシピ。3 ステップ:
- Files で画像をアップロード。
- チャットメッセージで
file_idを参照。 - JSON Schema で出力を制約。
from openai import OpenAIfrom pydantic import BaseModelfrom 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.parsedfor 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パートに書き換えた上でモデルに転送します。詳細は ビジョン を参照。response_format=Receiptで Pydantic スキーマを strict な JSON Schema として送信。
クリーンアップ
Section titled “クリーンアップ”ファイルはストレージコストを消費するため、使い終わったら削除します:
client.files.delete(uploaded.id)30 日間の有効期限 に任せることもできます。