Gateway
سرویسهای مدل محلی
models.providers.<id>.localService یک سرور مدل محلی متعلق به ارائهدهنده را در صورت نیاز راهاندازی میکند. وقتی یک درخواست مدل یا تعبیه آن ارائهدهنده را انتخاب میکند، OpenClaw نقطه پایانی سلامت را بررسی میکند، اگر فرایند متوقف باشد آن را آغاز میکند، تا آمادهشدن منتظر میماند و سپس درخواست را ارسال میکند. از آن برای جلوگیری از روشن نگهداشتن سرورهای محلی پرهزینه در تمام طول روز استفاده کنید.
نحوه کار
- یک درخواست مدل یا تعبیه به یک ارائهدهنده پیکربندیشده نگاشت میشود.
- اگر آن ارائهدهنده دارای
localServiceباشد، OpenClaw نشانیhealthUrlرا بررسی میکند. - در صورت موفقیت بررسی، OpenClaw از سروری که از قبل در حال اجرا است استفاده میکند.
- در صورت ناموفقبودن بررسی، OpenClaw فرایند
commandرا باargsایجاد میکند. - OpenClaw نقطه پایانی سلامت را تا پایان مهلت
readyTimeoutMsبهطور دورهای بررسی میکند. - درخواست از مسیر انتقال عادی مدل یا تعبیه عبور میکند.
- اگر OpenClaw فرایند را راهاندازی کرده باشد و
idleStopMsتنظیم شده باشد، پس از آنکه آخرین درخواست در حال اجرا به همان مدت بیکار ماند، فرایند را متوقف میکند.
OpenClaw برای این کار launchd، systemd، Docker یا هیچ سرویس پسزمینهای را نصب نمیکند. سرور یک فرایند فرزند ساده از نخستین فرایند OpenClaw است که به آن نیاز پیدا کرده است.
راهاندازی برای هر ارائهدهنده پیکربندیشده و هر مجموعه فرمان/آرگومان/محیط بهصورت ترتیبی انجام میشود؛ بنابراین درخواستهای همزمان گفتوگو و تعبیه برای یک سرویس، سرورهای تکراری ایجاد نمیکنند. هر درخواست تا پایان پردازش پاسخ، اجاره اختصاصی خود را نگه میدارد؛ بنابراین خاموشسازی هنگام بیکاری برای تمام درخواستهای مدل و تعبیه در حال اجرا منتظر میماند. نامهای مستعار پیکربندیشده ارائهدهندگان متمایز باقی میمانند: دو نام مستعار میتوانند بدون ادغامشدن روی یک شناسه آداپتور Ollama، LM Studio یا سازگار با OpenAI، به میزبانهای GPU متفاوتی اشاره کنند.
اگر فرایند دیگری از OpenClaw از قبل سروری سالم در همان healthUrl داشته باشد، این فرایند بدون پذیرفتن مالکیت آن دوباره از آن استفاده میکند (هر فرایند فقط فرزند ایجادشده توسط خودش را مدیریت میکند). گزارشهای راهاندازی و خروج شامل بخشهای انتهایی محدود و پالایششده خروجی فرایند فرزند، بههمراه جزئیات زمانبندی و خروج هستند؛ مقادیر محیطی پیکربندیشده هرگز منتشر نمیشوند.
ساختار پیکربندی
{ models: { providers: { local: { baseUrl: "http://127.0.0.1:8000/v1", apiKey: "local-model", api: "openai-completions", timeoutSeconds: 300, localService: { command: "/absolute/path/to/server", args: ["--host", "127.0.0.1", "--port", "8000"], cwd: "/absolute/path/to/working-dir", env: { LOCAL_MODEL_CACHE: "/absolute/path/to/cache" }, healthUrl: "http://127.0.0.1:8000/v1/models", readyTimeoutMs: 180000, idleStopMs: 0, }, models: [ { id: "my-local-model", name: "My Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 8192, }, ], }, }, },}مقدار timeoutSeconds را در ورودی ارائهدهنده (نه localService) تنظیم کنید تا راهاندازیهای سرد کند و تولیدهای طولانی با مهلت پیشفرض درخواست مدل مواجه نشوند. هرگاه سرور شما آمادگی را در مکانی غیر از /models در نشانی پایه ارائه میکند، یک healthUrl صریح تنظیم کنید.
فیلدها
| فیلد | الزامی | توضیحات |
|---|---|---|
command |
بله | مسیر مطلق فایل اجرایی. جستوجویی در PATH پوسته انجام نمیشود. |
args |
خیر | آرگومانهای فرایند. بدون گسترش پوسته، پایپ، تطبیق الگو یا نقلقول. |
cwd |
خیر | پوشه کاری فرایند. |
env |
خیر | متغیرهای محیطی که روی محیط فرایند OpenClaw ادغام میشوند. |
healthUrl |
خیر | نشانی آمادگی. مقدار پیشفرض baseUrl است که /models به آن افزوده میشود (http://127.0.0.1:8000/v1 به http://127.0.0.1:8000/v1/models تبدیل میشود). |
readyTimeoutMs |
خیر | مهلت آمادگی هنگام راهاندازی. پیشفرض: 120000. |
idleStopMs |
خیر | تأخیر خاموشسازی هنگام بیکاری برای فرایندی که OpenClaw راهاندازی کرده است. مقدار 0 یا حذف این فیلد، آن را تا زمان خروج OpenClaw زنده نگه میدارد. |
نمونه Inferrs
Inferrs یک بکاند سفارشی /v1 سازگار با OpenAI است؛ بنابراین همان API localService با یک ورودی ارائهدهنده inferrs کار میکند:
{ agents: { defaults: { model: { primary: "inferrs/google/gemma-4-E2B-it" }, }, }, models: { mode: "merge", providers: { inferrs: { baseUrl: "http://127.0.0.1:8080/v1", apiKey: "inferrs-local", api: "openai-completions", timeoutSeconds: 300, localService: { command: "/opt/homebrew/bin/inferrs", args: [ "serve", "google/gemma-4-E2B-it", "--host", "127.0.0.1", "--port", "8080", "--device", "metal", ], healthUrl: "http://127.0.0.1:8080/v1/models", readyTimeoutMs: 180000, idleStopMs: 0, }, models: [ { id: "google/gemma-4-E2B-it", name: "Gemma 4 E2B (inferrs)", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 131072, maxTokens: 4096, compat: { requiresStringContent: true }, }, ], }, }, },}مقدار command را با نتیجه which inferrs در دستگاهی که OpenClaw را اجرا میکند جایگزین کنید. راهاندازی کامل Inferrs: Inferrs.
نمونه ds4
{ models: { providers: { ds4: { baseUrl: "http://127.0.0.1:18000/v1", apiKey: "ds4-local", api: "openai-completions", timeoutSeconds: 300, localService: { command: "<DS4_DIR>/ds4-server", args: [ "--model", "<DS4_DIR>/ds4flash.gguf", "--host", "127.0.0.1", "--port", "18000", "--ctx", "32768", "--tokens", "128", ], cwd: "<DS4_DIR>", healthUrl: "http://127.0.0.1:18000/v1/models", readyTimeoutMs: 300000, idleStopMs: 0, }, models: [], }, }, },}دستورهای راهاندازی کامل، اندازهبندی زمینه و راستیآزمایی: ds4.