الانتقال إلى المحتوى الرئيسي
نحن نعلم أن دمج بعض واجهات برمجة التطبيقات للإجابة على الأسئلة في السوق ليس سهلاً نسبيًا، مثل واجهة برمجة التطبيقات الخاصة بـ OpenAI للدردشة، التي تحتوي على حقل messages. إذا أردنا إكمال محادثة مستمرة، نحتاج إلى تمرير كل تاريخ السياق، كما نحتاج أيضًا إلى معالجة مشكلة تجاوز حد الرموز. تقدم AceDataCloud واجهة برمجة تطبيقات الإجابة على الأسئلة بالذكاء الاصطناعي التي تم تحسينها لهذه الحالات، حيث تم تغليف تنفيذ المحادثات المستمرة مع الحفاظ على فعالية الإجابة، مما يعني أنه لا داعي للقلق بشأن تمرير الرسائل أو مشكلة تجاوز حد الرموز (تمت معالجتها تلقائيًا داخل واجهة برمجة التطبيقات). كما توفر أيضًا ميزات استعلام وتعديل المحادثات، مما يبسط عملية الدمج بشكل كبير. ستتناول هذه الوثيقة تعليمات دمج واجهة برمجة تطبيقات الإجابة على الأسئلة بالذكاء الاصطناعي.

عملية التقديم

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

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

أولاً، يجب أن نفهم طريقة الاستخدام الأساسية، وهي إدخال السؤال والحصول على الإجابة، كل ما عليك هو تمرير حقل question وتحديد النموذج المناسب. على سبيل المثال، إذا سألت: “What’s your name؟”، يمكننا بعد ذلك ملء المحتوى المقابل على الواجهة، كما هو موضح في الصورة: يمكنك أن ترى أننا قمنا بتعيين رؤوس الطلب، بما في ذلك:
  • accept: نوع الاستجابة التي ترغب في تلقيها، هنا نكتب application/json، أي بتنسيق JSON.
  • authorization: مفتاح استدعاء واجهة برمجة التطبيقات، يمكنك اختياره مباشرة بعد التقديم.
كما قمنا بتعيين جسم الطلب، بما في ذلك:
  • model: اختيار النموذج، مثل GPT 3.5 أو GPT 4.
  • question: السؤال الذي ترغب في طرحه، يمكن أن يكون نصًا عاديًا.
بعد الاختيار، يمكنك أن تلاحظ أن الجانب الأيمن قد أنشأ الكود المقابل، كما هو موضح في الصورة:

انقر على زر “Try” لإجراء الاختبار، كما هو موضح في الصورة أعلاه، وهنا حصلنا على النتيجة التالية:
{
  "answer": "I am an AI language model developed by OpenAI and I don't have a personal name. However, you can call me GPT or simply Chatbot. How can I assist you today?"
}
يمكنك أن ترى أن النتيجة التي تم إرجاعها تحتوي على حقل answer، وهو إجابة السؤال. يمكنك إدخال أي سؤال، وستحصل على أي إجابة. إذا كنت لا تحتاج إلى دعم أي محادثات متعددة، فإن هذه الواجهة يمكن أن تسهل بشكل كبير عملية الدمج الخاصة بك. بالإضافة إلى ذلك، إذا كنت ترغب في توليد الكود المقابل للدمج، يمكنك نسخه مباشرة، على سبيل المثال، كود CURL كما يلي:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "question": "What's your name?"
}'
كود الدمج بلغة Python كما يلي:
import requests

url = "https://api.acedata.cloud/aichat/conversations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-3.5",
    "question": "What's your name?"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)

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

إذا كنت ترغب في دمج وظيفة المحادثة متعددة الجولات، تحتاج إلى تمرير معلمة إضافية stateful، وقيمتها تكون true، ويجب أن تتضمن كل طلب لاحق هذه المعلمة. بعد تمرير معلمة stateful، ستقوم واجهة برمجة التطبيقات بإرجاع معلمة إضافية id، تمثل معرف المحادثة الحالية، وفيما بعد، كل ما عليك هو تمرير هذا المعرف كمعلمة، مما يسهل تنفيذ المحادثة متعددة الجولات. دعنا نوضح العملية المحددة. في الطلب الأول، قم بتعيين معلمة stateful إلى true، ومرر بشكل طبيعي معلمات model و question، كما هو موضح في الصورة: الكود المقابل كما يلي:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "question": "What's your name?",
  "stateful": true
}'
يمكنك الحصول على الإجابة التالية:
{
  "answer": "I am an AI language model created by OpenAI and I don't have a personal name. You can simply call me OpenAI or ChatGPT. How can I assist you today?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
في الطلب الثاني، قم بتمرير حقل id الذي تم إرجاعه من الطلب الأول كمعلمة، مع الحفاظ على معلمة stateful كـ true، واسأل “What I asked you just now؟”، كما هو موضح في الصورة: الكود المقابل كما يلي:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916",
  "question": "What I asked you just now?"
}'
النتيجة كما يلي:
{
  "answer": "You asked me what my name is. As an AI language model, I do not possess a personal identity, so I don't have a specific name. However, you can refer to me as OpenAI or ChatGPT, the names used for this AI model. Is there anything else I can help you with?",
  "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"
}
يمكنك أن ترى أنه يمكننا الإجابة على الأسئلة بناءً على السياق.

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

تدعم هذه الواجهة أيضًا الاستجابة المتدفقة، وهو أمر مفيد جدًا لدمج الويب، حيث يمكن أن يتيح للويب عرض النتائج حرفيًا. إذا كنت ترغب في الحصول على استجابة متدفقة، يمكنك تغيير معلمة accept في رأس الطلب إلى application/x-ndjson. التعديل كما هو موضح في الصورة، ولكن يجب أن يكون هناك تغييرات في كود الاستدعاء لدعم الاستجابة المتدفقة. بعد تغيير accept إلى application/x-ndjson، ستقوم واجهة برمجة التطبيقات بإرجاع بيانات JSON المقابلة سطرًا بسطر، وعلى مستوى الكود، نحتاج إلى إجراء التعديلات اللازمة للحصول على النتائج سطرًا بسطر. كود استدعاء Python النموذجي:
import requests

url = "https://api.acedata.cloud/aichat/conversations"

headers = {
    "accept": "application/x-ndjson",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "gpt-3.5",
    "stateful": True,
    "id": "7cdb293b-2267-4979-a1ec-48d9ad149916",
    "question": "مرحبًا"
}

response = requests.post(url, json=payload, headers=headers, stream=True)
for line in response.iter_lines():
    print(line.decode())
输出效果如下:
{"answer": "مرحبًا", "delta_answer": "مرحبًا", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا!", "delta_answer": "!", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف", "delta_answer": " كيف", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف يمكن", "delta_answer": " يمكن", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف يمكنني", "delta_answer": "ني", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف يمكنني المساعدة", "delta_answer": " المساعدة", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف يمكنني المساعدة لك", "delta_answer": " لك", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف يمكنني المساعدة لك اليوم", "delta_answer": " اليوم", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
{"answer": "مرحبًا! كيف يمكنني المساعدة لك اليوم؟", "delta_answer": "؟", "id": "7cdb293b-2267-4979-a1ec-48d9ad149916"}
يمكن رؤية أن answer في الاستجابة هو المحتوى الأحدث للإجابة، و delta_answer هو المحتوى الجديد المضاف، يمكنك استخدام النتائج لدمجها في نظامك. JavaScript أيضًا مدعوم، على سبيل المثال، كود الاستدعاء المتدفق لـ Node.js كما يلي:
const axios = require("axios");

const url = "https://api.acedata.cloud/aichat/conversations";
const headers = {
  "Content-Type": "application/json",
  Accept: "application/x-ndjson",
  Authorization: "Bearer {token}",
};
const body = {
  question: "مرحبًا",
  model: "gpt-3.5",
  stateful: true,
};

axios
  .post(url, body, { headers: headers, responseType: "stream" })
  .then((response) => {
    console.log(response.status);
    response.data.on("data", (chunk) => {
      console.log(chunk.toString());
    });
  })
  .catch((error) => {
    console.error(error);
  });
مثال كود Java:
String url = "https://api.acedata.cloud/aichat/conversations";
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"question\": \"مرحبًا\", \"stateful\": true, \"model\": \"gpt-3.5\"}");
Request request = new Request.Builder()
        .url(url)
        .post(body)
        .addHeader("Content-Type", "application/json")
        .addHeader("Accept", "application/x-ndjson")
        .addHeader("Authorization", "Bearer {token}")
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (!response.isSuccessful()) throw new IOException("رمز غير متوقع " + response);
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(response.body().byteStream(), "UTF-8"))) {
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                System.out.println(responseLine);
            }
        }
    }
});
يمكنك إعادة كتابة الكود بلغات أخرى، المبدأ هو نفسه.

نموذج الإعدادات

نعلم أن واجهات برمجة التطبيقات المتعلقة بـ OpenAI تحتوي على مفهوم system_prompt، وهو إعداد نموذج كامل، مثل ما اسمه وما إلى ذلك. هذه واجهة برمجة التطبيقات الخاصة بالأسئلة والأجوبة AI تعرض أيضًا هذه المعلمة، المسماة preset، باستخدامها يمكننا إضافة إعدادات للنموذج، دعنا نجرب مثالاً: هنا نضيف حقل preset إضافي، المحتوى هو أنت فنان محترف، كما هو موضح في الصورة: الكود المقابل كما يلي:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5",
  "stateful": true,
  "question": "ماذا يمكنك مساعدتي؟",
  "preset": "أنت فنان محترف"
}'
نتيجة التشغيل كما يلي:
{
    "answer": "كفنان محترف، يمكنني تقديم مجموعة من الخدمات والمساعدة حسب احتياجاتك المحددة. إليك بعض الطرق التي يمكنني مساعدتك بها:\n\n1. الأعمال الفنية المخصصة: إذا كان لديك رؤية أو فكرة معينة، يمكنني إنشاء أعمال فنية مخصصة لك. يمكن أن تشمل ذلك اللوحات، الرسومات، الفن الرقمي، أو أي وسيلة أخرى تفضلها.\n\n2. القطع المخصصة: إذا كان لديك موضوع أو مفهوم معين في ذهنك، يمكنني إنشاء قطع فنية مخصصة تناسب تفضيلاتك. يمكن أن يكون ذلك للتمتع الشخصي أو كهدية فريدة لشخص مميز.\n\n3. استشارة فنية: إذا كنت بحاجة إلى إرشادات حول اختيار الفن، تصميم الديكور الداخلي، أو كيفية عرض وعرض الفن في مساحتك، يمكنني تقديم نصائح احترافية للمساعدة في تعزيز إحساسك الجمالي وخلق مظهر متماسك."
}
يمكننا أن نرى هنا أننا أخبرنا GPT أنه روبوت، ثم سألناه ماذا يمكنه أن يفعل من أجلنا، ويمكنه أن يتقمص دور الروبوت للإجابة على الأسئلة.

التعرف على الصور

يمكن لهذا AI أيضًا دعم إضافة مرفقات لإجراء التعرف على الصور، من خلال تمرير روابط الصور المقابلة عبر references، على سبيل المثال، لدي هنا صورة لتفاح، كما هو موضح في الصورة: رابط الصورة هو https://cdn.acedata.cloud/ht05g0.png، نقوم بتمريره مباشرة كمعامل references، مع ملاحظة أنه يجب اختيار نموذج يدعم التعرف على الصور، والنموذج المدعوم حاليًا هو gpt-4-vision، لذا الإدخال كما يلي: الكود المقابل كما يلي:
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-4-vision",
  "question": "كم عدد التفاح في الصورة؟",
  "references": ["https://cdn.acedata.cloud/ht05g0.png"]
}'
نتيجة التشغيل كما يلي:
{
  "answer": "يوجد 5 تفاحات في الصورة."
}
يمكننا أن نرى أننا حصلنا بنجاح على نتيجة الإجابة عن الصورة المقابلة.

الأسئلة والأجوبة المتصلة بالإنترنت

تدعم هذه الواجهة أيضًا نماذج متصلة بالإنترنت، بما في ذلك GPT-3.5 وGPT-4، حيث يوجد عملية بحث تلقائية على الإنترنت وتلخيص، يمكننا اختيار النموذج ليكون gpt-3.5-browsing لتجربته، كما هو موضح في الصورة: الكود كما يلي:
```shell
curl -X POST 'https://api.acedata.cloud/aichat/conversations' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "model": "gpt-3.5-browsing",
  "question": "ما هو الطقس في نيويورك اليوم؟"
}'
نتيجة التشغيل كما يلي:
{
  "answer": "الطقس في نيويورك اليوم هو كما يلي:\n- درجة الحرارة الحالية: 16°C (60°F)\n- العظمى: 16°C (60°F)\n- الصغرى: 10°C (50°F)\n- الرطوبة: 47%\n- مؤشر الأشعة فوق البنفسجية: 6 من 11\n- شروق الشمس: 5:42 صباحًا\n- غروب الشمس: 8:02 مساءً\n\nالجو غائم مع احتمال هطول أمطار متقطعة خلال الليل، وفرصة المطر هي 50%.\nلمزيد من التفاصيل، يمكنك زيارة [قناة الطقس](https://weather.com/weather/tenday/l/96f2f84af9a5f5d452eb0574d4e4d8a840c71b05e22264ebdc0056433a642c84).\n\nهل هناك أي شيء آخر تود معرفته؟"
}
يمكنك أن ترى، هنا قام بالبحث تلقائيًا على موقع قناة الطقس، وحصل على المعلومات الموجودة فيه، ثم عاد ليقدم النتائج الحية.
إذا كانت لديك متطلبات أعلى لجودة إجابات النموذج، يمكنك تغيير النموذج إلى gpt-4-browsing، وستكون جودة الإجابة أفضل.