Providers
Inferrs
inferrs مدلهای محلی را پشت یک API سازگار با OpenAI به نشانی /v1 ارائه میکند. OpenClaw از طریق آداپتور عمومی openai-completions با آن ارتباط برقرار میکند.
| ویژگی | مقدار |
|---|---|
| شناسه ارائهدهنده | inferrs (سفارشی؛ در models.providers.inferrs پیکربندی کنید) |
| Plugin | ندارد — یک Plugin ارائهدهنده همراه OpenClaw نیست |
| متغیر محیطی احراز هویت | لازم نیست؛ اگر سرور inferrs احراز هویت نداشته باشد، هر مقداری کار میکند |
| API | سازگار با OpenAI (openai-completions) |
| نشانی پایه پیشنهادی | http://127.0.0.1:8080/v1 (یا هر جایی که سرور inferrs شما گوش میدهد) |
شروع به کار
راهاندازی inferrs با یک مدل
inferrs serve google/gemma-4-E2B-it \ --host 127.0.0.1 \ --port 8080 \ --device metalبررسی دسترسیپذیری سرور
curl http://127.0.0.1:8080/healthcurl http://127.0.0.1:8080/v1/modelsافزودن ورودی ارائهدهنده OpenClaw
یک ورودی صریح برای ارائهدهنده اضافه کنید و مدل پیشفرض خود را به آن ارجاع دهید. نمونه پیکربندی زیر را ببینید.
نمونه پیکربندی کامل
Gemma 4 روی یک سرور محلی inferrs:
{ agents: { defaults: { model: { primary: "inferrs/google/gemma-4-E2B-it" }, models: { "inferrs/google/gemma-4-E2B-it": { alias: "Gemma 4 (inferrs)", }, }, }, }, models: { mode: "merge", providers: { inferrs: { baseUrl: "http://127.0.0.1:8080/v1", apiKey: "inferrs-local", api: "openai-completions", 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, }, }, ], }, }, },}راهاندازی در صورت نیاز
OpenClaw فقط زمانی میتواند inferrs را خودش راهاندازی کند که یک مدل inferrs/... انتخاب شده باشد. localService را به همان ورودی ارائهدهنده اضافه کنید:
{ models: { 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 را روی میزبان Gateway اجرا کنید و از همان مسیر استفاده کنید. مرجع کامل فیلدها: سرویسهای مدل محلی.
پیکربندی پیشرفته
چرا requiresStringContent اهمیت دارد
برخی مسیرهای Chat Completions در inferrs فقط messages[].content رشتهای را میپذیرند، نه آرایههای ساختاریافته اجزای محتوا.
نکته احتیاطی Gemma و شِمای ابزار
برخی ترکیبهای inferrs و Gemma درخواستهای مستقیم و کوچک /v1/chat/completions را میپذیرند، اما در نوبتهای کامل زماناجرای عامل OpenClaw ناموفق میشوند. ابتدا سطح شِمای ابزار را غیرفعال کنید:
compat: { requiresStringContent: true, supportsTools: false}این کار فشار پرامپت را روی بکاندهای محلی سختگیرتر کاهش میدهد. اگر درخواستهای مستقیم کوچک همچنان کار میکنند، اما نوبتهای عادی عامل OpenClaw درون inferrs پیوسته از کار میافتند، آن را محدودیت مدل یا سرور بالادستی در نظر بگیرید، نه مشکل انتقال OpenClaw.
آزمون دودستی
پس از پیکربندی، هر دو لایه را آزمایش کنید:
curl http://127.0.0.1:8080/v1/chat/completions \ -H 'content-type: application/json' \ -d '{"model":"google/gemma-4-E2B-it","messages":[{"role":"user","content":"۲ + ۲ چند میشود؟"}],"stream":false}'openclaw infer model run \ --model inferrs/google/gemma-4-E2B-it \ --prompt "۲ + ۲ چند میشود؟ با یک جمله کوتاه پاسخ بده." \ --jsonاگر فرمان نخست کار میکند اما فرمان دوم ناموفق است، بخش عیبیابی زیر را ببینید.
رفتار بهسبک پراکسی
چون inferrs از آداپتور عمومی openai-completions استفاده میکند (نه openai-responses)، شکلدهی درخواست مختص OpenAI بومی هرگز اعمال نمیشود: هیچ service_tier، هیچ store مربوط به Responses، هیچ راهنمای کش پرامپت و هیچ شکلدهی محموله سازگاری استدلال OpenAI ارسال نمیشود.
عیبیابی
curl /v1/models ناموفق است
inferrs اجرا نشده، در دسترس نیست یا به میزبان/پورتی که پیکربندی کردهاید متصل نشده است. بررسی کنید که سرور راهاندازی شده و روی آن نشانی در حال گوشدادن است.
messages[].content باید رشته باشد
مقدار compat.requiresStringContent: true را در ورودی مدل تنظیم کنید (بخش بالا را ببینید).
فراخوانیهای مستقیم /v1/chat/completions موفقاند، اما openclaw infer model run ناموفق است
برای غیرفعالکردن سطح شِمای ابزار، compat.supportsTools: false را تنظیم کنید (نکته احتیاطی Gemma در بالا را ببینید).
inferrs همچنان در نوبتهای بزرگتر عامل از کار میافتد
اگر خطاهای شِما برطرف شدهاند، اما inferrs همچنان در نوبتهای بزرگتر عامل از کار میافتد، آن را محدودیت بالادستی inferrs یا مدل در نظر بگیرید. فشار پرامپت را کاهش دهید یا بکاند/مدل را تغییر دهید.
مرتبط
اجرای OpenClaw با سرورهای مدل محلی.
راهاندازی سرورهای مدل محلی در صورت نیاز برای ارائهدهندگان پیکربندیشده.
اشکالزدایی بکاندهای محلی سازگار با OpenAI که آزمونهای بررسی را با موفقیت میگذرانند، اما اجرای عامل در آنها ناموفق است.
مروری بر همه ارائهدهندگان، ارجاعهای مدل و رفتار جایگزینی هنگام خرابی.