نِت اَرز · مستندات API هوش مصنوعی
همهٔ مستندات
مدل‌ها و قیمت‌ها مرجع تعاملی دریافت کلید

مهاجرت از OpenAI

مهاجرت از OpenAI: فقط base_url و کلید را عوض کنید. تفاوت‌های ریز، فیلدهای پشتیبانی‌نشده و صدا زدن Claude و Gemini با همان کد و همان SDK.

base_url: https://netarz.ir/api/ai/v1 به‌روزرسانی: 1405/07/14

نِت اَرز رابط OpenAI را پیاده‌سازی می‌کند؛ بنابراین مهاجرت یعنی تغییر دو مقدار: آدرس پایه و کلید. نام مدل‌ها، ساختار پیام‌ها، پارامترها، شکل پاسخ و حتی شکل خطاها همان است.

Python

قبل
from openai import OpenAI

client = OpenAI(api_key="sk-proj-...")
بعد
from openai import OpenAI

client = OpenAI(
    api_key="sk-ntz-v1-...",
    base_url="https://netarz.ir/api/ai/v1",
)

Node.js / TypeScript

قبل
import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
بعد
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.NETARZ_API_KEY,
  baseURL: "https://netarz.ir/api/ai/v1",
});

بدون تغییر کد: متغیرهای محیطی

SDK رسمی OpenAI (پایتون و Node) متغیرهای OPENAI_API_KEY و OPENAI_BASE_URL را خودش می‌خواند. اگر کدتان را نمی‌خواهید دست بزنید:

shell
# بدون هیچ تغییری در کد — SDK رسمی این دو متغیر را خودش می‌خواند:
export OPENAI_API_KEY="sk-ntz-v1-..."
export OPENAI_BASE_URL="https://netarz.ir/api/ai/v1"

حالا Claude و Gemini هم با همان کد

پس از مهاجرت، مدل‌های ارائه‌دهندگان دیگر فقط با تغییر مقدار model در دسترس‌اند. ترجمهٔ درخواست به پروتکل هر ارائه‌دهنده (مثلاً Gemini API گوگل) در سمت نِت اَرز انجام می‌شود. یک نکته را یادتان باشد: اتصال مستقیم به Anthropic باز نیست، پس شناسهٔ Claude همیشه با openrouter/ شروع می‌شود.

Python
# همان کد، مدل دیگر — هیچ SDK جدیدی لازم نیست
# Claude با پیشوند openrouter/ می‌آید؛ Gemini و DeepSeek مستقیم وصل‌اند.
for model in ["gpt-4o-mini", "openrouter/anthropic/claude-sonnet-4.5", "gemini-3.5-flash", "deepseek-v4-pro"]:
    r = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": "در یک جمله خودتان را معرفی کنید."}],
        max_tokens=80,
    )
    print(model, "→", r.choices[0].message.content)

چه چیزهایی دقیقاً یکسان است

  • Endpointها: /chat/completions، /completions، /responses، /embeddings، /images/generations، /audio/* و /models. مسیر /moderations هم همان شکل را دارد، ولی فعلاً هیچ مدل پایش محتوایی روی درگاه نیست؛ توضیح.
  • ساختار پیام‌ها و نقش‌ها (system، developer، user، assistant، tool)، محتوای چندبخشی (متن + تصویر)، ابزارها و tool_choice، response_format.
  • استریم با stream: true: رویدادهای chat.completion.chunk و پایان با data: [DONE].
  • شکل خطا: {"error": {"message", "type", "code", "param"}} با همان کدهای HTTP (400/401/402/403/404/429/5xx).

تفاوت‌های کوچک که باید بدانید

مورددر نِت اَرز
id پاسخشناسهٔ درخواست نِت اَرز است (req_…) و در هدر X-Request-Id هم می‌آید؛ با GET /requests/{id} قابل پیگیری است.
model پاسخهمان شناسه‌ای است که فرستاده‌اید (نه نام داخلی ارائه‌دهنده).
userبرای حفاظت از حریم خصوصی، با شناسهٔ حساب شما در نِت اَرز جایگزین می‌شود (به‌جز در /responses).
stream_options، store، service_tier، safety_identifierحذف می‌شوند. usage در استریم همیشه به‌طور خودکار در آخرین رویداد می‌آید.
nحداکثر ۴ (در Chat Completions).
خطای ۴۰۲کد insufficient_credit وقتی اعتبار برای رزرو درخواست کافی نیست. بیشتر
اندازهٔ درخواستحداکثر ۲۰ مگابایت برای بدنهٔ JSON و ۲۵ مگابایت برای فایل صوتی.

پشتیبانی نمی‌شود

این بخش‌های پلتفرم OpenAI در حال حاضر از طریق نِت اَرز در دسترس نیستند: Assistants، Files، Fine-tuning، Batch، Vector Stores و Uploads. اگر به یکی از این‌ها نیاز دارید به پشتیبانی بگویید. Realtime روی WebSocket در دسترس است و کدی که برای OpenAI Realtime API نوشته‌اید با عوض کردن نشانی و کلید کار می‌کند (اتصال زنده).

ابزارهای شخص ثالث

n8n، Dify، Flowise، Open WebUI، Cursor، Continue، LangChain، LlamaIndex و Vercel AI SDK همگی «OpenAI-compatible base URL» می‌پذیرند. نمونه‌های تنظیم در صفحهٔ SDKها.