تتيح لك واجهة REST API الخاصة بـ Entity Enricher إثراء الكيانات وإدارة المخططات واسترجاع السجلات برمجيًا. جميع الاستجابات بصيغة JSON. يستخدم التقدم في الوقت الفعلي أحداث الخادم المُرسَلة (SSE).
ادمج Entity Enricher في ثلاث خطوات:
GET /api/schema/savedعرض المخططات المحفوظة أو توليد واحد من بيانات عيّنة
POST /api/single/enrich/streamابدأ الإثراء واحصل على معرّف مهمة لبثّ SSE
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} | حذف مرفق (تنظيف بعد الإثراء) |
تستخدم عمليات الإثراء وإنشاء المخطط والدمج تقنية Server-Sent Events لعرض التقدّم في الوقت الفعلي. ابدأ مهمة، واحصل على job_id، ثم اتصل بتدفّق SSE:
| الحدث | الوصف |
|---|---|
| model_started | تبدأ معالجة النموذج |
| expertise_completed | انتهى مجال خبرة واحد (بنتائج جزئية) |
| model_completed | أنهى النموذج مع النتيجة وrecord_id والتكلفة |
| fusion_started / fusion_completed | أحداث دورة حياة الدمج متعدد النماذج |
| entity_started / entity_completed | أحداث خاصة بالدفعات لكل كيان (تتضمن entity_index) |
| completed | حدث نهائي - إغلاق الاتصال |
| error | حدث خطأ على مستوى المهمة |
سير عمل كامل يسرد المخططات، ويبدأ الإثراء، ويبثّ النتائج، ويسترجع السجل النهائي:
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))ابدأ إثراء دفعة باستخدام نموذجين وابثّ النتائج مباشرةً:
# 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::claude-sonnet-4-5-20250514openai::gpt-4ogoogle::gemini-2.5-prodeepseek::deepseek-chatيتضمن التطبيق وثائق API تفاعلية مع أمثلة للطلبات/الاستجابات. يتطلب مصادقة المسؤول للوصول: