APIsRouter را به‌عنوان یک endpoint سفارشی LibreChat اضافه کنید.

Updated 2026-07-29

LibreChat endpoint های سفارشی سازگار با OpenAI را یک ویژگی درجه‌یک در نظر می‌گیرد: یک بلاک endpoints.custom در librechat.yaml با یک baseURL، یک apiKey، و models.fetch روی true، و کل کاتالوگ در انتخاب‌گر مدل زیر یک کلید ظاهر می‌شود.

پاسخ سریع: یک بلاک در librechat.yaml.

endpoint های سفارشی LibreChat در librechat.yaml زیر endpoints.custom پیکربندی می‌شوند، یک آرایه که هر entry آن یک provider است. سه فیلد که اهمیت دارند name (برچسب در انتخاب‌گر endpoint)، apiKey (که متغیرهای محیطی را به شکل ${VARIABLE} interpolate می‌کند، پس کلید در .env می‌ماند و هرگز داخل YAML نمی‌رود)، و baseURL هستند. برای APIsRouter، baseURL یعنی https://api.apisrouter.com/v1، شامل /v1، چون LibreChat مسیرهای route مثل /chat/completions را به هر base ای که می‌دهید پیوست می‌کند. بلاک models تصمیم می‌گیرد چه چیزی در dropdown مدل ظاهر شود. models.fetch را روی true تنظیم کنید و LibreChat فهرست /v1/models endpoint را در زمان بارگذاری query می‌کند، پس هر id کاتالوگ بدون نگه‌داری یک فهرست دستی قابل‌انتخاب می‌شود. models.default همچنان به‌عنوان یک آرایه لازم است و به‌عنوان fallback نمایش‌داده‌شده قبل از یا به‌جای یک fetch عمل می‌کند. این یک پیکربندی مستند upstream است، نه یک patch: ساختار شیء endpoint سفارشی در مستندات LibreChat هر کلید استفاده‌شده اینجا را تعریف می‌کند.

version: 1.2.1
endpoints:
  custom:
    - name: "APIsRouter"
      apiKey: "${APISROUTER_API_KEY}"
      baseURL: "https://api.apisrouter.com/v1"
      models:
        default: ["claude-sonnet-4-6"]
        fetch: true

LibreChat چطور endpoint های سفارشی را مسیردهی می‌کند.

LibreChat (danny-avila روی GitHub، حدود ۴۱ هزار ستاره) گسترده‌ترین رابط self-hosted به سبک ChatGPT است: چند-کاربر، چند-مدل، با جستجوی مکالمه، agent ها، مدیریت فایل، و کلید به ازای هر کاربر. برخلاف کلاینت‌هایی که یک فهرست provider را hardcode می‌کنند، آرایه endpoints.custom آن هر سرویس سازگار با OpenAI را می‌پذیرد، و چند provider شناخته‌شده در مستندات دقیقاً با همین مکانیزم پیکربندی می‌شوند. وقتی یک کاربر مدلی را از یک endpoint سفارشی انتخاب می‌کند، LibreChat یک درخواست استاندارد /v1/chat/completions به baseURL آن endpoint با فیلد model به‌عنوان یک رشته ساده می‌فرستد. هیچ‌چیز در کلاینت اهمیت نمی‌دهد کدام vendor مدل را train کرده؛ رشته همان‌طور که هست منتقل می‌شود. وقتی endpoint پشت baseURL چند vendor را سرویس می‌دهد، یک entry librechat.yaml id های Claude، GPT، Gemini، DeepSeek، و GLM را در همان dropdown قرار می‌دهد، و یک کاربر vendor را در وسط مکالمه به همان شکلی که بین دو نسخه GPT سوییچ می‌کند سوییچ می‌کند. این راه‌اندازی معمول چند-provider LibreChat را جمع می‌کند. به‌جای یک entry سفارشی به ازای هر vendor، هرکدام با کلید خودش در .env و سطح صورت‌حساب خودش، یک entry با یک کلید کاتالوگ را پوشش می‌دهد، و ادمین usage به ازای هر مدل را در یک جا می‌بیند به‌جای تطبیق چند dashboard.

راه‌اندازی کامل: YAML، .env، و mount داکر.

librechat.yaml را در ریشه پروژه بسازید و کلید را در .env قرار دهید. reference ${APISROUTER_API_KEY} در YAML در زمان راه‌اندازی از محیط resolve می‌شود، پس فایل پیکربندی commit‌پذیر می‌ماند. قدمی که بیشترین راه‌اندازی‌های اولین‌بار از قلم می‌اندازند مختص داکر است: کانتینر librechat.yaml شما را نمی‌بیند تا آن را mount کنید. مستندات از شما می‌خواهند docker-compose.override.yml را با یک bind mount از ./librechat.yaml به /app/librechat.yaml بسازید، سپس کانتینرها را recreate کنید. ویرایش YAML بعداً هم به یک restart نیاز دارد، چون فایل در زمان راه‌اندازی خوانده می‌شود، نه watch می‌شود. چند فیلد اختیاری ارزش تنظیم روی یک entry gateway را دارند. titleConvo عنوان‌های خودکار مکالمه را فعال می‌کند، و titleModel مدلی که آن‌ها را می‌نویسد انتخاب می‌کند؛ پیش‌فرض مستند LibreChat برای titleModel، gpt-3.5-turbo است، یک id که یک endpoint غیر-OpenAI شاید سرویس ندهد، پس آن را صریح روی یک id سریع کاتالوگ یا روی مقدار خاص current_model تنظیم کنید. modelDisplayLabel نامی که روی پیام‌های دستیار نشان داده می‌شود را کنترل می‌کند. و apiKey مقدار خاص user_provided را می‌پذیرد اگر می‌خواهید هر کاربر کلید خودش را به‌جای اشتراک کلید سرور paste کند.

version: 1.2.1
endpoints:
  custom:
    - name: "APIsRouter"
      apiKey: "${APISROUTER_API_KEY}"
      baseURL: "https://api.apisrouter.com/v1"
      models:
        default: ["claude-sonnet-4-6", "gpt-5.5", "deepseek-v4-pro"]
        fetch: true
      titleConvo: true
      titleModel: "claude-haiku-4-5-20251001"
      modelDisplayLabel: "APIsRouter"

انتخاب مدل برای یک workspace چت مشترک.

چون هر مدل از طریق همان کلید صورت‌حساب می‌شود، حلقه عملی برای یک ادمین این است که یک هفته usage را در کنسول تماشا کند، ببیند کاربران واقعاً کدام مدل‌ها را انتخاب می‌کنند، و models.default را متناسب کوتاه کند، در حالی که fetch را روشن نگه می‌دارد تا کاربران قدرتمند همچنان به فهرست کامل برسند.

  • چت روزانه یک عمومی‌گرای قوی می‌خواهد. claude-sonnet-4-6 و gpt-5.5 مکالمات بلند، بحث فایل، و اجرای agent را بدون اضطراب مدل به ازای هر پیام حمل می‌کنند.
  • سؤالات کوتاه با فرکانس بالا کار حجمی است. claude-haiku-4-5-20251001 و gemini-3.5-flash سریع پاسخ می‌دهند و یک deployment چند-کاربر را از تمرکز هزینه روی turn های دورانداختنی نگه می‌دارند.
  • تولید عنوان روی هر مکالمه شلیک می‌شود. titleModel را روی یک id سریع اشاره دهید؛ پرداخت نرخ‌های مرزی برای نوشتن عنوان‌های شش-کلمه‌ای رایج‌ترین اتلاف بی‌صدا در یک deployment LibreChat است.
  • تیم‌های چندزبانه باید deepseek-v4-pro و glm-5.2 را روی ترکیب زبانی واقعی خود تست کنند؛ یک dropdown چند-vendor آن را به یک مقایسه داخل-اپ به‌جای یک پیکربندی مجدد تبدیل می‌کند.
  • models.fetch یعنی مدل‌های کاتالوگ جدید بدون لمس YAML ظاهر می‌شوند، پس مدلی که upstream اضافه شود در به‌روزرسانی بعدی فهرست قابل‌انتخاب است.

پرداخت بر اساس مصرف · پایین‌تر از قیمت رسمی

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

مدلقیمت رسمیقیمت ما
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

حالت‌های شکست مختص LibreChat.

پیکربندی که بی‌صدا بارگذاری نمی‌شود کلاسیک است، و تقریباً همیشه mount داکر است. بدون bind mount در docker-compose.override.yml، کانتینر بدون هیچ librechat.yaml ای اجرا می‌شود، endpoint سفارشی هرگز در انتخاب‌گر ظاهر نمی‌شود، و هیچ خطایی نمی‌دهد. قبل از عیب‌یابی هرچیز دیگر، وجود فایل داخل کانتینر را تأیید کنید. یک apiKey که تحت‌اللفظی به‌عنوان ${APISROUTER_API_KEY} می‌رسد یعنی متغیر در محیطی که سرور با آن راه‌اندازی شده حاضر نبوده؛ interpolation در زمان راه‌اندازی از .env اتفاق می‌افتد، پس کلیدی که بعداً اضافه شده به یک restart کانتینر نیاز دارد. علامت یک 401 از gateway با یک bearer token بی‌معنی است. یک baseURL بدون /v1 روی هر درخواست 404 تولید می‌کند، چون LibreChat /chat/completions را به base همان‌طور که داده شده پیوست می‌کند. اشتباه معکوس، paste کردن یک URL کامل completions به‌عنوان baseURL، متعلق به گزینه جدا directEndpoint است و نباید با یک entry معمولی ترکیب شود. یک dropdown مدل خالی با fetch خاموش یعنی models.default گم‌شده یا خالی است؛ این یک آرایه لازم است. با fetch روشن، یک dropdown خالی معمولاً یعنی خود fetch شکست خورده، که به کلید یا baseURL برمی‌گردد. و عنوان‌های مکالمه شکست‌خورده روی یک endpoint در غیر این صورت کارکردن، پیش‌فرض titleModel است که به یک id اشاره دارد که gateway سرویس نمی‌دهد؛ آن را صریح تنظیم کنید.

چه کسانی LibreChat را از طریق یک gateway مسیردهی می‌کنند.

  • تیم‌هایی که یک workspace چت مشترک self-host می‌کنند و می‌خواهند Claude، GPT، Gemini، و DeepSeek در یک dropdown باشند بدون نگه‌داری یک entry endpoints.custom و یک حساب vendor به ازای هرکدام.
  • ادمین‌هایی که deployment های چند-کاربر اجرا می‌کنند و به یک سطح usage نیاز دارند. لاگ های هر-کلید نشان می‌دهند تیم واقعاً از کدام مدل‌ها استفاده می‌کند، قیمت‌گذاری‌شده، بدون ادغام dashboard های vendor.
  • اپراتورهایی که به دپارتمان‌ها کلید خودشان را می‌دهند: همان YAML، یک کلید به ازای هر گروه، و لاگ usage به گزارش هزینه هر-تیم تبدیل می‌شود.
  • خانواده‌ها و گروه‌های کوچک که چند اشتراک چت را با یک endpoint متری جایگزین می‌کنند، پرداخت برای token های مصرف‌شده به‌جای seat.
  • توسعه‌دهندگان بدون دسترسی به صورت‌حساب یک vendor خاص. دسترسی مبتنی بر شارژ بدون الزام کارت وابستگی ثبت‌نام هر-provider را حذف می‌کند.

endpoint را تأیید کنید و اولین پیام را عیب‌یابی کنید.

قبل از لمس LibreChat، نیمه gateway را اثبات کنید: مدل‌ها را با کلید خود فهرست کنید، و تأیید کنید id هایی که در models.default گذاشته‌اید ظاهر می‌شوند. اگر این کار کند، هر علامت باقی‌مانده سمت LibreChat سیم است. سپس stack را راه‌اندازی کنید و انتخاب‌گر endpoint را باز کنید. ظاهرشدن entry APIsRouter اصلاً ثابت می‌کند YAML بارگذاری شده؛ پرشدن فهرست مدل fetch و کلید را ثابت می‌کند؛ پاسخ اول مسیر چت را ثابت می‌کند. این سه را به‌ترتیب انجام دهید نه همه با هم، چون هرکدام مجموعه شکست متمایزی دارند، mount، متغیر env، و baseURL به‌ترتیب. وقتی پیام‌ها جریان یابند، کنسول APIsRouter مدل، شمارش token، و هزینه به ازای هر درخواست را نشان می‌دهد. یک نمونه مشترک LibreChat دقیقاً نوع deployment ای است که usage بی‌صدا روی دو یا سه مدل متمرکز می‌شود، و لاگ usage جایی است که قبل از صورت‌حساب متوجه می‌شوید کدام‌ها.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

پرسش‌های پرتکرار

کجا یک endpoint سازگار با OpenAI سفارشی در LibreChat پیکربندی کنم؟

در librechat.yaml زیر endpoints.custom، یک آرایه از entry های provider با name، apiKey، baseURL، و یک بلاک models. روی نصب‌های داکر، فایل باید از طریق docker-compose.override.yml به کانتینر bind mount شود وگرنه بی‌صدا نادیده گرفته می‌شود.

آیا baseURL باید /v1 را شامل شود؟

بله برای APIsRouter: https://api.apisrouter.com/v1. LibreChat مسیرهای route مثل /chat/completions را به base همان‌طور که داده شده پیوست می‌کند، پس یک /v1 گم‌شده روی هر درخواست 404 تولید می‌کند.

آیا یک endpoint LibreChat می‌تواند مدل‌های Claude، GPT، و DeepSeek را با هم سرویس دهد؟

بله. LibreChat id مدل انتخاب‌شده را به‌عنوان یک رشته ساده به baseURL endpoint منتقل می‌کند. وقتی endpoint چند vendor را سرویس می‌دهد، یک entry endpoints.custom همه id های آن‌ها را در همان dropdown قرار می‌دهد، و models.fetch آن فهرست را خودکار به‌روز نگه می‌دارد.

چرا endpoint سفارشی من از انتخاب‌گر غایب است؟

YAML بارگذاری نشده. روی داکر، دلیل معمول یک bind mount گم‌شده برای librechat.yaml است؛ کانتینر بدون فایل اجرا می‌شود و هیچ خطایی نمی‌دهد. وجود فایل را داخل کانتینر تأیید کنید، سپس restart کنید، چون پیکربندی در زمان راه‌اندازی خوانده می‌شود.

چرا عنوان‌های مکالمه شکست می‌خورند وقتی چت کار می‌کند؟

titleConvo از titleModel استفاده می‌کند، که پیش‌فرض مستند آن gpt-3.5-turbo است، یک id که endpoint شما شاید سرویس ندهد. titleModel را صریح روی یک id سریع کاتالوگ مثل claude-haiku-4-5-20251001، یا روی مقدار خاص current_model تنظیم کنید.

آیا هر کاربر می‌تواند کلید خودش را به‌جای اشتراک کلید سرور بیاورد؟

بله. apiKey را روی مقدار خاص user_provided تنظیم کنید و LibreChat از هر کاربر یک کلید می‌خواهد، ذخیره‌شده به ازای هر کاربر. این با کلیدهای gateway خوب جور است، چون یک کلید به ازای هر کاربر لاگ usage را به یک نمای هزینه هر-شخص تبدیل می‌کند.