مرجع 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)

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

الطريقةنقطة النهايةالوصف
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}حذف مرفق (تنظيف بعد الإثراء)

بث 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 مفقود أو غير صالح
403ممنوعالدور غير كافٍ لهذه النقطة الطرفية
404غير موجودالسجل أو المخطط أو المهمة غير موجود
500خطأ في الخادمفشل داخلي

تتضمن استجابات الخطأ حقل detail يحمل رسالة خطأ مقروءة للبشر. وتُصدر تدفقات SSE نوع حدث error قبل الحدث النهائي completed إذا حدث خلل في أثناء التدفق.

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

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

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

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

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

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