۱. قبل از شروع
سه چیز لازم دارید: آدرس درگاه، کلید شخصی، و لیست مدلهای مجاز کلیدتان.
کلید شخصی خودتان
هر کارمند یک کلید مجازی sk-... از مدیر تیم میگیرد. این کلید تعیین میکند
کدام مدلها، چه بودجهای و چه سرعتی (RPM) مجاز است.
همان کلید را در همه ابزارها استفاده میکنید.
آدرس درگاه
| از کجا وصل میشوید | آدرس پایه (OpenAI-compatible) |
|---|---|
| روی سیستم خودتان در شبکه داخلی | http://localhost:4000/v1 |
| روی همان ماشینِ درگاه | http://localhost:4000/v1 |
برای Claude Code (بدون /v1) | http://localhost:4000 |
آدرسها در همهی نمونههای این صفحه خودکار با آدرس عمومی درگاه پر میشوند. اگر درگاه را از دامنه یا مسیر دیگری سرو میکنید، آدرس درست را از مدیر درگاه بگیرید.
۲. Endpointهای درگاه (تستشده)
این درگاه چند protocol مختلف را همزمان ارائه میدهد؛ هر ابزاری با یکی از اینها صحبت میکند.
| Endpoint | برای چه ابزاری | وضعیت |
|---|---|---|
/v1/chat/completions | Cline، Cursor، Hermes، OpenClaw، SDKها | پشتیبانی میشود |
/v1/responses | OpenAI Codex CLI (نسخههای جدید فقط این را دارند) | پشتیبانی میشود |
/v1/messages | Claude Code (فرمت Anthropic) | پشتیبانی میشود |
/v1/messages/count_tokens | Claude Code (شمارش توکن) | پشتیبانی میشود |
/v1/embeddings | RAG و جستجوی معنایی | پشتیبانی میشود |
/v1/audio/transcriptions | تبدیل گفتار به متن (whisper-1) | پشتیبانی میشود |
/v1/models | لیست مدلهای مجاز کلید شما | پشتیبانی میشود |
/cursor/models | یکپارچهسازی اختصاصی Cursor (نیاز LiteLLM ≥ 1.97) | پشتیبانی میشود |
۳. Cursor محدودیت شبکه دارد
Cursor تنها ابزاری است که درخواست را از سرورهای خود Cursor میفرستد، نه از ماشین شما.
192.168.0.10 رد میشوند (خطای Access to private networks is forbidden).
برای Cursor درگاه باید از اینترنت قابلرسد باشد (TLS + دامنه/تونل). تا زمانی که درگاه فقط روی LAN است،
Cline / Claude Code / Codex / WebUI را استفاده کنید — اینها مستقیم از ماشین شما وصل میشوند و کار میکنند.
رویه تنظیم (وقتی آدرس عمومی در دسترس بود)
- مسیر: Cursor Settings → Models → API Keys
- کلید را در فیلد OpenAI API Key بگذارید
- گزینه Override OpenAI Base URL را روشن کنید
- مدل دلخواه را با + Add Custom Model اضافه کنید (نام دقیق مدل درگاه، مثل
gpt-4o)
Override OpenAI Base URL : https://<دامنه-عمومی-درگاه>/cursor OpenAI API Key : sk-<کلید-شخصی-شما> Add Custom Model : gpt-4o
نکته: نسخه درگاه 1.106.2 است، پس مسیر /cursor و
GET /cursor/models فعال است (تأیید شد). اگر خطای نام تکراری دیدید، نام مدل با مدل داخلی Cursor
برخورد کرده — نام دیگری انتخاب کنید. تب Tab همیشه با مدلهای خود Cursor کار میکند و قابل تغییر نیست.
۴. Cline (VS Code) روی LAN کار میکند
Cline مستقیم از VS Code شما درخواست میفرستد؛ پس آدرس داخلی LAN بدون مشکل کار میکند.
- پنل Cline → آیکون تنظیمات
- API Provider را روی
OpenAI Compatibleبگذارید - فیلدها را پر کنید و دکمه Verify را بزنید
| فیلد | مقدار |
|---|---|
| Base URL | http://localhost:4000/v1 |
| API Key | sk-<کلید-شخصی> |
| Model ID | gpt-4o (یا هر مدل مجاز کلیدتان) |
| Max Output / Context | پیشفرض خوب است؛ برای مدل reasoning مقدار خروجی را کم نکنید |
Cline فقط /v1/chat/completions را صدا میزند
(نه /v1/responses و نه /v1/messages). مدلهای wildcard با پیشوند
openai/ هم مجازند، مثلاً openai/gpt-4.1.
۵. Claude Code پروتکل Anthropic تست شد
Claude Code با فرمت Anthropic (/v1/messages) صحبت میکند و درگاه این فرمت را
به مدلهای OpenAI ترجمه میکند. به همین دلیل آدرس را بدون /v1 میدهند.
macOS / Linux / WSL (bash)
export ANTHROPIC_BASE_URL="http://localhost:4000"
export ANTHROPIC_AUTH_TOKEN="sk-<کلید-شخصی>"
export ANTHROPIC_MODEL="gpt-4o"
unset ANTHROPIC_API_KEY
claudeویندوز (PowerShell)
$env:ANTHROPIC_BASE_URL = "http://localhost:4000"
$env:ANTHROPIC_AUTH_TOKEN = "sk-<کلید-شخصی>"
$env:ANTHROPIC_MODEL = "gpt-4o"
Remove-Item Env:ANTHROPIC_API_KEY -ErrorAction SilentlyContinue
claudeدائمیکردن تنظیمات (همه پلتفرمها)
در فایل ~/.claude/settings.json (ویندوز: %USERPROFILE%\.claude\settings.json):
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:4000",
"ANTHROPIC_AUTH_TOKEN": "sk-<کلید-شخصی>",
"ANTHROPIC_MODEL": "gpt-4o",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "gpt-4o-mini",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
}
}ANTHROPIC_AUTH_TOKENبا هدرAuthorization: Bearerفرستاده میشود؛ANTHROPIC_API_KEYباx-api-key. یکی را استفاده کنید و آن یکی را unset کنید.- انتخابگر مدل داخل جلسه (/model) هنوز شناسههای Anthropic را نشان میدهد؛ اگر آنها را در درگاه
تعریف نکرده باشید خطای
Invalid model name passed inمیگیرید. پس بهتر است مدل را باANTHROPIC_MODELثابت کنید. ANTHROPIC_SMALL_FAST_MODELمنسوخ شده؛ جایشANTHROPIC_DEFAULT_HAIKU_MODELرا بگذارید.
۶. OpenAI Codex CLI /v1/responses تست شد
کدکس در نسخههای جدید فقط پروتکل responses را پشتیبانی میکند
(گزینه wire_api = "chat" حذف شده). درگاه ما /v1/responses را ارائه میدهد — تأیید شد.
فایل پیکربندی
مسیر: ~/.codex/config.toml (ویندوز: %USERPROFILE%\.codex\config.toml)
model = "gpt-4o"
model_provider = "yadak"
[model_providers.yadak]
name = "Yadak AI Gateway"
base_url = "http://localhost:4000/v1"
env_key = "YADAK_API_KEY"
wire_api = "responses"openai، ollama یا lmstudio باشد —
اینها رزرو خودِ کدکس هستند. برای انتخاب provider در خط فرمان، codex --yadak کار نمیکند؛
با codex -c model_provider=yadak یا همان فایل استفاده کنید.
ست کردن کلید
export YADAK_API_KEY="sk-<کلید-شخصی>" codex "یک تابع بزن که فایل لاگ را بچرخاند"
# برای همین جلسه: $env:YADAK_API_KEY = "sk-<کلید-شخصی>" # برای همه جلسات آینده (یکبار): setx YADAK_API_KEY "sk-<کلید-شخصی>" codex "باگ را در main.py پیدا کن"
کلید در فایل TOML ذخیره نمیشود؛ کدکس آن را از متغیر محیطی
خواندهشده در env_key میگیرد — امنتر است.
۷. Hermes Agent طبق مستندات سازنده
Hermes Agent (project: NousResearch/hermes-agent) یک ایجنت self-hosted با CLI و
gateway چت است. تنظیمات غیرمحرمانه در ~/.hermes/config.yaml و کلیدها در ~/.hermes/.env.
providers:
yadak:
api: http://localhost:4000/v1 # Hermes خودش /chat/completions را اضافه میکند
transport: chat_completions
key_env: YADAK_API_KEY
model:
default: gpt-4o
provider: custom:yadakYADAK_API_KEY=sk-<کلید-شخصی>
- راه جایگزین: دستور
hermes modelو انتخاب Custom endpoint. OPENAI_BASE_URLفقط برای provider با نامopenai-apiاعتبار دارد؛ برای provider سفارشی از همان بلوک بالا استفاده کنید.- متغیر قدیمی
LLM_MODELحذف شده است.
۸. OpenClaw طبق مستندات سازنده
OpenClaw یک ایجنت/assistant self-hosted است که چت (WhatsApp/Telegram/Discord) را به مدلها وصل میکند.
تنظیمات در فایل JSON5 به مسیر ~/.openclaw/openclaw.json (hot-reload میشود).
{
models: {
providers: {
yadak: {
baseUrl: "http://localhost:4000/v1",
apiKey: "${YADAK_API_KEY}",
api: "openai-completions",
models: [
{ id: "gpt-4o", name: "GPT-4o (Yadak)" },
{ id: "gpt-4o-mini", name: "GPT-4o mini (Yadak)" }
]
}
}
},
agents: {
defaults: { model: { primary: "yadak/gpt-4o" } }
}
}openclaw onboard --auth-choice litellm-api-key \
--litellm-api-key "$YADAK_API_KEY" \
--custom-base-url "http://localhost:4000/v1"
openclaw models set litellm/gpt-4o
openclaw models list --provider yadak --refresh --json # صحت اتصال را نشان میدهدنام مدلها در OpenClaw با پیشوند provider صدا زده میشود
(yadak/gpt-4o)؛ شناسه بعد از / باید دقیقاً همان model_name درگاه باشد.
۹. مدلها و نکتههای مهم
متنی پرکاربرد
gpt-4o— کیفیت بالا، پیشفرض پیشنهادیgpt-4o-mini— ارزان و سریع برای کارهای روزمرهgpt-5-mini— مدل reasoning (تفکر)
تخصصی
text-embedding-3-small— برای RAGwhisper-1— تبدیل گفتار به متنopenai/gpt-image-1*— تولید تصویر (تیم Image)openai/gpt-5-codexو برادرانش — کدنویسی (تیم Developers)
gpt-5-mini حتماً
max_completion_tokens را ≥ ۵۰۰ بگذارید. چون بخش زیادی از بودجه خروجی صرف «تفکر» میشود،
با مقدار کم پاسخ خالی برمیگردد (نه خطا).
response_format را روی text یا
verbose_json بگذارید. مقدار پیشفرض json با این پرووایدر به باگ پارس برمیخورد.
gpt-4o، gpt-4o-mini، gpt-5-mini، text-embedding-3-small،
whisper-1) و بقیه با پیشوند openai/ صدا زده میشوند،
مثلاً openai/gpt-4.1 یا openai/gemini-2.5-flash-lite.
اگر کلید تیم شما محدود به مدلهای خاص باشد، wildcard هم بسته است.
0 ثبت میشود. دقت کنید هر جستوجوی کش خودش
یک فراخوانی embedding ارزان دارد، پس صرفهجویی «حذف کامل هزینه» نیست؛ حذف گرانترین بخش آن است.
برای همین لازم نیست promptها را برای «ذخیره توکن» دستی تکرار کنید.
۱۰. معنی خطاها
| کد | علت | چه کار کنیم |
|---|---|---|
403 key_model_access_denied |
مدل در لیست مجاز کلید شما نیست | مدل را عوض کنید یا از مدیر بخواهید مدل را به کلید/تیم شما اضافه کند |
429 |
سقف تعداد درخواست در دقیقه (RPM) پر شد | چند ثانیه صبر و retry با backoff؛ درخواستهای موازی را محدود کنید |
422 budget_exceeded |
بودجه کلید یا بودجه تیم تمام شده (پیام خطا میگوید Key=... یا Team=...) |
به مدیر تیم گزارش دهید؛ بودجه ماهانه دوباره reset میشود |
401 |
کلید اشتباه/منقضی است | کلید را دوباره از مدیر بگیرید (کلیدها انقضای ۹۰ روزه دارند) |
پاسخ خالی از gpt-5-mini |
مقدار max_completion_tokens کم است |
آن را ≥ ۵۰۰ (بهتر ۱۰۰۰+) بگذارید |
۱۱. عیبیابی سریع
الف) اول با curl تست کنید که مشکل از ابزار نیست
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer sk-<کلید-شخصی>" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"say OK"}],"max_tokens":5}'اگر این جواب داد ولی ابزار نه، مشکل از تنظیمات آن ابزار است (نه از درگاه یا کلید).
ب) ببینید کلید شما چه مدلهایی اجازه دارد
curl -s http://localhost:4000/v1/models \
-H "Authorization: Bearer sk-<کلید-شخصی>" | python -c "import sys,json;print('\n'.join(m['id'] for m in json.load(sys.stdin)['data']))"ج) مشکلات رایج
| علائم | علت محتمل | درمان |
|---|---|---|
| Connection refused / timeout | فایروال، یا آدرس IP عوض شده | IP را از مدیر بپرسید؛ پورت ۴۰۰۰ روی LAN باز باشد |
در Cursor: Access to private networks is forbidden | Cursor از سرور خودش request میفرستد | درگاه را با TLS و دامنه عمومی در دسترس قرار دهید (بخش Cursor) |
در Claude Code: Invalid model name passed in | مدل Anthropic در درگاه تعریف نشده | ANTHROPIC_MODEL=gpt-4o را ست کنید |
| Codex: خطای wire_api / 404 روی responses | نسخه کدکس قدیمی یا provider اشتباه | wire_api = "responses" و بهروزرسانی کدکس |
| هزینه بیشتر از انتظار | مدل گران با کار ساده | برای کارهای روزمره gpt-4o-mini |