الانتقال إلى المحتوى الرئيسي
يُعد AI Chat v2 API (/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 على مستوى كل token، مما يسهل عرضها بشكل منفصل في الواجهة الأمامية وفقًا لنوعها.
  • قابل للمقاطعة / الاستئناف: عندما يحتاج النموذج إلى أن يضيف المستخدم معلومات، فإنه يصدر حدث ask_user_question ويتوقف مؤقتًا؛ ويمكن متابعة العملية في الاستدعاء التالي عبر تعبئة الإجابة باستخدام tool_results.
  • إجراءات CRUD جديدة: يمكنك تنفيذ retrieve / retrieve_batch / update / delete عبر حقل action على نفس نقطة النهاية، دون الحاجة إلى API إضافي لإدارة المحادثات.
  • قائمة نماذج محدّثة باستمرار: تتصل افتراضيًا بنماذج معاصرة مثل GPT-5.4 وClaude Opus 4.8 وClaude Sonnet 4.6 وGemini 3.1 Pro وGLM 5.1 وDeepSeek V4 وKimi K3 وغيرها.
وفي الوقت نفسه، فهو متوافق تمامًا مع v1 على مستوى جسم الطلب: يكفي تمرير model + question (+ اختياريًا stateful / id / references / preset) للحصول على استجابة JSON مكافئة لـ v1 بصيغة {answer, id}. لذلك، لا تحتاج إلى إعادة كتابة العميل عند الترحيل من /aichat/conversations، بل يكفي تغيير المسار إلى /aichat2/conversations.
إذا كنت تستخدم حاليًا /aichat/conversations، فستظل الواجهة القديمة قيد الخدمة، ويمكنك الترحيل وفقًا لوتيرتك الخاصة.

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

لاستخدام AI Chat v2 API، انتقل أولًا إلى وحدة تحكم Ace Data Cloud للحصول على API Token الخاص بك، واحتفظ به للاستخدام لاحقًا. إذا لم تكن قد سجلت الدخول أو أنشأت حسابًا بعد، فسيتم تحويلك تلقائيًا إلى صفحة تسجيل الدخول لدعوتك إلى التسجيل وتسجيل الدخول، وستعود تلقائيًا إلى الصفحة الحالية بعد الإكمال. يمكن لـ API Token واحد استدعاء جميع خدمات المنصة، ولا حاجة إلى التقديم بشكل منفصل لكل خدمة. ستحصل على رصيد مجاني عند أول تقديم، ويمكنك التجربة مجانًا؛ وعندما لا يكفي الرصيد، يمكنك شحن الرصيد العام من وحدة التحكم.
📘 الوثائق الكاملة: AI Chat v2 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-8، 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-preview، gemini-3.1-pro-preview، gemini-3.1-flash-image، gemini-3.1-pro-preview، gemini-2.5-flash-lite وغيرها
  • xAI: grok-4 وغيرها
  • DeepSeek: deepseek-v4-pro، deepseek-v4.1-flash، deepseek-v4-flash، deepseek-v3.2-exp، deepseek-r1-0528 وغيرها
  • Moonshot: kimi-k3.1-pro، kimi-k3، kimi-k2.6، kimi-k2.5 وغيرها
  • Zhipu: glm-5.3، glm-5.2، glm-5.1، glm-5، glm-5-turbo، glm-4.7، glm-4.5v وغيرها
للاطلاع على قواعد التسعير المحددة، راجع بطاقة Pricing في صفحة الخدمة.

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

كما في v1، مرّر stateful: true لتفعيل حفظ المحادثة، وستعيد API قيمة id؛ وفي الطلبات اللاحقة، يكفي إعادة تمرير id لمتابعة المحادثة، دون الحاجة إلى إدارة سجل messages بنفسك. الطلب الأول:
الإرجاع:
الطلب الثاني، أرفق نفس 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 هذا ثم اكتب ملخصًا» → يستدعي النموذج file_read → يكتب ملخصًا.
  • يكون المستخدم قد منح صلاحية لـ Google Drive / GitHub / Notion وغيرها في Connections → يمكن للنموذج استدعاء أدوات MCP المقابلة لقراءة بياناته وكتابتها.
في تدفقات NDJSON / SSE، تظهر استدعاءات الأدوات من خلال نوعي الأحداث tool_use و tool_result، على سبيل المثال:
إذا كنت لا تريد عرض تفاصيل استدعاء الأدوات في الواجهة الأمامية، فتجاهل أنواع الأحداث tool_use / tool_result / card / citation، إذ سيستمر إخراج النموذج النهائي بالتدفق عبر text_delta. يمكن لـ max_turns تقييد الحد الأقصى لعدد الجولات التي يمكن للنموذج فيها استدعاء الأدوات بنفسه ضمن هذا الطلب، ويتراوح من 1 إلى 500، والقيمة الافتراضية عند حذفه هي 500. تعيينه إلى قيمة صغيرة (مثل max_turns: 1) يمكن أن يفرض إجابة واحدة ولا يسمح بأي استدعاء للأدوات.

التنفيذ غير المتزامن والتفويض دون إشراف

إذا كان استدعاؤك يأتي من Webhook للتنبيهات، أو CI/CD، أو نظام مراقبة، أو مهام خلفية أخرى، يمكنك تعيين async: true لكي تُرجع الواجهة فورًا معرّف المهمة، وتتابع التنفيذ في الخلفية:
مثال على الاستجابة:
يمكنك بعد ذلك استخدام action: retrieve + id للاستعلام عن نتيجة المحادثة؛ كما يمكنك توفير callback_url، وبعد اكتمال المهمة سترسل المنصة { status, answer, usage, error } عبر POST إلى عنوان الاستدعاء العكسي الخاص بك. يجب أن يستخدم callback_url بروتوكول http / https، ولا يمكن إدخال localhost أو عنوان IP خاص حرفيًا مباشرة. عادة لا يوجد أحد يمكنه النقر للتأكيد في مهام الخلفية. إذا كنت تريد أن تنفذ بعض Skill أو MCP Server إجراءات مثل الإرسال أو النشر أو الكتابة في الوضع دون إشراف، فيرجى تمرير قائمة التفويض المسبق صراحةً في جسم الطلب:
القيم في allowed_skills هي slug للـ Skill المتصلة؛ والقيم في allowed_mcp_servers هي slug للـ MCP Server المتصلة. تظل Skill / MCP Server غير المدرجة في التفويض المسبق، في الوضع دون إشراف، قادرة فقط على المعاينة أو dry-run أو رفض تنفيذ عمليات الكتابة. إذا كنت بحاجة إلى تحكم أكثر دقة، يمكنك أيضًا استخدام كائن unattended_policy المكافئ:
التفويض المسبق هو هاتان القائمتان بحد ذاتهما: القائمة الفارغة تعني عدم تفويض أي قدرة، ولا حاجة إلى أي حقل تبديل إضافي. ملاحظة: التفويض المسبق يعني فقط أن «هذا الطلب يسمح لهذه القدرات بتجاوز التأكيد البشري في الوضع دون إشراف». لا يزال يجب أن تدعم Skill المحددة --unattended-confirm أو آلية الأمان المقابلة؛ وإلا فستستمر في dry-run ولن تنفذ عمليات الكتابة مباشرة.

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

تجعل بعض الأدوات النموذج «يسأل المستخدم»، وعندها يرسل النموذج حدث 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 على نفس endpoint، دون الحاجة إلى فتح 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، لكن الخادم سيجري تحققًا صارمًا من الـ schema (يجب أن يكون بصيغة ToolUseContent المطوية)، وسيعيد 400 إذا لم يكن مطابقًا. عمومًا، يُنصح باستخدامه فقط لتغيير title.

action: delete —— حذف جلسة

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

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

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

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

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

الخلاصة

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