الوثائق

المطوّرون: خمس دقائق إلى أول رمز

بوابتنا بديل مباشر لواجهة OpenAI. احتفظ بمكتبتك وقوالب مطالباتك واختباراتك — غيّر سطرين وستعمل.

البداية السريعة

ثلاث خطوات: أنشئ مفتاحًا في وحدتك، ضعه في متغير بيئة، ثم استدعِ النموذج.

أنشئ مفتاح API

في وحدتك افتح مفاتيح API ← مفتاح جديد. أعطه اسمًا وحد استخدام وقائمة IP بيضاء وسقف استهلاك.

صدّره

لا تضع المفتاح مباشرة في الشيفرة. استخدم متغير بيئة.

.env
# Any OpenAI-compatible SDK works. Two values change.
export IAALGERIE_API_KEY="iaa_live_xxxxxxxxxxxxxxxxxxxx"
export OPENAI_BASE_URL="https://api.iaalgerie.com/v1"

# default model
export DEFAULT_MODEL="qwen3.7-plus"

استدعِ نموذجًا

وجّه مكتبة OpenAI إلى عنوان خدمتنا واختر معرّف نموذج من الكتالوج.

Python
# pip install openai
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.iaalgerie.com/v1",
    api_key=os.environ["IAALGERIE_API_KEY"],
)

response = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[
        {"role": "system", "content": "Reponds toujours en francais."},
        {"role": "user", "content": "Resume ce contrat en 5 points."},
    ],
    temperature=0.3,
)

print(response.choices[0].message.content)
print("tokens:", response.usage.total_tokens)
Node.js
// npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.iaalgerie.com/v1",
  apiKey: process.env.IAALGERIE_API_KEY,
});

const response = await client.chat.completions.create({
  model: "qwen3.7-plus",
  messages: [
    { role: "system", content: "Reponds toujours en francais." },
    { role: "user", content: "Resume ce contrat en 5 points." },
  ],
});

console.log(response.choices[0].message.content);
cURL
curl https://api.iaalgerie.com/v1/chat/completions \
  -H "Authorization: Bearer $IAALGERIE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.7-plus",
    "messages": [
      {"role": "system", "content": "Reponds toujours en francais."},
      {"role": "user", "content": "Resume ce contrat en 5 points."}
    ],
    "temperature": 0.3
  }'

عنوان الخدمة والمناطق

عنوان واحد لكل النماذج. تختار بوابتنا المنطقة المناسبة حسب النموذج المطلوب.

Endpoints
OpenAI-compatible  https://api.iaalgerie.com/v1
Anthropic format   https://api.iaalgerie.com/anthropic
Native DashScope   https://api.iaalgerie.com/api/v1

One URL for every model. Our gateway selects the upstream region
for you (Singapore, US Virginia or Beijing) — nothing to configure
on your side.

لا شيء تضبطه من جهة المنطقة: هذا عملنا. إن احتجت منطقة محددة لأسباب تنظيمية فأخبرنا.

المصادقة

أرسل مفتاحك في ترويسة Authorization تمامًا مثل OpenAI.

HTTP
Authorization: Bearer iaa_live_xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

جدّد مفاتيحك من وحدتك في أي وقت. يتوقف المفتاح القديم فورًا.

إكمال المحادثة

تعمل بنية المحادثة القياسية من OpenAI كما هي.

cURL
curl https://api.iaalgerie.com/v1/chat/completions \
  -H "Authorization: Bearer $IAALGERIE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.7-plus",
    "messages": [
      {"role": "system", "content": "Reponds toujours en francais."},
      {"role": "user", "content": "Resume ce contrat en 5 points."}
    ],
    "temperature": 0.3
  }'

استخدم qwen3.8-flash للمسودات والتصنيف، وqwen3.7-plus لإجابات المستخدمين، وqwen3.8-max فقط عند الحاجة الفعلية.

البث المباشر

اضبط stream على true واستهلك أحداث الخادم: يرى المستخدم أول كلمة خلال أجزاء من الثانية.

Python
stream = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[{"role": "user", "content": "Ecris un devis pour 3 sites web."}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

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

عرّف أدواتك بالطريقة المعتادة ودع النموذج يقرر متى يستدعيها.

Python
tools = [{
    "type": "function",
    "function": {
        "name": "get_order_status",
        "description": "Retourne le statut d'une commande algerienne.",
        "parameters": {
            "type": "object",
            "properties": {
                "order_id": {"type": "string"},
                "wilaya": {"type": "string"}
            },
            "required": ["order_id"]
        }
    }
}]

messages = [{"role": "user", "content": "Ou est ma commande CMD-4821 ?"}]

while True:
    reply = client.chat.completions.create(
        model="qwen3.7-plus", messages=messages, tools=tools
    ).choices[0].message

    if not reply.tool_calls:
        print(reply.content)
        break

    messages.append(reply)
    for call in reply.tool_calls:
        args = json.loads(call.function.arguments)
        messages.append({
            "role": "tool",
            "tool_call_id": call.id,
            "content": json.dumps({"status": "en livraison", "wilaya": "Bejaia"}),
        })

المخرجات المنظمة

اطلب مخرجات JSON وتحقق منها وفق مخطط. مثالي لاستخراج الحقول من الفواتير والنماذج.

Python
from pydantic import BaseModel

class Invoice(BaseModel):
    supplier: str
    nif: str | None
    total_da: float
    currency: str
    due_date: str | None

raw = "FACTURE SARL Exemple, NIF 0998...1620, total 145 000,00 DA, echeance 30/11/2026"

parsed = client.beta.chat.completions.parse(
    model="qwen3.8-flash",
    messages=[
        {"role": "system", "content": "Extract the invoice fields."},
        {"role": "user", "content": raw},
    ],
    response_format=Invoice,
)

invoice = parsed.choices[0].message.parsed
print(invoice.total_da, invoice.currency)   # 145000.0 DA

الصور والفيديو والصوت

نماذج الوسائط غير متزامنة: تُرسل مهمة ثم تستعلم عن نتيجتها. تُحتسب التكلفة بعد نجاح المهمة.

cURL
# Images — synchronous, billed per image
curl -X POST https://api.iaalgerie.com/v1/images/generations \
  -H "Authorization: Bearer $IAALGERIE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen-image-3.0-pro",
       "prompt": "Photo produit d une bouteille d huile d olive",
       "size": "1024x1024", "n": 2}'

# Video — asynchronous: submit, then poll the task
curl -X POST https://api.iaalgerie.com/v1/services/aigc/video-generation/video-synthesis \
  -H "Authorization: Bearer $IAALGERIE_API_KEY" \
  -H "X-DashScope-Async: enable" \
  -H "Content-Type: application/json" \
  -d '{"model": "wan3.0-video",
       "input": {"prompt": "Tramway d Alger au coucher du soleil"},
       "parameters": {"duration": 5, "size": "1280*720"}}'

# -> {"output": {"task_id": "..."}}  then:
curl https://api.iaalgerie.com/v1/tasks/<task_id> \
  -H "Authorization: Bearer $IAALGERIE_API_KEY"

# Speech to text
curl -X POST https://api.iaalgerie.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $IAALGERIE_API_KEY" \
  -F model="qwen-audio-3.1-asr-flash-filetrans" \
  -F file="@reunion.m4a"

أسعار الوسائط لكل صورة أو ثانية فيديو أو دقيقة صوت — انظر صفحة الأسعار.

التضمين وإعادة الترتيب

ابنِ خط بحث لمستندات عربية وفرنسية وإنجليزية.

Python
# Embeddings: turn your knowledge base into vectors
emb = client.embeddings.create(
    model="text-embedding-v4",
    input=["Politique de retour sous 7 jours", "Frais de livraison Yalidine"],
)
vectors = [d.embedding for d in emb.data]

# Rerank: best candidates first, before the chat call
import dashscope   # pip install dashscope

ranked = dashscope.TextReRank.call(
    model="qwen3-rerank",
    query="Quel est le delai de retour ?",
    documents=["Politique de retour sous 7 jours",
               "Nos horaires d ouverture",
               "Frais de livraison Yalidine"],
    top_n=2,
    return_documents=True,
    api_key=os.environ["IAALGERIE_API_KEY"],
)
print(ranked.output.results[0].document.text)

الأخطاء وحدود الاستخدام

الحالةالمعنىما العمل
400طلب غير صحيحتحقق من معرّف النموذج في الكتالوج.
401مفتاح غير صالح أو ملغىأعد إنشاء المفتاح في وحدتك.
402رصيد غير كافٍاشحن الرصيد أو خفّض سقف المفتاح.
429تم بلوغ حد الاستخدامأعد المحاولة بتراجع أُسّي.
500خطأ في الجهة المزوّدةأعد المحاولة مرة، ثم تواصل مع الدعم مع معرّف الطلب.
503النموذج غير متاح مؤقتًاانتقل إلى نموذج آخر من العائلة نفسها.

كل استجابة تحمل حصتك المتبقية ومعرّف الطلب. سجّل معرّف الطلب — لا يمكن للدعم التحقيق بدونه.

Python
import time
from openai import APIStatusError

def ask(messages, model="qwen3.7-plus"):
    for attempt in range(5):
        try:
            r = client.chat.completions.create(model=model, messages=messages)
            print("request_id:", r._request_id, "tokens:", r.usage.total_tokens)
            return r
        except APIStatusError as e:
            if e.status_code == 429:      # rate limit
                time.sleep(2 ** attempt)
                continue
            if e.status_code == 402:      # insufficient balance
                raise SystemExit("Top up your IA Algerie balance.")
            if e.status_code >= 500:      # upstream hiccup
                time.sleep(1)
                continue
            raise
    raise RuntimeError("rate limited after 5 attempts")

أفضل ممارسات التكلفة

خمس عادات تخفّض فاتورة الذكاء الاصطناعي إلى النصف أو أكثر.

اختر النموذج المناسب

وجّه الطلبات البسيطة إلى Flash، واحفظ نماذج Max للمهام التي تكون فيها الإجابة الخاطئة أغلى من الرموز.

حدّد سقفًا لكل مفتاح

سقف شهري لكل مفتاح يحوّل أي حلقة مفرطة إلى خطأ بسيط.

قلّل حجم مطالباتك

عادةً تكلفة رموز الإخراج أربعة أضعاف الإدخال.

خزّن الجزء الثابت

تخزين السياق يحسب المقدمات المتكررة بسعر مخفّض.

استخدم المعالجة بالدفعات عند السماح

مهام التصنيف والتلخيص والتضمين الليلية لا تحتاج استجابة فورية.

أسئلة المطوّرين

هل أستطيع استخدام مكتبة OpenAI الرسمية؟

نعم. اضبط base_url على نقطة وصولنا وapi_key على مفتاح IA Algérie. لا شيء آخر يتغير.

هل تدعمون صيغة Anthropic؟

نعم، عبر مسار منفصل. مفيد للأدوات التي تتوقع صيغة Anthropic.

أي معرّفات نماذج أثبّتها في الإنتاج؟

ثبّت معرّف إصدار محددًا بدل اسم متغيّر، حتى لا تغيّر أي تحديثات مخرجاتك دون علمك.

هل يوجد بيئة تجريبية مجانية؟

يحصل كل حساب جديد على رصيد تجريبي صغير للتحقق من التكامل قبل الدفع.

كيف أُبلّغ عن استجابة سيئة؟

أرسل معرّف الطلب ومعرّف النموذج إلى الدعم. يمكننا إعادة تنفيذ الطلب وتصعيده.

احصل على مفتاح وجرّبه الليلة

تحصل الحسابات المبكرة على رصيد تجريبي وجلسة تعريفية وخط تيليجرام مباشر.

مرحلة الإطلاق — مكان متبقٍ من 100 للنسخة التجريبية