alawadi.cloudمستندات

البدء السريع

أنشئ مفتاح API من البوابة وأرسل أول طلب محادثة عبر curl أو Python أو JavaScript، بما في ذلك البثّ.

1. أنشئ مفتاح API

افتح صفحة الذكاء الاصطناعي في البوابة (/dashboard/ai) واضغط مفتاح API جديد.

سمِّ المفتاح باسم التطبيق أو البيئة التي ستستخدمه (مثل production-backend)، وحدّد مدة صلاحية اختيارية (من 1 إلى 365 يوماً)، ثم اضغط إنشاء المفتاح.

انسخ المفتاح الكامل sk-alwd-… الآن: يظهر مرة واحدة فقط. نحتفظ ببصمته (hash) لا بالمفتاح نفسه؛ إذا فقدته، أبطِله وأنشئ مفتاحاً جديداً.

خزّن المفتاح في متغيّر بيئة، لا داخل الكود:

export ALAWADI_AI_KEY="sk-alwd-..."

2. أرسل طلبك الأول

الواجهة متوافقة مع OpenAI: أبقِ كودك والـ SDK كما هما، وبدّل فقط الـ Base URL والمفتاح.

curl https://ai.alawadi.cloud/v1/chat/completions \
  -H "Authorization: Bearer $ALAWADI_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5-7b-instruct",
    "messages": [
      {"role": "user", "content": "مرحبا! عرّف عن نفسك بجملة واحدة."}
    ]
  }'
# pip install openai
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://ai.alawadi.cloud/v1",
    api_key=os.environ["ALAWADI_AI_KEY"],
)

resp = client.chat.completions.create(
    model="qwen2.5-7b-instruct",
    messages=[
        {"role": "user", "content": "مرحبا! عرّف عن نفسك بجملة واحدة."}
    ],
)
print(resp.choices[0].message.content)
// npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://ai.alawadi.cloud/v1",
  apiKey: process.env.ALAWADI_AI_KEY,
});

const resp = await client.chat.completions.create({
  model: "qwen2.5-7b-instruct",
  messages: [
    { role: "user", content: "مرحبا! عرّف عن نفسك بجملة واحدة." },
  ],
});
console.log(resp.choices[0].message.content);

كل ردّ يحمل كائن usage بعدد التوكنات الدقيق المحسوب على خوادمنا، وهذا بالضبط ما تُفوتَر عليه:

"usage": {
  "prompt_tokens": 21,
  "completion_tokens": 38,
  "total_tokens": 59
}

3. فعّل البثّ

مرّر "stream": true لتستلم التوكنات أولاً بأول أثناء توليدها. البثّ (streaming) هو الوضع المنصوح به لكل ما يظهر للمستخدم، لأن الطلبات غير المتدفّقة تنتهي مهلتها على الخادم بعد 90 ثانية. ويتضمّن آخر جزء في البثّ دائماً كائن usage (نفعّل ذلك من جهتنا)، فتحصل على العدد الدقيق في الحالتين.

curl -N https://ai.alawadi.cloud/v1/chat/completions \
  -H "Authorization: Bearer $ALAWADI_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5-7b-instruct",
    "stream": true,
    "messages": [
      {"role": "user", "content": "مرحبا! عرّف عن نفسك بجملة واحدة."}
    ]
  }'
stream = client.chat.completions.create(
    model="qwen2.5-7b-instruct",
    stream=True,
    messages=[
        {"role": "user", "content": "مرحبا! عرّف عن نفسك بجملة واحدة."}
    ],
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:  # final chunk, exact token counts
        print(f"\n-- {chunk.usage.total_tokens} tokens")
const stream = await client.chat.completions.create({
  model: "qwen2.5-7b-instruct",
  stream: true,
  messages: [
    { role: "user", content: "مرحبا! عرّف عن نفسك بجملة واحدة." },
  ],
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
  if (chunk.usage) console.log(`\n-- ${chunk.usage.total_tokens} tokens`);
}

فضّل البثّ للردود الطويلة

الطلبات غير المتدفّقة تنتهي مهلتها على الخادم بعد 90 ثانية. للمدخلات الطويلة أو الردود الطويلة، فعّل دائماً "stream": true.

استدعِ أداة

يدعم النموذج استدعاء الأدوات (tool/function calling) بأسلوب OpenAI: مرّر مصفوفة tools، وحين يقرّر النموذج استخدام إحداها يعود الردّ ومعه tool_calls لينفّذها كودك. استخدمه بدون بثّ ("stream": false)؛ فهذا هو المسار المدعوم والموثوق.

curl https://ai.alawadi.cloud/v1/chat/completions \
  -H "Authorization: Bearer $ALAWADI_AI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen2.5-7b-instruct",
    "stream": false,
    "messages": [
      {"role": "user", "content": "ما حالة الطقس في دمشق؟"}
    ],
    "tools": [{
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get the current weather for a city",
        "parameters": {
          "type": "object",
          "properties": {"city": {"type": "string"}},
          "required": ["city"]
        }
      }
    }]
  }'
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get the current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

resp = client.chat.completions.create(
    model="qwen2.5-7b-instruct",
    stream=False,
    messages=[{"role": "user", "content": "ما حالة الطقس في دمشق؟"}],
    tools=tools,
)

call = resp.choices[0].message.tool_calls[0]
print(call.function.name)       # get_weather
print(call.function.arguments)  # {"city": "Damascus"}
# Run the function yourself, then send the result back as a
# {"role": "tool", "tool_call_id": call.id, "content": "..."} message.

استخدم وضع بدون بثّ مع الأدوات

استدعاء الأدوات مدعوم ومُختبَر في وضع بدون بثّ. ابثّ المحادثة العادية للنص الذي يظهر للمستخدم، لكن اضبط "stream": false عند تمرير tools لتحصل بموثوقية على tool_calls المنظَّمة.

الخطوة التالية: النماذج والأسعار · الفوترة والاستخدام · الحدود والأخطاء.

في هذه الصفحة