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 هر فیلد را آستانه بگذارید و فیلدهای مردد را برای بررسی انسانی علامت بزنید.
در چند قدم
- ۱
کلید API بسازید
از بخش توسعهدهندگان ← کلیدها یک کلید sk-1ai-… بسازید و در ONEAI_API_KEY نگه دارید.
- ۲
فیلدها را تعریف کنید
برای هر فیلد یک نام (حرف انگلیسی، عدد، زیرخط) و type بنویسید و هر جا لازم است instructions بدهید.
- ۳
ورودی را بفرستید
متن را در state و تصویرها را در images بگذارید؛ دستکم یکی از این دو لازم است.
- ۴
مقدارها را اعتبارسنجی کنید
فقط value را بخوانید، نه guess؛ null یعنی داده پیدا نشد. پیش از ثبت، قاعدههای کسبوکار خودتان را روی مقدارها اجرا کنید.
مدلهای استخراج داده در API
همهی مدلهانمونه درخواست با curl
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
# 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 چیزی نوشته است.
{
"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
چطور پروژهای را که با کتابخانهی OpenAI نوشته شده، فقط با تغییر آدرس پایه و کلید به 1ai وصل کنید؛ با نمونه کد Python، Node.js و cURL، استریم، فهرست مدلها و مدیریت خطا.

کلید API در 1ai: امنیت، محدودیتها و کنترل هزینه
چطور کلیدهای API را امن نگه دارید و هزینه را مهار کنید: مدلهای مجاز، سقف اعتبار ماهانه، محدودیت نرخ، تاریخ انقضا، کلیدهای تیمی و گزارش مصرف.
صفحههای مرتبط
همهی امکاناتDecisions API
به جای تجزیهی متن آزاد مدل، پرسشهایتان را تعریف کنید و برای هر کدام پاسخی تایپدار بگیرید: احتمال درستی یک گزاره، گزینهی انتخابشده یا امتیاز روی یک مقیاس.
System One API
قالب بومی همان مدلهای تصمیمگیری: state میتواند شیء JSON باشد، پرسشها با شناسه کلید میخورند و پاسخها هم با همان شناسه برمیگردند.
OpenAI SDK
کتابخانهی رسمی openai را در Python و Node.js با تغییر آدرس پایه به 1ai وصل کنید و چت، فراخوانی ابزار، بردار متن، تصویر و صدا را از یک کلید بگیرید.
Extraction API؛ استخراج فیلدهای تایپدار از متن و تصویر
فیلدهایی را که لازم دارید با نوعشان تعریف کنید و از متن یا تصویر، مقدار هر فیلد را با اطمینان آن بگیرید؛ فیلدی که در متن نیست null برمیگردد.
ساخت کلید API