مرجع API - وثائق Entity Enricher

مرجع API

تتيح لك واجهة REST API الخاصة بـ Entity Enricher إثراء الكيانات وإدارة المخططات واسترجاع السجلات برمجيًا. جميع الاستجابات بصيغة JSON. يستخدم التقدم في الوقت الفعلي أحداث الخادم المُرسَلة (SSE).

بدء سريع

ادمج Entity Enricher في ثلاث خطوات:

1

الحصول على المخطط

GET /api/schema/saved

عرض المخططات المحفوظة أو توليد واحد من بيانات عيّنة

2

إثراء

POST /api/single/enrich/stream

ابدأ الإثراء واحصل على معرّف مهمة لبثّ SSE

3

الحصول على النتيجة

GET /api/records/{id}

استرجاع سجل الإثراء الكامل مع المخرجات المُهيكلة

المصادقة

تتطلب جميع نقاط نهاية API (باستثناء تسجيل الدخول/التسجيل) المصادقة. استخدم ترويسة X-API-Key مع مفتاح وصول المؤسسة:

curl -H "X-API-Key: ent_your_key_here" \
     https://your-instance.example.com/api/enrichment/options

أنشئ مفاتيح API من صفحة مفاتيح API أو عبر POST /api/auth/api-keys. راجع دليل مفاتيح API للاطلاع على تفاصيل أنواع المفاتيح والأذونات.

نقاط النهاية الرئيسية

الإثراء

الطريقةنقطة النهايةالوصف
GET/api/enrichment/optionsالنماذج واللغات والاستراتيجيات المتاحة
POST/api/single/enrich/streamبدء إثراء كيان واحد (يُرجع job_id لبثّ SSE)
POST/api/single/enrich/syncحجب الإثراء المفرد للعملاء غير المدعومين بـ SSE (Make.com، curl)
POST/api/enrichment/batch/startبدء إثراء دفعة لكيانات متعددة
POST/api/enrichment/batch/fetchجلب الكيانات من عنوان URL خارجي

إدارة المهام

الطريقةنقطة النهايةالوصف
GET/api/llm/stream/{job_id}بث SSE لأي مهمة LLM (الإثراء، المخطط، الدمج)
POST/api/llm/cancel/{job_id}إلغاء مهمة قيد التشغيل أو متوقفة مؤقتًا
POST/api/llm/continue/{job_id}استئناف مهمة متوقفة مؤقتًا (مثلًا بعد عدم تطابق التصنيف)

المخططات

الطريقةنقطة النهايةالوصف
GET/api/schema/savedعرض جميع المخططات المحفوظة
POST/api/schema/savedإنشاء مخطط جديد
POST/api/schema/generate/streamتوليد مخطط من بيانات نموذجية (SSE)
POST/api/schema/saved/{id}/prompt/streamتحرير المخطط بالذكاء الاصطناعي باللغة الطبيعية (SSE)
POST/api/schema/analyze-sampleتحليل عيّنة JSON بحثًا عن أسماء خصائص ملتبسة — تلك التي تحتمل عدة قراءات في سياق العنصر الأب، أو لا تحتمل أيًّا منها — وعن العناصر المرتبطة التي تخلط حقائق الكيان بحقائق خاصة بكل أب (تقرير عديم الحالة، مع اقتراحات لإعادة التسمية)
POST/api/schema/saved/{id}/analyzeتشغيل فحصَي الالتباس وتحديد نطاق الهوية على مخطط محفوظ وكتابة تعليقاتهما التوضيحية (وصف معاد صياغته لكل اسم ملتبس)
POST/api/schema/scoping-splitتطبيق عملية فصل واحدة لتحديد نطاق الهوية على مجموعة عيّنات — تنتقل حقائق الكيان المرتبط الخاصة به إلى كائن فرعي خاص بها (حتمية، مجانية، ولا يُحفظ شيء)
DELETE/api/schema/saved/{id}/enrichment-dataحذف بيانات إثراء المخطط — السجلات وحالة الكيان — مع الاحتفاظ بالمخطط (المالك+)

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

الطريقةنقطة النهايةالوصف
GET/api/recordsعرض السجلات مع تقسيم الصفحات والتصفية
GET/api/records/{id}احصل على تفاصيل السجل الكاملة مع مخرجات مُهيكلة
POST/api/records/batch-deleteحذف سجلات متعددة (بحد أقصى 100)
POST/api/fusion/mergeدمج النتائج من نماذج متعددة

المرفقات

الطريقةنقطة النهايةالوصف
POST/api/attachmentsرفع ملف واحد أو أكثر (multipart/form-data)
POST/api/attachments/base64رفع ملف واحد عبر JSON base64 (للعملاء غير متعددي الأجزاء)
GET/api/attachments/{id}/downloadتنزيل وحدات بايت الملف الأصلي
DELETE/api/attachments/{id}حذف مرفق (تنظيف بعد الإثراء)

نشر المخططات والعيّنات

الطريقةنقطة النهايةالوصف
POST/api/schema/saved/{id}/publishانشر النسخة العاملة من مخطط مرتبط لتصبح العقد الذي يعمل الإثراء وقواعد بياناته وفقه. لا يسري أي تغيير بنيوي قبل تنفيذ ذلك
POST/api/schema/sample/generate/streamوَلِّد من 1 إلى N كائن JSON كعينات من نوع كيان واحد (يُعيد job_id لـ SSE)

Database Sync

الطريقةنقطة النهايةالوصف
GET/api/databasesعرض تسجيلات قواعد بيانات المؤسسة مع أعداد الفروق المعلّقة
POST/api/databasesتسجيل قاعدة بيانات على مخطط
GET/api/databases/{id}/snapshotنزّل الحالة الكاملة كلقطة ‎.sql‎ — انطلق من الصفر
GET/api/databases/{id}/changesاجلب نافذة الفروق التالية بترتيب FIFO؛ واطلبها لحجزها من أجل تسليم مؤكَّد الاستلام
POST/api/databases/{id}/ackالإقرار بالفروق المطبَّقة حتى معرّف معيّن — يحرّر الحجز
POST/api/databases/{id}/clear-ackedحذف الفروق المُسلَّمة والمؤكَّد استلامها

المفاهيم الدلالية

الطريقةنقطة النهايةالوصف
GET/api/semantic-conceptsاستعرض مفردات المفاهيم، مُرشَّحة حسب النوع ومُقيَّمة مقابل مفهوم مرجعي
GET/api/semantic-concepts/typesعرض أنواع المفاهيم مع أعدادها ونماذج التضمين
POST/api/semantic-concepts/probeشغّل سلّم الحسم على نص تشغيلًا تجريبيًا — بماذا سيطابق، وإلى أي مدى
GET/api/semantic-concepts/duplicatesأزواج المفاهيم الواقعة أسفل عتبة الدمج مباشرةً
POST/api/semantic-concepts/importحلّ دفعةً واحدة ملف CSV من نصوص الهويات (يتطلب الإصدار صلاحية المالك)
GET/api/semantic-concepts/exportتصدير المفردات بصيغة CSV
POST/api/semantic-concepts/delete-impactما الذي سيتأثر بحذف المفاهيم — أعداد الاستخدام وتكلفة إعادة المزامنة
GET/api/semantic-concepts/migration/statusحالة ترحيل نموذج التضمين، إن كان هناك ترحيل قيد التشغيل

قياس الأداء والفوترة

الطريقةنقطة النهايةالوصف
GET/api/benchmarksعرض سيناريوهات القياس المرجعي
POST/api/benchmarks/{id}/runشغّل سيناريو عبر عدة نماذج — وتُقيَّم كل نتيجة تلقائيًا
POST/api/benchmarks/{id}/referenceاحفظ المرجع الذهبي الذي يُقيَّم السيناريو وفقه وتحقّق منه
GET/api/billing/balanceالرصيد الحالي
GET/api/billing/transactionsسجل معاملات الأرصدة، بما في ذلك الإنفاق على التضمين
GET/api/billing/plansالخطط المتاحة وحدودها

بث SSE

تستخدم عمليات الإثراء وإنشاء المخطط والدمج تقنية Server-Sent Events لعرض التقدّم في الوقت الفعلي. ابدأ مهمة، واحصل على job_id، ثم اتصل بتدفّق SSE:

تدفق أحداث SSE

data: {"type":"model_started","model":"anthropic::claude-sonnet-4-5"}
data: {"type":"expertise_completed","expertise_key":"financial","partial_result":{...}}
data: {"type":"model_completed","success":true,"result":{...},"record_id":"uuid"}
data: {"type":"completed"}

أنواع الأحداث الرئيسية

الحدثالوصف
model_startedتبدأ معالجة النموذج
expertise_completedانتهى مجال خبرة واحد (بنتائج جزئية)
model_completedأنهى النموذج مع النتيجة وrecord_id والتكلفة
fusion_started / fusion_completedأحداث دورة حياة الدمج متعدد النماذج
entity_started / entity_completedأحداث خاصة بالدفعات لكل كيان (تتضمن entity_index)
completedحدث نهائي - إغلاق الاتصال
errorحدث خطأ على مستوى المهمة

مثال Python

سير عمل كامل يسرد المخططات، ويبدأ الإثراء، ويبثّ النتائج، ويسترجع السجل النهائي:

import httpx
import json

BASE = "https://your-instance.example.com"
KEY = "ent_your_api_key"
HEADERS = {"X-API-Key": KEY, "Content-Type": "application/json"}

# 1. List saved schemas
schemas = httpx.get(f"{BASE}/api/schema/saved", headers=HEADERS).json()
schema_id = schemas["schemas"][0]["id"]

# 2. Start enrichment
resp = httpx.post(f"{BASE}/api/single/enrich/stream", headers=HEADERS, json={
    "entity_data": {"name": "Moderna Inc", "country": "US"},
    "schema_id": schema_id,
    "models": ["anthropic::claude-sonnet-4-5-20250514"],
    "strategy": "multi_expertise",
})
job_id = resp.json()["job_id"]

# 3. Stream SSE events
record_id = None
with httpx.stream("GET", f"{BASE}/api/llm/stream/{job_id}", headers=HEADERS) as stream:
    for line in stream.iter_lines():
        if not line.startswith("data: "):
            continue
        event = json.loads(line[6:])

        if event["type"] == "model_completed" and event.get("record_id"):
            record_id = event["record_id"]
        elif event["type"] == "completed":
            break

# 4. Retrieve the enrichment record
if record_id:
    record = httpx.get(f"{BASE}/api/records/{record_id}", headers=HEADERS).json()
    print(json.dumps(record["structured_output"], indent=2))

مثال curl

ابدأ إثراء دفعة باستخدام نموذجين وابثّ النتائج مباشرةً:

# Start batch enrichment
JOB_ID=$(curl -s -X POST \
  -H "X-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  "$BASE/api/enrichment/batch/start" \
  -d '{
    "entities": [
      {"name": "Pfizer Inc", "country": "US"},
      {"name": "Roche", "country": "CH"}
    ],
    "schema_id": "your-schema-uuid",
    "models": ["anthropic::claude-sonnet-4-5-20250514", "openai::gpt-4o"],
    "strategy": "multi_expertise",
    "arbitration_model": "anthropic::claude-sonnet-4-5-20250514"
  }' | jq -r '.job_id')

# Stream events
curl -N -H "X-API-Key: $KEY" "$BASE/api/llm/stream/$JOB_ID"

# List resulting records
curl -s -H "X-API-Key: $KEY" \
  "$BASE/api/records?type=enrichment&page_size=10" | jq '.records'

معالجة الأخطاء

الحالةالمعنىمثال
200نجاحاكتمل الطلب
400طلب غير صالحمفتاح النموذج غير صالح أو حقل مفقود
401غير مصرّحمفتاح API مفقود أو غير صالح
402الدفع مطلوبحد الخطة أو الرصيد — استُنفدت الحصة، أو عدد النماذج أو اللغات كبير جدًا، أو ميزة غير متاحة في خطتك. ويحمل نص الاستجابة رمزًا قابلًا للقراءة آليًا إلى جانب التفاصيل.
403ممنوعالدور غير كافٍ لهذه النقطة الطرفية
404غير موجودالسجل أو المخطط أو المهمة غير موجود
500خطأ في الخادمفشل داخلي

تتضمن استجابات الخطأ حقل detail يحمل رسالة خطأ مقروءة للبشر. وتحمل إخفاقات الخطة والفوترة (402) إضافةً إلى ذلك جسمًا منظَّمًا يتضمن code ثابتًا — prompt_limit_reached وinsufficient_credits وmodel_limit_exceeded وbenchmarks_not_in_plan — إلى جانب أرقام الحد والاستخدام ذات الصلة، ليتمكن العميل من التفرّع بحسب السبب بدل تحليل النص. وتُصدر تدفقات SSE نوع الحدث error قبل الحدث النهائي completed إذا أخفق شيء أثناء التدفق.

المفاتيح المركبة للنموذج

تُعرَّف النماذج بمفاتيح مركّبة بالصيغة provider_name::model_name. استخدم GET /api/enrichment/options لعرض النماذج المتاحة ومفاتيحها.

معامل النموذج اختياري في الإثراء، وتوليد المخطط، وتوليد العينات: أغفِله (أو مرّر القيمة الحرفية "auto") ليختار الخادم النموذج الافتراضي لمؤسستك — الإعداد الافتراضي المثبّت لكل مهمة إن كان مضبوطًا في الإعدادات، وإلا فالنموذج ذو أفضل نتيجة إجمالية من معايير القياس المصدر للتقييم. يعرض الحقل default_models في استجابة الخيارات ما يحلّ إليه "تلقائي" حاليًا، ويبلّغ حدث SSE من نوع model_auto_selected عن الاختيار في كل مهمة. يحلّ "تلقائي" دائمًا إلى نموذج واحد (ولا يشغّل الدمج أبدًا)؛ ولأجل مسارات قابلة لإعادة الإنتاج، استمر في تمرير نماذج صريحة.

تقيّد خيارات الطلب الاختيار التلقائي: مع enable_web_search: true تُؤخذ في الاعتبار النماذج القادرة على البحث على الويب فقط (يعرض حقل default_models_web_search في استجابة الخيارات معاينةً لهذا الاختيار)، وتتطلب المرفقات الثنائية نموذجًا قادرًا على قراءتها (PDF، الرؤية، الصوت). وعندما لا يستوفي أي نموذج مؤهل القيود، يفشل الطلب بالرمز HTTP 400 no_capable_default_model بدلًا من إسقاط الخيار بصمت.

Anthropic
anthropic::claude-sonnet-4-5-20250514
OpenAI
openai::gpt-4o
Google
google::gemini-2.5-pro
DeepSeek
deepseek::deepseek-chat

وثائق API التفاعلية

يتضمن التطبيق وثائق API تفاعلية مع أمثلة للطلبات/الاستجابات. يتطلب مصادقة المسؤول للوصول:

الخطوات التالية