Skip to main content
واجهة برمجة التطبيقات AI Chat v2 (/aichat2/conversations) هي الجيل الجديد من واجهات المحادثة، وهي نسخة مطورة بالكامل من AI Chat API. تعتمد على بساطة الإصدار v1 وإدارة المحادثات متعددة الجولات، مع التوسعات التالية:
  • إدخال متعدد الوسائط: من خلال حقل message المهيكل يمكن إرسال نص + صورة + ملفات مباشرة، دون الحاجة لاستخدام references كمرفقات غير مباشرة.
  • استدعاء الأدوات بنمط الوكيل (Agent): تضم مجموعة أدوات مدمجة للبحث عبر الإنترنت، واستخلاص صفحات الويب، وقراءة الملفات، ويمكن ربط خوادم MCP المصرح بها من المستخدم (مثل Google Drive، Notion، Slack، GitHub)، حيث يمكن للنموذج استدعاء الأدوات ذاتيًا في جولات متعددة ضمن طلب واحد لإتمام مهام معقدة.
  • أحداث متدفقة مهيكلة: عبر accept: text/event-stream أو application/x-ndjson يمكن الحصول على أحداث مثل text_delta، tool_use، tool_result، thinking، citation، card، artifact بشكل متتابع حسب الرموز، مما يسهل العرض في الواجهة الأمامية حسب نوع الحدث.
  • قابلية الإيقاف والاستئناف: عندما يحتاج النموذج لمعلومات إضافية من المستخدم يرسل حدث ask_user_question ويتوقف، ويمكن الاستمرار في الطلب التالي بإعادة ملء الإجابات عبر tool_results.
  • إجراءات CRUD جديدة: يمكن تنفيذ retrieve / retrieve_batch / update / delete عبر نفس نقطة النهاية باستخدام حقل action، دون الحاجة لواجهة إدارة جلسات منفصلة.
  • قائمة نماذج محدثة باستمرار: تشمل النماذج الافتراضية GPT-5.4، Claude Opus 4.7، Claude Sonnet 4.6، Gemini 3.1 Pro، GLM 5.1، DeepSeek V4، Kimi K2.5 وغيرها من النماذج المعاصرة.
كما أن واجهة الطلب متوافقة تمامًا مع الإصدار v1: فقط إرسال model + question (+ اختياري stateful / id / references / preset) يعيد استجابة JSON {answer, id} مكافئة لـ v1، لذلك لا حاجة لإعادة كتابة العميل عند الانتقال من /aichat/conversations إلى /aichat2/conversations.
إذا كنت تستخدم حاليًا /aichat/conversations، ستظل الواجهة القديمة متاحة، ويمكنك الترحيل بوتيرتك الخاصة.

إجراءات التقديم

لاستخدام API، يجب التقديم أولاً عبر صفحة AI Chat v2 API، بعد الدخول اضغط زر “Acquire” للحصول على بيانات الاعتماد اللازمة للطلبات. إذا لم تكن مسجلاً أو مسجلاً دخولك، سيتم تحويلك تلقائيًا إلى صفحة تسجيل الدخول، وبعد التسجيل والدخول ستعود تلقائيًا إلى الصفحة الحالية. عند التقديم لأول مرة، ستحصل على رصيد مجاني لاستخدام API.

الاستخدام الأساسي

أسهل طريقة استخدام مماثلة تمامًا لـ v1: إرسال model + question والحصول على {answer, id}. مثال CURL:
الاستجابة:
مثال Python:
نماذج model المتاحة يمكن رؤيتها مباشرة في لوحة Try على الجانب الأيمن، الفئات الشائعة تشمل:
  • OpenAI: gpt-5.4-mini، gpt-5.4-nano، gpt-5.2-pro، gpt-5.1-all، gpt-5-all، gpt-4.1، gpt-4o، gpt-4o-image، o3، o4-mini وغيرها
  • Anthropic: claude-opus-4-7، claude-opus-4-6، claude-opus-4-5-20251101، claude-sonnet-4-6، claude-sonnet-4-5-20250929، claude-haiku-4-5-20251001 وغيرها
  • Google: gemini-3.1-pro، gemini-3.1-pro-preview، gemini-3.1-flash-image-preview، gemini-3-pro-preview، gemini-2.5-flash-lite وغيرها
  • xAI: grok-4، grok-4-1-fast، grok-4-1-fast-reasoning، grok-3-mini-fast وغيرها
  • DeepSeek: deepseek-v4-flash، deepseek-v3.2-exp، deepseek-r1-0528 وغيرها
  • Moonshot: kimi-k2.5، kimi-k2-thinking، kimi-k2-thinking-turbo وغيرها
  • Zhipu: glm-5.1، glm-5، glm-5-turbo، glm-4.7، glm-4.5v وغيرها
يرجى مراجعة بطاقة التسعير في صفحة الخدمة لمعرفة قواعد الفوترة التفصيلية.

المحادثات متعددة الجولات

كما في v1، إرسال stateful: true يفعل حفظ الجلسة، وستعيد API معرف id؛ في الطلبات التالية ترسل نفس id لاستكمال المحادثة دون الحاجة لإدارة تاريخ الرسائل بنفسك. الطلب الأول:
الاستجابة:
الطلب الثاني مع نفس id:
الاستجابة:
القيمة الافتراضية لـ stateful هي true، حذفها أو إرسالها صراحة كـ true متساويان. إذا كنت لا تريد حفظ المحادثة على الخادم، يمكنك تعيين stateful: false صراحة.

الاستجابة المتدفقة

يدعم الإصدار v2 نوعي تدفق حسب رأس accept:

مثال NDJSON

كل سطر NDJSON هو حدث مهيكل، الأكثر شيوعًا هو text_delta:

مثال SSE

متصفحات الويب تستخدم EventSource التي لا تدعم جسم طلب مخصص، يُنصح باستخدام fetch مع تحليل يدوي حسب \n\n:

أنواع أحداث التدفق

لعملاء يهتمون فقط بالنتيجة النهائية، يمكن تجميع كل content من أحداث text_delta ليكون مكافئًا لـ answer في وضع application/json.

الإدخال متعدد الوسائط

إذا كان إدخال المستخدم يحتوي على صور أو ملفات، استخدم message (مصفوفة) بدلاً من question. كل عنصر في المصفوفة هو كتلة محتوى:
أنواع الكتل المدعومة:
  • text — نص عادي، الحقل الإلزامي text.
  • image_url — صورة، الحقل الإلزامي image_url.url.
  • file_url — ملف (PDF، CSV، TXT، إلخ)، الحقل الإلزامي file_url.url.

العلاقة مع references في v1

للتوافق مع العملاء القدامى، v2 لا تزال تدعم حقل references: ["https://...", ...]:
  • إذا كان امتداد URL من jpg / jpeg / png / gif / bmp / webp / svg / heic / heif، يتحول تلقائيًا إلى كتلة image_url.
  • الامتدادات الأخرى تتحول إلى كتلة file_url.
  • إذا تم توفير question أيضًا، يتم إضافته ككتلة text في البداية.
لذلك، إذا كنت تريد الترحيل من v1 دون تعديل جسم الطلب، فقط غيّر المسار إلى /aichat2/conversations وسيعمل references كما هو. للسيطرة الدقيقة (مثلاً وضع عدة صور بين نصوص أو ترتيب معين)، استخدم مصفوفة message مباشرة.

استدعاء الأدوات و MCP

أحد التحسينات الأساسية في v2 هو قدرة النموذج على استدعاء الأدوات ذاتيًا لإتمام مهام متعددة الخطوات، وهو مفعل افتراضيًا، ولا يحتاج العميل لأي إعداد إضافي في الطلب. السيناريوهات الشائعة:
  • المستخدم يسأل: “ساعدني في البحث عن المعارض الجديدة في شنغهاي” → النموذج يستدعي أداة البحث على الويب → ينظم النتائج ويرد.
  • المستخدم يطلب: “اقرأ هذا PDF ثم اكتب ملخصًا” → النموذج يستدعي أداة قراءة الملفات → يكتب الملخص.
  • المستخدم ربط حساباته في Connections مثل Google Drive / GitHub / Notion → النموذج يستدعي أدوات MCP المقابلة لقراءة وكتابة البيانات.
في تدفقات NDJSON / SSE، تظهر استدعاءات الأدوات عبر أحداث tool_use و tool_result، مثال:
إذا كنت لا تريد عرض تفاصيل استدعاء الأدوات في الواجهة، يمكنك تجاهل أحداث tool_use / tool_result / card / citation، وسيظل المخرج النهائي للنموذج عبر text_delta. يمكن تحديد max_turns للحد من عدد جولات استدعاء الأدوات ضمن الطلب، والحد الأقصى الافتراضي تحدده المنصة. تعيين قيمة صغيرة (مثلاً max_turns: 1) يجبر الرد على أن يكون مرة واحدة بدون استدعاء أدوات.

استئناف المحادثة الموقوفة

بعض الأدوات قد تجعل النموذج “يسأل المستخدم” لاستكمال المعلومات، حينها يرسل النموذج حدث ask_user_question ويتجمد الحوار في حالة awaiting_user_input:
في الواجهة، يتم عرض هذا الحدث كبطاقة للاختيار، ثم ترسل الطلب التالي بنفس id مع ملء الإجابة في tool_results:
يجب أن يكون tool_use_id في الطلب مطابقًا تمامًا لـ tool_id في حالة الإيقاف؛ عدم التطابق يعيد خطأ 400. عند وجود tool_results في الطلب، يتم تجاهل question / message / references. إذا قرر المستخدم تخطي السؤال، يمكن إرسال question أو message جديد، وستعتبر المنصة استدعاء الأداة الموقوفة “تخطي المستخدم”.

إدارة المحادثات (CRUD)

v2 توفر إدارة جلسات خفيفة عبر نفس نقطة النهاية باستخدام حقل action، دون الحاجة لواجهة API منفصلة.

action: retrieve — استرجاع محادثة واحدة

تعيد وثيقة المحادثة كاملة (بما في ذلك تاريخ messages، model، title، tools_used، وغيرها).

action: retrieve_batch — قائمة ملخصات المحادثات

تعيد { items: [...], total }. الملخصات لا تحتوي على messages، مناسبة لقائمة جانبية؛ عند اختيار محادثة يتم استدعاء action: retrieve لاسترجاع تفاصيلها. معايير التصفية الاختيارية: user_id، application_id، model_group، model.

action: update — تعديل العنوان أو إعادة كتابة التاريخ

يمكن أيضًا إرسال messages، لكن الخادم يقوم بفحص صارم للهيكل (يجب أن يكون في شكل ToolUseContent مطوي)، وإلا يعيد خطأ 400. عادة يُنصح باستخدامه فقط لتعديل title.

action: delete — حذف محادثة

تعيد { id, success: true }. الحذف نهائي ولا يمكن التراجع عنه، يرجى التأكد قبل التنفيذ.

الترحيل السلس من v1

إذا كنت تستخدم /aichat/conversations، الترحيل إلى v2 لا يتطلب تعديل كبير:
  1. غيّر عنوان URL من https://api.xhuoapi.ai/v1/aichat/conversations إلى https://api.xhuoapi.ai/v1/aichat2/conversations.
  2. إذا كنت تستخدم أسماء نماذج v1 (مثل gpt-3.5، gpt-4-browsing)، يُنصح بالترقية إلى نماذج معاصرة في v2 (مثل gpt-5.4، claude-opus-4-7، gemini-3.1-pro).
  3. تدفق NDJSON يحتفظ بالتوافق الخلفي: كل حدث text_delta لا يزال يحمل delta_answer و id، لذا لا حاجة لتعديل عملاء تحليل delta_answer.
بعد الترحيل يمكن تفعيل ميزات v2 الجديدة حسب الحاجة (إدخال متعدد الوسائط message، SSE، استدعاء الأدوات، CRUD عبر action) تدريجيًا.

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

استجابة الخطأ موحدة:
الأخطاء الشائعة:
  • 400 bad_request: نقص حقول إلزامية، عدم تطابق tool_use_id، بنية messages غير صحيحة، إلخ.
  • 401 invalid_token: رأس authorization غير صحيح.
  • 404 not_found: عند action: retrieve / update / delete، المعرف id غير موجود.
  • 429 too_many_requests: تجاوز حد المعدل.
  • 500 chat_error: خطأ في LLM الأعلى أو completion_tokens=0 (يعتبر عدم استهلاك ولا يتم فرض رسوم).
في الاستجابات المتدفقة، يتم إرسال الخطأ كحدث {"type":"error","message":"..."} يليها انتهاء التدفق.

الخلاصة

واجهة API AI Chat v2 تحافظ على التوافق مع v1، وترتقي بالمحادثات من “سؤال وجواب في جولة واحدة / متعددة” إلى “محادثات قابلة للمراقبة بنمط الوكيل”: إدخال متعدد الوسائط، استدعاء أدوات، إمكانية الإيقاف والاستئناف، أحداث متدفقة مهيكلة، وإدارة CRUD مدمجة. نوصي باستخدام v2 مباشرة للمشاريع الجديدة؛ وللمشاريع القائمة يمكن الترحيل تدريجيًا بسلاسة. لأي استفسارات، يرجى التواصل مع فريق الدعم الفني لدينا.