فهم استجابة JSON
تعيد التقديرات الفردية في GenderAPI.io V2 كائن data للنتيجة وكائن meta لمعلومات الطلب والوصول والخصم. اقرأ data.gender وdata.confidence مع data.confidence_kind وdata.source. مثال مجموعة البيانات التالي استجابة حقيقية جرى الحصول عليها في 1 أكتوبر 2026 باستخدام مفتاح API، ولم يُستبدل فيها سوى رصيد الحساب. وهو لا يمثّل دقة مقيسة للمنتج، وقد يعيد طلب حي نتيجة مختلفة. تُظهر الطلبات التي تستخدم مفتاح API القيمة access.mode: api_key وقيمة null في حقول الحصة الخاصة بالتجربة؛ أما طلبات التجربة حسب عنوان IP فتُظهر ip_trial مع حد التجربة ووقت إعادة التعيين.
{
"data": {
"input": {
"type": "name",
"value": "محمد",
"country": "SA"
},
"name": "محمد",
"gender": "male",
"country": "SA",
"confidence": 0.9850187265917603,
"confidence_kind": "observed_frequency",
"sample_count": 1869,
"source": "dataset",
"result_status": "identified",
"reason": null,
"country_source": "dataset",
"match": {
"name": "محمد",
"method": "normalized",
"scope": "country",
"country": "SA"
}
},
"meta": {
"request_id": "64092cee-096a-4ae9-abc9-53addc430187",
"duration_ms": 9,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}حقول استجابة التقدير
| الحقل | النوع | يمكن أن يكون null | مثال | الوصف |
|---|---|---|---|---|
data.input | object | لا | {"type":"name","value":"محمد","country":"SA"} | نوع الإدخال والقيمة والدولة. يُضمَّن forceToGenderize عندما تكون قيمته true. |
data.name | string | نعم | "محمد" | الاسم الأول المطابق أو المستخرج؛ وnull إذا لم يتوفر. |
data.gender | string | نعم | "male" | male أو female أو JSON null. تقدير، وليس هوية شخصية موثَّقة. |
data.result_status | string | لا | "identified" | identified عند إعادة جنس؛ وإلا unknown. |
data.reason | string | نعم | null | null للنتائج identified. أسباب unknown: not_found أو no_name_candidate أو ambiguous أو insufficient_evidence. |
data.confidence | number | نعم | 0.95 | قيمة من 0 إلى 1 أو null. إذا كان gender هو null، فدرجة الثقة null أيضًا. |
data.confidence_kind | string | نعم | "observed_frequency" | observed_frequency: العدد الغالب في مجموعة البيانات مقسومًا على الإجمالي. model_reported: قيمة يقدّمها الذكاء الاصطناعي، وليست احتمالًا معايرًا. null إذا لم تتوفر. |
data.sample_count | integer | نعم | 1200 | حجم العينة في مجموعة البيانات أو null. لا يختلق الذكاء الاصطناعي عددًا للعينات. |
data.source | string | لا | "dataset" | dataset أو ai أو none. |
data.country | string | نعم | "SA" | ارتباط بدولة مصدره dataset أو ai_association، أو null. لا يحدد الجنسية أو مكان الإقامة أو الأصل العرقي. |
data.country_source | string | نعم | "dataset" | مصدر الارتباط بالدولة: dataset أو ai_association أو null. |
data.match | object | لا | {"name":"محمد","method":"normalized","scope":"country","country":"SA"} | الاسم المطابق في مجموعة البيانات، والطريقة (normalized أو token أو substring أو model_inference)، والنطاق country أو global، والدولة المطابقة. الأدلة غير المتوفرة قيمتها null. |
حقول الإدخال المُعادة
| الحقل | النوع | يمكن أن يكون null | مثال | الوصف |
|---|---|---|---|---|
data.input.type | string | لا | "name" | فئة الإدخال: name أو email أو username. |
data.input.value | string | لا | "محمد" | القيمة المُرسلة للتقدير. |
data.input.country | string | نعم | "SA" | سياق الدولة المُرسل؛ وnull إذا حُذف. |
data.input.forceToGenderize | boolean | لا | true | لا يظهر إلا عند تفعيل وضع الأسماء المستعارة؛ ويُحذف في غير ذلك. |
حقول المطابقة في مجموعة البيانات
| الحقل | النوع | يمكن أن يكون null | مثال | الوصف |
|---|---|---|---|---|
data.match.name | string | نعم | "محمد" | المرشح المختار من مجموعة البيانات؛ وnull إذا لم يُختر أي صف من مجموعة البيانات. |
data.match.method | string | نعم | "normalized" | normalized أو token أو substring أو model_inference؛ وnull إذا لم يتوفر. |
data.match.scope | string | نعم | "country" | country أو global لعمليات البحث في مجموعة البيانات؛ وnull للذكاء الاصطناعي أو عند غياب الأدلة. |
data.match.country | string | نعم | "SA" | دولة الصف المختار في مجموعة البيانات؛ وnull للصفوف العامة أو للذكاء الاصطناعي. |
البيانات الوصفية للوصول والخصم والطلب
| الحقل | النوع | يمكن أن يكون null | مثال | الوصف |
|---|---|---|---|---|
meta.request_id | string | لا | "550e8400-e29b-41d4-a716-446655440000" | معرّف فريد لمحاولة HTTP هذه؛ ويُرسل أيضًا في X-Request-ID. |
meta.duration_ms | integer | لا | 42 | مدة معالجة الطلب بالمللي ثانية. |
meta.access.mode | string | لا | "api_key" | api_key أو ip_trial أو unauthenticated. عند استخدام حساب مدفوع، تحقّق من ظهور api_key. |
meta.access.reason | string | نعم | null | سبب الانتقال إلى التجربة حسب عنوان IP: api_key_missing أو api_key_invalid أو api_key_not_found؛ وإلا null. |
meta.usage.charged_credits | integer | نعم | 1 | صافي الأرصدة المخصومة. صفر قبل الخصم أو بعد استرداد كامل مؤكد؛ وnull إذا لم يُؤكَّد الخصم. |
meta.usage.remaining_credits | integer | نعم | 99 | الرصيد عند اكتمال العملية. قد يكون سالبًا؛ وnull إذا لم يتوفر أو لم يُؤكَّد الخصم. |
meta.usage.billing_status | string | لا | "confirmed" | not_charged أو confirmed أو unconfirmed. تحقّق منه قبل إعادة محاولة تقدير فاشل. |
meta.usage.resets_at | string | نعم | "2026-09-27T12:00:00.000Z" | موعد تجديد التجربة حسب عنوان IP بتوقيت UTC (ISO 8601)؛ وnull لحسابات مفاتيح API أو إذا كان غير معروف. |
meta.usage.limit | integer | نعم | 10 | حصة التجربة حسب عنوان IP؛ وnull لحسابات مفاتيح API. |
meta.usage.period_seconds | integer | نعم | 86400 | مدة فترة التجربة حسب عنوان IP بالثواني؛ وnull لحسابات مفاتيح API. |
نتيجة غير معروفة ناجحة
يعني HTTP 200 أن العملية اكتملت، لكنه لا يضمن وجود جنس. احتفظ بقيمة JSON null بدلًا من تحويلها إلى male أو female أو سلسلة فارغة أو درجة ثقة صفرية. تحقّق من data.result_status وdata.reason بمعزل عن أخطاء HTTP.
يعيد هذا المثال الحقيقي، القائم على مجموعة البيانات فقط والذي جرى الحصول عليه في 1 أكتوبر 2026، source: none وreason: not_found، وتكلفته مع ذلك رصيد واحد. قد يعيد صف متعادل في مجموعة البيانات reason: ambiguous مع الاحتفاظ بقيمة sample_count. وتستخدم النتيجة غير المعروفة من الذكاء الاصطناعي source: ai وreason: insufficient_evidence.
{
"data": {
"input": {
"type": "name",
"value": "zzzxxyy",
"country": null
},
"name": null,
"gender": null,
"country": null,
"confidence": null,
"confidence_kind": null,
"sample_count": null,
"source": "none",
"result_status": "unknown",
"reason": "not_found",
"country_source": null,
"match": {
"name": null,
"method": null,
"scope": null,
"country": null
}
},
"meta": {
"request_id": "54fdcd4e-f8bc-4224-918f-3a5732e08b9c",
"duration_ms": 10,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}تفسير درجة الثقة وأدلة المطابقة
درجة الثقة 0.9 مُعبَّر عنها على مقياس من 0 إلى 1. في observed_frequency، تعني العدد الغالب مقسومًا على إجمالي الصف المختار في مجموعة البيانات؛ وهي ليست دقة المنتج المقيسة من البداية إلى النهاية. أما قيمة model_reported فيقدّمها الذكاء الاصطناعي، وهي غير معايرة على تكرارات مجموعة البيانات.
حدّد عتبات تطبيقك بناءً على بيانات التقييم الخاصة بك وعلى confidence_kind. لا تضع قيم مجموعة البيانات وقيم الذكاء الاصطناعي في ترتيب واحد كأنها تقيس الشيء نفسه. في نتائج الذكاء الاصطناعي، تكون قيمة match.name وmatch.scope وmatch.country هي null لأنه لم يُختر أي صف من مجموعة البيانات؛ وقيمة match.method هي model_inference.
في الأسماء الكاملة، قد تأتي نتيجة مجموعة البيانات من أحد أجزاء الاسم بدلًا من السلسلة كاملة. يحتفظ data.input بالقيمة المُرسلة؛ ويصف data.name الاسم المُعاد، ويصف data.match المرشح ونطاق البحث.
تحديد ما يجب أن يفعله تطبيقك
تعامل أولًا مع أخطاء الطلب وأخطاء العناصر المنفردة، ثم تحقّق من result_status. في التقدير الفردي اقرأ data؛ وفي الطلب المجمّع طبّق القرار نفسه على data في كل عنصر ناجح. احتفظ بالنتائج غير المعروفة في تطبيقك بدلًا من فرض التصنيف male أو female.
| النتيجة | ماذا تعني | المعالجة الموصى بها |
|---|---|---|
| identified; gender: male أو female | أعاد التقدير جنسًا، استنادًا إلى مجموعة البيانات أو إلى الذكاء الاصطناعي. | طبّق قاعدة جرى تقييمها لهذا confidence_kind تحديدًا؛ واحتفظ بـ source وبأدلة المطابقة. |
| unknown; reason: not_found | لا يطابق أي سجل مخزَّن في مجموعة البيانات المرشحين المستخرجين. | اترك gender على null. الطلب الجديد المقصود بخيارات ذكاء اصطناعي أخرى عملية مدفوعة جديدة. |
| unknown; reason: no_name_candidate | لم ينتج تفسير المُدخل لمجموعة البيانات مرشحًا صالحًا للاسم. | احتفظ بقيمة null؛ وتحقّق من نوع الإدخال والقيمة قبل اختيار تقدير إضافي. |
| unknown; reason: ambiguous | للصف المختار في مجموعة البيانات العدد نفسه من الإناث والذكور؛ وقد تظل sample_count موجودة. | لا تقرر بنفسك أي جنس هو الصحيح، ولا تحوّل درجة الثقة null إلى صفر. |
| unknown; reason: insufficient_evidence | أكمل الذكاء الاصطناعي الطلب دون أدلة كافية لإعادة جنس. | تعامل معها كنتيجة غير معروفة مكتملة، لا كخطأ لدى مزوّد الخدمة ولا كحالة لإعادة المحاولة التلقائية. |
| Problem Details أو error لعنصر | فشل التنفيذ، مثلًا بسبب ai_upstream_error أو prediction_timeout. | احفظ رمز الخطأ ومعرّف الطلب، وتحقّق من الخصم، واتبع إرشادات إعادة المحاولة. |
اختيار العتبات بناءً على تقييمك الخاص
لا توجد عتبة عامة لدرجة الثقة تجعل التقدير صحيحًا. قيّم observed_frequency وmodel_reported كلًّا على حدة، باستخدام أمثلة ممثِّلة مصنَّفة بشكل مستقل من حالة الاستخدام الخاصة بك. التكرار في مجموعة البيانات والقيمة التي يقدّمها الذكاء الاصطناعي إشارتان مختلفتان، حتى عندما تكون قيمة كل منهما 0.9. قِس عدد المرات التي تعطي فيها قاعدتك إجابة، وعدد المرات التي تكون فيها هذه الإجابات صحيحة؛ وفي بقية الحالات احتفظ بنتيجة غير معروفة أو خطّط لمراجعة يدوية.
على سبيل المثال، إذا كانت قيمة result_status هي identified وقيمة confidence_kind هي model_reported، فطبّق القاعدة التي قيّمتها للذكاء الاصطناعي، لا عتبة مجموعة البيانات. إذا استُخدم forceToGenderize، فإن name: null مع جنس غير null نتيجة صالحة: إذ يمكن تفسير اسم مستعار دون استخراج اسم أول حقيقي. تحقّق من gender وresult_status، لا من name وحده، لتعرف هل أعطى التقدير إجابة. تظل النتيجة تقديرًا، وليست تأكيدًا لهوية شخص.