اللغةالعربية

AI Gateway

استخدم حسابات AI المرتبطة بـ AirCode Ø الخاص بك من تطبيقاتك الشخصية. إرسال Base URL، تطبيق منفصل، و نموذج دقيق ID. يدعو الوثيقة إلى مزودها المتصل CLI ويدفع الإجابة من خلال مجموعة متنوعة من التكلفة للتكلفة للرسالة و مجموعة متنوعة من الصور للتكلفة.

Your application's backend
  → your instance URL + application token
    → a connected native provider account
      → validated answer + available usage counters

موقع الويب يضم فقط وثائق. طلبات API تذهب مباشرة إلى الحالة الخاصة بك؛ aircodezero.com لا يحصل على عنوان الحالة الخاصة بك، أو تيمك أو الإشارات. تستخدم هذه الخدمة فقط لبرنامجك الخاص و حساباتك. لا تزال شروط الموردين والمواصفات والمواصفات متاحة.

إعداد الحالة

  1. اتصال حساب المورد الأمامي متوافق في AI استخدام. بورتو في يحدد نموذج الحساب المقبول من قبل الوثيقة المستخدمة، API-key و اتصالات الائتمان المختصة خارج.
  2. على سطح المكتب أو الويب، افتح الإعدادات → بوابة AI، وعلى الهاتف المزيد → بوابة AI. ضمن إنشاء وصول، فعّل السماح بالاتصالات الخاصة.
  3. انقر فوق ** URL**. يبدأ في /api/ai-gateway/v1.
  4. ضمن إنشاء رمز، اختر تطبيق، وأدخل اسمه ثم اختر إنشاء رمز. انسخ الرمز عند عرضه للمرة الوحيدة. يتيح هذا الخيار للتطبيق استخدام النصوص والصور عبر AI API، لكنه لا يتيح جلسات بين النسخ.
  5. قم بتحديد هذه المتغيرات البيئية على الجانب المورد في التطبيق الخاص بك:
المتغير القيمة
AIRCODE_AI_BASE_URL المكتب الكامل URL تم نسخها من الوثيقة، دون زيادة /v1
AIRCODE_AI_TOKEN توقيع التطبيقات التي قمت بإنشاءها
AIRCODE_AI_MODEL A exact id from النماذج متوافقة or GET /models

الحفاظ على التراكيز في تكوين المفتاح الخاص بك، وليس في رمز المستعرض، أو حزمة التطبيقات المحمولة، أو مخزون، أو URL أو محادثة مشتركة. يقرأ النماذج المتغيرات البيئية بدلاً من إدخال الخصائص. لا تستخدم أيضًا كلمة المرور أو رمز تسجيل المستخدم في المجال API-key.

يجب أن تبقى الوثيقة تعمل وتستطيع الوصول إليها من خلفية التطبيق الخاص بك. localhost يعني جهاز الكمبيوتر الذي يعمل به. استخدم عنوان HTTPS من الوثيقة للمساعدة في الوصول عن بعد، أو اتصال الشبكة المحلية / الخاصة الموثوق بها. لا يخلق Gateway مصدرًا عامًا. لا يمكن اختيار المورد غير مكتوب بواسطة /models عن طريق اختراع ID.

تصفية و اكتشاف النماذج

إرسال Authorization: Bearer YOUR_APPLICATION_TOKEN على كل مكالمة. إرسال JSON مع Content-Type: application/json. لا يتم دعم إعدادات الأسئلة أو تأكيد الكوكيز. لا يتم دعم الدعوات المتصلة بالبرمجيات المتصلة بالخلفية؛ استخدم موقعك الخلفي.

GET {BASE_URL}/models يعود عنصر مع object: "list" ومجموعة data . كل نموذج يوفر id إظهار label, engine, engineLabel, provider, connectionLabel, efforts و capabilities: chat.completions بالنسبة إلى النماذج النصية، images.generations و images.edits بالنسبة إلى نموذج الصورة. إرسال id المرسلة دون التغيير؛ قد تحتوي بالفعل على نسبة الكمبيوتر. قد تتغير القائمة عندما تتغير الحسابات أو الوصول إلى المورد أو النماذج المستخدمة.

لتصميم تطبيق متوافق مع OpenAI، قم بتحديد Chat Completions، استخدم الكمبيوتر الكامل URL، قم بتحديد توقيع التطبيق في مجلد API Key ، ثم قم بتسجيل واحد من أرقام النماذج المرسلة. الصور تستخدم مجموعة من الصور المحددة المذكورة أدناه. لا تتوافق التطبيق الذي يتطلب الإجابات أو الأدوات أو مكونات العثور على النماذج غير المستخدمة مع الحدود الحالية.

إنشاء رد

POST {BASE_URL}/chat/completions يتوافق مع الأسواق التالية. يتم رفض المجالات غير المعروفة بدلاً من تجاهلها بشدة.

المجال القيمة المستخدمة
model نموذج دقيق مطلوب ID قد عاد من قبل /models
messages مجموعة متطلبة من 1 إلى 100 رسالة؛ على الأقل رسالة مستخدمة غير مسبوقة
messages[].role system, developer, user أو assistant
messages[].content كلمة أو مجموعة من البلوك { "type": "text", "text": "..." }
reasoning_effort القيمة الاختيارية من النماذج المختارة من efforts; إزالة ذلك من قبل
stream بوليان اختياري؛ التحديثات المفتوحة إلى false
stream_options فقط { "include_usage": true } أو false للطائرات، مع stream: true
n إزالة أو استخدام 1
store إزالة أو استخدام false

تتوفر الرسائل فقط role و content. يتم إدخال البلوكيات النصية مع الأخبار. يتم رفض الخصائص 0 يجب أن يطابق مجموعة الرسائل المعتادة في 64 Kb من UTF-8 JSON؛ يتم الحد من جسم HTTP الكامل إلى 80 Kb. يتم الحد من الإجابة المقبولة إلى 49،152 وحدات من الكود الجانبي. هذه هي حدود الحدود، وليس التزامات حول نافذة الاتصال أو القدرة على الإنتاج.

توفير المحادثة ذات الصلة الكاملة في كل مكالمة. لمواصلة محادثة، قم بتضمين رد المساعد السابق والرسالة المستخدمة التالية. لا تخلق أو تخزين مجلة محادثة أو جلسة أو تاريخ الانتهاء. لا يمنح توك توك لمواقع الحالة، أو الملفات، أو المكونات، أو جلسات أو إعدادات المالك.

رد عادي لديه object: "chat.completion"; اقرأ النص من choices[0].message.content. كما تشمل id، created، model، و finish_reason: "stop"المطلوب. يظهر الحسابات الأصلية في usage عندما تكون كاملة بما فيه الكفاية لإبلاغها. يتم الحفاظ على توسيع aircode_usage بتفاصيل المحاسبة والتقديرات غير الكاملة. لا يزال عدد المفقودين أو الأسعار غير معروفين، ولا يزال سعرهم صفر. API التقديرات المساواة ليست رسوم إضافية.

إرسال

إعداد stream: true للحصول على Content-Type: text/event-stream. يستخدم التطبيق الحالي المتحرك مع الحد الأدنى: إنه يرسخ تعليق الانتظار الأولي وملاحظات متواصلة أثناء تشغيل المورد ، ثم يرسخ الإجابة الكاملة بعد التحقق. لا يطلق **** كلمات أو تكنولوجيات مثلما يتم إنتاجها.

يحتوي الشبكة الناجحة على:

  1. SSE تعليقات تبدأ مع : أثناء الانتظار؛ تجاهلها.
  2. A data: JSON chat.completion.chunk مع دور المساعدة والمتمثل النص في choices[0].delta.content.
  3. مجموعة مع ديلات غامض و finish_reason: "stop".
  4. إشارة إضافية مع choices: [], usage (ممكنًا null) و aircode_usage عندما stream_options.include_usage صحيح.
  5. data: [DONE].

بعد بدء الشبكة ، تصل الفشلات كبديل SSE data: الذي يحتوي على error؛ لا تتعامل مع HTTP 200 فقط كبديل. تنتهي مسار ناجح دون علامة النجاح. يمكن أن يتم تقسيم فصول SSE على مجموعات نقل؛ استخدم فحص SDK أو فحص SSE بدلا من فحص كل فصول الشبكة ك JSON.

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

إنشاء صورة

يتم تقييم نموذج الصورة، في حين أن حساب Codex الأصل يمكن استخدام أداة الصورة الخاصة بها، والتي تتطلب خطة ChatGPT التي تشمل إنتاج الصورة. id هو codex/image-generation. Codex يقرر ما هو نموذج الصورة الذي يستخدمه؛ لا يختار البوابة.

  • POST {BASE_URL}/images/generations تملك JSON مع model, prompt (الصعود إلى 32000 شخصيات) ومتطلبات size, n: 1 و response_format: "b64_json".
  • POST {BASE_URL}/images/edits يحصل على multipart/form-data مع نفس المجالات و 1 إلى 4 صور المقارنة في image أو image[]. يجب أن يكون كل من PNG أو JPEG من أكثر من 4 ميغابايت. يتم رفض مجالات الملف الأخرى، مثل mask.

size هو auto أو WIDTHxHEIGHT بين 64 و 4096 النقاط. يتم إرسالها إلى النماذج كرؤية؛ ويظهر الرد على الحجم الفعلي. يتم رفض أي مساحة أخرى بدلاً من تجاهلها.

curl -sS "$AIRCODE_AI_BASE_URL/images/edits" \
  -H "Authorization: Bearer $AIRCODE_AI_TOKEN" \
  -F model=codex/image-generation \
  -F "prompt=Place this product in a premium studio shot on a stone pedestal." \
  -F size=1024x1536 \
  -F image=@product.png

تتضمن إجابات created، data[0].b64_json، output_format (png، jpeg أو webp) ، و size و aircode_usage. يغطي الحساب المقاول الذي أحرز أداة الصورة؛ لا يُشير المورد إلى تكلفة أداة الصورة الخاصة بك، لذلك costComplete هو دائما false. عادة ما يستغرق إنتاج واحد إلى ثلاثة دقائق ، ويشارك الحد الأدنى من الحد الأدنى من الدعوات النصية ، ويتم إلغاء ذلك عند إلغاء الاتصال بالعميل. عندما يتردد النماذج دون صورة ، فإن الاتصال لا يتحقق مع 422 AI_GATEWAY_NO_IMAGE ومرسوم النماذج ، إذا كان النماذج.

اتصال تطبيق AirCode Ø المتوفر تلقائيا

تطبيق يتم تخزينه في Apps الذي يقوم بتشغيل خادم خاص به يمكن أن يحصل على هذا الوصول دون نسخ توقيع. في صفحة التطبيق ، قم بفتح Settings → Access → AI حسابات وفتحها. AirCode Ø بعد ذلك:

  1. يفترض أن يتم تشغيل البوابة الخاصة AI إذا كانت مفتوحة.
  2. إعادة تشغيل التطبيق و ، في كل بدء ، يمنح خادمها طابعًا جديدًا الخاص بك ، مع إلغاء تقييم بداية السابقة ؛
  3. يحدد AIRCODE_AI_BASE_URL (المرحلة على الموقع الذي يستخدمه الوثيقة) AIRCODE_AI_TOKEN و، إذا كان متاحاً، AIRCODE_AI_MODEL (معدل النص) و AIRCODE_AI_IMAGE_MODEL (معدل الصورة).

يتم الحصول على نسخة تم نشرها من التطبيق عن طريق نفس الطريقة. إلغاء حسابات AI يؤدي إلى إلغاء تذاكر التطبيق على الفور. اتصل بمرحلة البوابة من خادم التطبيق والحفاظ على الورق هناك: أي شخص يمكن فتح التطبيق يمكن استخدام حساباتك من خلالها، وتتراوح استخدامها إلى خططك.

التقديرات، دورة حياة القائمة وأخطاء

يتيح الشبكة إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال. الردود لا تنتهي. هذه الحدائق المحلية لا تتبدل قوائم الموردين. تنتهي التذاكر بعد 90 يومًا؛ إنشاء بديل، تحديث التطبيق، ثم إلغاء التذاكر السابقة. إلغاء إلغاء البوابة يحافظ على التوترات ولكن يوقف استخدامها. استرداد حالة الحالة يلجأ إلى إلغاء البوابة وإزالة السلطة التكتيكية؛ إنشاء التكتيكات الجديدة.

يتم استخدام الخطأ error.message, error.type, error.code و error.param. اقرأ الكود وكذلك حالة HTTP . لا تنتقل تلقائياً إلى إنتاج لا يعرف نتائجه: قد يكون لديه بالفعل استهلاك قيمة الموردين. يتم إلغاء ملاحظات SDK .

الحالة / الكود ماذا تفعل
401, AI_GATEWAY_AUTH_REQUIRED تحقق من الوثيقة، الزمن، الإلغاء، ومواقع الهدف
403, AI_GATEWAY_DISABLED تثبيت البوابة على الوثيقة الهدف
403, AI_GATEWAY_ORIGIN_FORBIDDEN الهاتف من موقعك الخلفي، وليس من متصفح أجنبي
AI_GATEWAY_ACCESS_REFUSED تحقق من متطلبات الوصول/التسجيل في الوثيقة
400، المقياس أو الجهد لا يدعم إزالة الأماكن التي لا يتم دعمها، استخدم جهود الترويج من النماذج المختارة
404/409, AI_GATEWAY_MODEL_UNAVAILABLE إعادة تثبيت /models وتحديدًا ID المتاحة
413, AI_GATEWAY_INPUT_TOO_LARGE يقلل من التاريخ أو الصور المرسلة أو الصور المقارنة؛ يتم رفض أيضًا جسم HTTP الكبير.
415 على /images/edits إرسال multipart/form-data
422, AI_GATEWAY_NO_IMAGE كان النموذج يستجيب دون صورة، اقرأ عبارته وتغيير الطلب
429, AI_GATEWAY_BUSY الانتظار إلى الانتهاء من الاتصال النشط قبل محاولة العودة
429, AI_GATEWAY_RATE_LIMIT إلغاء الترددات المباشرة وتتوق إلى نافذة النقطة المحلية
SAFE_STRUCTURED_AI_QUOTA_EXHAUSTED الانتظار لاسترداد قيمة المورد؛ error.resets_at قد يكون null
409, إلغاء تعامل الهاتف مع الإلغاء، لا تنتقل تلقائياً
502/503، المورد / خطأ غير متاح تحقق من اتصال الحساب والصحة الوضعية قبل إجراء إعادة تقييم واضح

وقت استرداد المورد غير معروف لا يزال غير معروف. لا تنتج أحدًا من اسم النماذج أو جدول التكاليف من منتج غير مرتبط.

استخدام مصحف آخر من التطبيق

يمكن للتطبيق الخارجي الوصول إلى نسخة أخرى تملكها باستخدام Base URL الخاص بها ورمز أُنشئ فيها. كل رمز يتبع النسخة التي أصدرته. ليعمل وكيل على B في مشروع A، اختر نسخة أخرى عند إنشاء الرمز على B واتبع دليل الجلسات البعيدة. افتراضيًا تبقى الملفات والأوامر على A. احفظ الاتصال على A، واختر B ضمن جلسة جديدة → التشغيل على، واترك موقع المشروع → هذه النسخة. للعمل في مشروع على B، اختر هذه النسخة والمشروع عند إنشاء الرمز على B، ثم اختر موقع المشروع → نسخة بعيدة عند بدء الجلسة على A. يرسل الوضعان الأحداث مباشرة. تدعم الرموز العادية النصوص والصور، لكنها لا تسجّل دخول العميل بصفة مالك النسخة البعيدة. استدعاء الأدوات عبر Responses و Anthropic Messages وChat Completions خارج النطاق المدعوم من API النصية.

للمساعدة في التكامل مع AI، انظر تقييم ل AI، Markdown الموديل الأسود، OpenAPI الخطة، و المهارات التكامل.

أمثلة على الرموز

تحدد ثلاثة متغيرات البيئة أعلاه قبل إجراء مثال. هذه النقطة متاحة أيضًا في الإعدادات وفي دليل Markdown خام.

cURL

Bash, curl and jq. List models first, then use the exact model ID you selected.

set -euo pipefail
# The token is read from standard input, not a command-line argument.
curl --fail-with-body --silent --show-error --location --max-redirs 0 \
  "$AIRCODE_AI_BASE_URL/models" --header @- <<EOF
Authorization: Bearer $AIRCODE_AI_TOKEN
EOF

body=$(jq -n --arg model "$AIRCODE_AI_MODEL" \
  '{model: $model, messages: [{role: "user", content: "Hello!"}]}')
curl --fail-with-body --silent --show-error --location --max-redirs 0 \
  "$AIRCODE_AI_BASE_URL/chat/completions" \
  --header 'Content-Type: application/json' \
  --header @- --data "$body" <<EOF
Authorization: Bearer $AIRCODE_AI_TOKEN
EOF

Python

Install the OpenAI Python SDK 3 with python -m pip install "openai>=3,<4".

import os
from openai import OpenAI, DefaultHttpx2Client

client = OpenAI(
    base_url=os.environ["AIRCODE_AI_BASE_URL"],
    api_key=os.environ["AIRCODE_AI_TOKEN"],
    max_retries=0,
    http_client=DefaultHttpx2Client(follow_redirects=False),
)

for model in client.models.list():
    print(model.id)

response = client.chat.completions.create(
    model=os.environ["AIRCODE_AI_MODEL"],
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)

JavaScript streaming

Node.js and the OpenAI SDK: npm install openai. This is buffered SSE: the complete validated answer arrives at the end.

import OpenAI from "openai";

function required(name) {
  if (!process.env[name]) throw new Error("Set " + name + " first.");
  return process.env[name];
}

const client = new OpenAI({
  baseURL: required("AIRCODE_AI_BASE_URL"),
  apiKey: required("AIRCODE_AI_TOKEN"),
  maxRetries: 0,
  fetchOptions: { redirect: "error" },
});

const stream = await client.chat.completions.create({
  model: required("AIRCODE_AI_MODEL"),
  messages: [{ role: "user", content: "Hello!" }],
  stream: true,
  stream_options: { include_usage: true },
});

try {
  for await (const chunk of stream) {
    process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
    if (chunk.usage) console.error("Tokens:", chunk.usage.total_tokens);
  }
  process.stdout.write("\n");
} finally {
  stream.controller.abort();
}

ملاحظة التحديثات SDK:OpenAI بيترون SDKو OpenAI JavaScript SDK. هذا البوابة يدعم العناوين الواردة أعلاه.