راهنمای اتصال به API

Extraction API؛ استخراج فیلدهای تایپ‌دار از متن و تصویر

استخراج اطلاعات از فاکتور، رسید، قرارداد یا پیام مشتری با مدل چت معمولاً به خروجی JSON بی‌ثبات و حدس‌های ساختگی می‌رسد. مسیر POST /v1/extraction در وان ای آی (1ai) برای همین کار ساخته شده است: متن را در state و تا چهار تصویر را در images می‌فرستید، فیلدها را با نوعشان (متن، عدد، تاریخ، فهرست، برآورد و…) تعریف می‌کنید و برای هر فیلد مقدار، اطمینان و احتمال نبودنش را می‌گیرید. اگر داده‌ای در ورودی نباشد، value برابر null است و مدل چیزی از خودش نمی‌سازد. مدل این مسیر cloudflare/clairic است و هزینه بر اساس توکن ورودی حساب می‌شود.

چرا با 1ai

فیلدهای تایپ‌دار

text، number، date، time، datetime، duration، list، estimate و forecast؛ هر فیلد با قاعده و دستورالعمل خودش.

null به جای حدس

وقتی داده در ورودی نیست، value خالی است و p_null احتمال نبودن آن را می‌گوید؛ پاسخ ساختگی وارد سیستم شما نمی‌شود.

متن و تصویر

تا چهار تصویر PNG، JPEG یا WebP را به صورت data URL بفرستید؛ رسید عکس‌گرفته‌شده هم کار می‌کند.

اطمینان برای هر فیلد

confidence هر فیلد را آستانه بگذارید و فیلدهای مردد را برای بررسی انسانی علامت بزنید.

در چند قدم

  1. ۱

    کلید API بسازید

    از بخش توسعه‌دهندگان ← کلیدها یک کلید sk-1ai-… بسازید و در ONEAI_API_KEY نگه دارید.

  2. ۲

    فیلدها را تعریف کنید

    برای هر فیلد یک نام (حرف انگلیسی، عدد، زیرخط) و type بنویسید و هر جا لازم است instructions بدهید.

  3. ۳

    ورودی را بفرستید

    متن را در state و تصویرها را در images بگذارید؛ دست‌کم یکی از این دو لازم است.

  4. ۴

    مقدارها را اعتبارسنجی کنید

    فقط value را بخوانید، نه guess؛ null یعنی داده پیدا نشد. پیش از ثبت، قاعده‌های کسب‌وکار خودتان را روی مقدارها اجرا کنید.

مدل‌های استخراج داده در API

همه‌ی مدل‌ها

Clairic

کلادفلر
استخراج داده

استخراج فیلدهای تایپ‌دار از متن و تصویر

۰٫۰۱۵ اعتبار / ۱۰۰۰ توکن ورودی
API

نمونه درخواست با curl

bash
curl https://1ai.ir/v1/extraction \
  -H "Authorization: Bearer $ONEAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cloudflare/clairic",
    "state": "فاکتور شماره INV-2291 از شرکت نوین، تاریخ 2026-09-02، مهلت پرداخت ۳۰ روز. ۴ پالت هر کدام ۲۵۰ دلار و هزینه ارسال ۸۰ دلار.",
    "fields": {
      "invoice_number": { "type": "text" },
      "issue_date": { "type": "date" },
      "due_date": { "type": "date", "instructions": "تاریخ صدور به‌علاوه‌ی مهلت پرداخت" },
      "total": { "type": "number", "decimals": 2, "instructions": "مبلغ کل با هزینه ارسال" },
      "po_number": { "type": "text", "instructions": "شماره سفارش خرید" }
    }
  }'

رسید از روی عکس با Python

python
# pip install requests
import base64, os, requests

with open("receipt.jpg", "rb") as f:
    image = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()

res = requests.post(
    "https://1ai.ir/v1/extraction",
    headers={"Authorization": f"Bearer {os.environ['ONEAI_API_KEY']}"},
    json={
        "model": "cloudflare/clairic",
        "images": [image],
        "fields": {
            "store": {"type": "text"},
            "total": {"type": "number", "decimals": 2},
            "items": {"type": "list", "items": "text"},
        },
    },
    timeout=120,
)
res.raise_for_status()
for name, answer in res.json()["answers"].items():
    print(name, answer["value"])  # None means "not established": never fall back to guess

قالب پاسخ

answers شیئی با کلید نام فیلدهاست. در نمونه‌ی زیر شماره‌ی سفارش خرید در فاکتور نیامده و value آن null است، با اینکه guess چیزی نوشته است.

json
{
  "model": "cloudflare/clairic",
  "answers": {
    "invoice_number": { "type": "text", "value": "INV-2291", "guess": "INV-2291", "confidence": 0.99, "p_null": 0.00001, "span": [13, 21] },
    "due_date": { "type": "date", "value": "2026-10-02", "confidence": 0.99 },
    "total": { "type": "number", "value": 1080, "confidence": 0.99 },
    "po_number": { "type": "text", "value": null, "guess": "INV-2291", "confidence": 0.99, "p_null": 1 }
  },
  "truncated": false,
  "usage": { "state_tokens": 61, "image_tokens": 0, "schema_tokens": 472, "input_tokens": 655, "output_tokens": 0, "passes": 3 }
}

فیلدهای درخواست

فیلدنوعتوضیح
modelرشتهcloudflare/clairic
stateرشتهمتن ورودی؛ شیء را پیش از ارسال به متن تبدیل کنید
fieldsشیء یا آرایهفیلدها با type و تنظیمات اختیاری
imagesآرایه (تا ۴)data URL با حروف کوچک یا { content_type, base64 }؛ آدرس اینترنتی پذیرفته نمی‌شود
reference_dateتاریخ ISO، اختیاریمبنای تاریخ‌های نسبی مثل «فردا»
optionsشیء، اختیاریinclude_quantiles و return_state_text

تنظیمات هر فیلد: instructions، unit، integer، decimals (۰ تا ۶)، items برای فهرست، min و max (برای estimate و forecast لازم)، null_threshold، horizon و interval.

اشتباه‌های رایج

  • guess را جایگزین value نکنید؛ برای فیلدی که value آن null است، guess فقط حدس مدل است.
  • استریم پشتیبانی نمی‌شود و stream: true پاسخ 400 می‌گیرد.
  • state خالی بدون تصویر پذیرفته نمی‌شود.
  • PDF، صوت و ویدیو ورودی این مسیر نیستند؛ صفحه‌های PDF را پیش از ارسال به تصویر تبدیل کنید.
  • estimate و forecast بدون min و max خطای 422 می‌گیرند.

سوالات متداول

فرق Extraction API با گرفتن JSON از مدل چت چیست؟

مدل چت ممکن است فیلدی را که در متن نیست با حدس پر کند یا ساختار JSON را رعایت نکند. این مسیر برای هر فیلد نوع ثابت، مقدار null برای داده‌ی نامعلوم و درصد اطمینان برمی‌گرداند، پس می‌توانید بدون تجزیه‌ی متن مستقیم ذخیره یا اعتبارسنجی کنید.

فاکتور و متن فارسی را می‌خواند؟

بله، متن و تصویر فارسی را هم می‌خواند. اعداد فارسی و تاریخ‌ها را با چند نمونه‌ی واقعی از اسناد خودتان آزمایش کنید و برای تاریخ‌های شمسی در instructions بگویید چه قالبی می‌خواهید.

هزینه چطور حساب می‌شود؟

بر اساس توکن ورودی که شامل متن، تعریف فیلدها و تصویرهاست و در usage.input_tokens می‌آید. اعتبار کسرشده‌ی هر درخواست در سرآیند x-1ai-credits است.

سقف تعداد فیلد و اندازه‌ی تصویر چقدر است؟

سقف مشخصی برای تعداد فیلد نیست، ولی فیلدهای بیشتر توکن بیشتری مصرف می‌کنند. هر درخواست تا چهار تصویر می‌پذیرد؛ تصویرها را پیش از ارسال کوچک کنید تا درخواست سبک بماند.

مطالب مرتبط

استفاده از API سازگار با OpenAI در 1ai: راهنمای عملی با Python، Node.js و cURL
توسعه‌دهندگان

استفاده از API سازگار با OpenAI در 1ai: راهنمای عملی با Python، Node.js و cURL

چطور پروژه‌ای را که با کتابخانه‌ی OpenAI نوشته شده، فقط با تغییر آدرس پایه و کلید به 1ai وصل کنید؛ با نمونه کد Python، Node.js و cURL، استریم، فهرست مدل‌ها و مدیریت خطا.

۴ دقیقه مطالعه
کلید API در 1ai: امنیت، محدودیت‌ها و کنترل هزینه
توسعه‌دهندگان

کلید API در 1ai: امنیت، محدودیت‌ها و کنترل هزینه

چطور کلیدهای API را امن نگه دارید و هزینه را مهار کنید: مدل‌های مجاز، سقف اعتبار ماهانه، محدودیت نرخ، تاریخ انقضا، کلیدهای تیمی و گزارش مصرف.

۴ دقیقه مطالعه
همه‌ی امکانات

Decisions API

به جای تجزیه‌ی متن آزاد مدل، پرسش‌هایتان را تعریف کنید و برای هر کدام پاسخی تایپ‌دار بگیرید: احتمال درستی یک گزاره، گزینه‌ی انتخاب‌شده یا امتیاز روی یک مقیاس.

System One API

قالب بومی همان مدل‌های تصمیم‌گیری: state می‌تواند شیء JSON باشد، پرسش‌ها با شناسه کلید می‌خورند و پاسخ‌ها هم با همان شناسه برمی‌گردند.

OpenAI SDK

کتابخانه‌ی رسمی openai را در Python و Node.js با تغییر آدرس پایه به 1ai وصل کنید و چت، فراخوانی ابزار، بردار متن، تصویر و صدا را از یک کلید بگیرید.

Extraction API؛ استخراج فیلدهای تایپ‌دار از متن و تصویر

فیلدهایی را که لازم دارید با نوعشان تعریف کنید و از متن یا تصویر، مقدار هر فیلد را با اطمینان آن بگیرید؛ فیلدی که در متن نیست null برمی‌گردد.

ساخت کلید API