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 لا يحصل على عنوان الحالة الخاصة بك، أو تيمك أو الإشارات. تستخدم هذه الخدمة فقط لبرنامجك الخاص و حساباتك. لا تزال شروط الموردين والمواصفات والمواصفات متاحة.
إعداد الحالة
- اتصال حساب المورد الأمامي متوافق في AI استخدام. بورتو في يحدد نموذج الحساب المقبول من قبل الوثيقة المستخدمة، API-key و اتصالات الائتمان المختصة خارج.
- على سطح المكتب أو الويب، افتح الإعدادات → بوابة AI، وعلى الهاتف المزيد → بوابة AI. ضمن إنشاء وصول، فعّل السماح بالاتصالات الخاصة.
- انقر فوق ** URL**. يبدأ في
/api/ai-gateway/v1. - ضمن إنشاء رمز، اختر تطبيق، وأدخل اسمه ثم اختر إنشاء رمز. انسخ الرمز عند عرضه للمرة الوحيدة. يتيح هذا الخيار للتطبيق استخدام النصوص والصور عبر AI API، لكنه لا يتيح جلسات بين النسخ.
- قم بتحديد هذه المتغيرات البيئية على الجانب المورد في التطبيق الخاص بك:
| المتغير | القيمة |
|---|---|
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. يستخدم التطبيق الحالي المتحرك مع الحد الأدنى: إنه يرسخ تعليق الانتظار الأولي وملاحظات متواصلة أثناء تشغيل المورد ، ثم يرسخ الإجابة الكاملة بعد التحقق. لا يطلق **** كلمات أو تكنولوجيات مثلما يتم إنتاجها.
يحتوي الشبكة الناجحة على:
- SSE تعليقات تبدأ مع
:أثناء الانتظار؛ تجاهلها. - A
data:JSONchat.completion.chunkمع دور المساعدة والمتمثل النص فيchoices[0].delta.content. - مجموعة مع ديلات غامض و
finish_reason: "stop". - إشارة إضافية مع
choices: [],usage(ممكنًاnull) وaircode_usageعندماstream_options.include_usageصحيح. 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 Ø بعد ذلك:
- يفترض أن يتم تشغيل البوابة الخاصة AI إذا كانت مفتوحة.
- إعادة تشغيل التطبيق و ، في كل بدء ، يمنح خادمها طابعًا جديدًا الخاص بك ، مع إلغاء تقييم بداية السابقة ؛
- يحدد
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
EOFPython
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. هذا البوابة يدعم العناوين الواردة أعلاه.