Gateway
स्थानीय मॉडल
स्थानीय मॉडल काम करते हैं, लेकिन वे हार्डवेयर, कॉन्टेक्स्ट आकार और प्रॉम्प्ट-इंजेक्शन सुरक्षा की आवश्यकताएँ बढ़ा देते हैं: छोटे या अत्यधिक क्वांटाइज़ किए गए मॉडल कॉन्टेक्स्ट को काट देते हैं और प्रोवाइडर-पक्ष के सुरक्षा फ़िल्टर छोड़ देते हैं। यह पृष्ठ उच्च-स्तरीय स्थानीय स्टैक और कस्टम OpenAI-संगत सर्वर को शामिल करता है। सबसे आसान तरीके के लिए, LM Studio या Ollama से शुरू करें और openclaw onboard।
उन स्थानीय सर्वर के लिए, जिन्हें केवल तभी शुरू होना चाहिए जब किसी चुने गए मॉडल को उनकी आवश्यकता हो, स्थानीय मॉडल सेवाएँ देखें।
न्यूनतम हार्डवेयर
सुविधाजनक एजेंट लूप के लिए पूरी तरह अधिकतम कॉन्फ़िगरेशन वाले 2+ Mac Studios या समकक्ष GPU रिग (~$30k+) का लक्ष्य रखें। एक अकेला 24 GB GPU अधिक विलंबता पर केवल हल्के प्रॉम्प्ट संभाल सकता है। हमेशा उस सबसे बड़े / पूर्ण-आकार वाले संस्करण को चलाएँ जिसे आप होस्ट कर सकते हैं - छोटे या अत्यधिक क्वांटाइज़ किए गए चेकपॉइंट प्रॉम्प्ट-इंजेक्शन का जोखिम बढ़ाते हैं (सुरक्षा देखें)।
बैकएंड चुनें
| बैकएंड | इसका उपयोग तब करें |
|---|---|
| ds4 | OpenAI-संगत टूल कॉल के साथ macOS Metal पर स्थानीय DeepSeek V4 Flash |
| LM Studio | पहली बार स्थानीय सेटअप, GUI लोडर, मूल Responses API |
| LiteLLM / OAI-proxy / कस्टम OpenAI-संगत प्रॉक्सी | जब आप किसी अन्य मॉडल API को सामने रखते हैं और चाहते हैं कि OpenClaw उसे OpenAI माने |
| MLX / vLLM / SGLang | OpenAI-संगत HTTP एंडपॉइंट के साथ उच्च-थ्रूपुट स्व-होस्टेड सर्विंग |
| Ollama | CLI कार्यप्रवाह, मॉडल लाइब्रेरी, बिना हस्तक्षेप वाली systemd सेवा |
जब बैकएंड इसका समर्थन करता हो, तब api: "openai-responses" का उपयोग करें (LM Studio करता है)। अन्यथा api: "openai-completions" का उपयोग करें। यदि baseUrl वाले किसी कस्टम प्रोवाइडर पर api छोड़ा गया है, तो OpenClaw डिफ़ॉल्ट रूप से openai-completions का उपयोग करता है।
LM Studio + बड़ा स्थानीय मॉडल (Responses API)
यह वर्तमान में सबसे अच्छा स्थानीय स्टैक है। LM Studio में कोई बड़ा मॉडल (पूर्ण-आकार का Qwen, DeepSeek या Llama बिल्ड) लोड करें, स्थानीय सर्वर सक्षम करें (डिफ़ॉल्ट http://127.0.0.1:1234), और रीजनिंग को अंतिम टेक्स्ट से अलग रखने के लिए Responses API का उपयोग करें।
{ agents: { defaults: { model: { primary: "lmstudio/my-local-model" }, models: { "anthropic/claude-opus-4-6": { alias: "Opus" }, "lmstudio/my-local-model": { alias: "Local" }, }, }, }, models: { mode: "merge", providers: { lmstudio: { baseUrl: "http://127.0.0.1:1234/v1", apiKey: "lmstudio", api: "openai-responses", models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, }, ], }, }, },}सेटअप जाँच-सूची:
- LM Studio इंस्टॉल करें: https://lmstudio.ai
- उपलब्ध सबसे बड़ा मॉडल बिल्ड डाउनलोड करें ("small"/अत्यधिक क्वांटाइज़ किए गए संस्करणों से बचें), सर्वर शुरू करें और पुष्टि करें कि
http://127.0.0.1:1234/v1/modelsउसे सूचीबद्ध करता है। my-local-modelको LM Studio में दिखाए गए वास्तविक मॉडल ID से बदलें।- मॉडल को लोड रखा रहने दें; कोल्ड-लोड प्रारंभिक विलंबता बढ़ाता है।
- यदि आपका LM Studio बिल्ड अलग है, तो
contextWindow/maxTokensसमायोजित करें। - WhatsApp के लिए Responses API का ही उपयोग करें, ताकि केवल अंतिम टेक्स्ट भेजा जाए।
models.mode: "merge"बनाए रखें, ताकि होस्ट किए गए मॉडल फ़ॉलबैक के रूप में उपलब्ध रहें।
हाइब्रिड कॉन्फ़िगरेशन: होस्ट किया गया प्राथमिक मॉडल, स्थानीय फ़ॉलबैक
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["lmstudio/my-local-model", "anthropic/claude-opus-4-6"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "lmstudio/my-local-model": { alias: "Local" }, "anthropic/claude-opus-4-6": { alias: "Opus" }, }, }, }, models: { mode: "merge", providers: { lmstudio: { baseUrl: "http://127.0.0.1:1234/v1", apiKey: "lmstudio", api: "openai-responses", models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, }, ], }, }, },}होस्ट किए गए सुरक्षा विकल्प के साथ स्थानीय मॉडल को प्राथमिकता देने के लिए, primary/fallbacks का क्रम बदलें और वही providers ब्लॉक तथा models.mode: "merge" बनाए रखें।
क्षेत्रीय होस्टिंग / डेटा रूटिंग
होस्ट किए गए MiniMax/Kimi/GLM संस्करण OpenRouter पर क्षेत्र-निर्धारित एंडपॉइंट के साथ भी उपलब्ध हैं (उदाहरण के लिए, US में होस्ट किए गए)। Anthropic/OpenAI फ़ॉलबैक के लिए models.mode: "merge" बनाए रखते हुए ट्रैफ़िक को अपने चुने हुए अधिकार-क्षेत्र में रखने के लिए क्षेत्रीय संस्करण चुनें। केवल-स्थानीय उपयोग अब भी निजता का सबसे मजबूत तरीका है; जब आपको प्रोवाइडर की सुविधाओं की आवश्यकता हो, लेकिन डेटा प्रवाह पर नियंत्रण भी चाहिए, तब होस्ट की गई क्षेत्रीय रूटिंग बीच का रास्ता है।
अन्य OpenAI-संगत स्थानीय प्रॉक्सी
MLX (mlx_lm.server), vLLM, SGLang, LiteLLM, OAI-proxy या कोई भी कस्टम Gateway तब काम करता है, जब वह OpenAI-शैली का /v1/chat/completions एंडपॉइंट उपलब्ध कराता हो। जब तक बैकएंड स्पष्ट रूप से /v1/responses समर्थन का दस्तावेज़ न देता हो, openai-completions का उपयोग करें।
{ agents: { defaults: { model: { primary: "local/my-local-model" }, }, }, models: { mode: "merge", providers: { local: { baseUrl: "http://127.0.0.1:8000/v1", apiKey: "sk-local", api: "openai-completions", timeoutSeconds: 300, models: [ { id: "my-local-model", name: "Local Model", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 120000, maxTokens: 8192, }, ], }, }, },}कस्टम/स्थानीय प्रोवाइडर प्रविष्टियाँ सुरक्षित मॉडल अनुरोधों के लिए अपने सटीक कॉन्फ़िगर किए गए baseUrl मूल पर भरोसा करती हैं, जिसमें लूपबैक, LAN, टेलनेट और निजी DNS होस्ट शामिल हैं। मेटाडेटा/लिंक-लोकल मूल हमेशा अवरुद्ध रहते हैं। अन्य निजी मूल के अनुरोधों को अब भी models.providers.<id>.request.allowPrivateNetwork: true की आवश्यकता होती है; सटीक-मूल भरोसे से बाहर निकलने के लिए ट्रस्ट फ़्लैग को false पर सेट करें।
models.providers.<id>.models[].id प्रोवाइडर-स्थानीय है - प्रोवाइडर प्रीफ़िक्स शामिल न करें। mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit के साथ शुरू किए गए MLX सर्वर के लिए:
models.providers.mlx.models[].id: "mlx-community/Qwen3-30B-A3B-6bit"agents.defaults.model.primary: "mlx/mlx-community/Qwen3-30B-A3B-6bit"
स्थानीय या प्रॉक्सी किए गए विज़न मॉडल पर input: ["text", "image"] सेट करें, ताकि छवि अटैचमेंट एजेंट टर्न में प्रविष्ट किए जाएँ। इंटरैक्टिव कस्टम-प्रोवाइडर ऑनबोर्डिंग सामान्य विज़न मॉडल ID का अनुमान लगाती है और केवल अज्ञात नामों के बारे में पूछती है; गैर-इंटरैक्टिव ऑनबोर्डिंग भी वही अनुमान उपयोग करती है, जिसे --custom-image-input / --custom-text-input से ओवरराइड किया जा सकता है।
agents.defaults.timeoutSeconds बढ़ाने से पहले धीमे स्थानीय/दूरस्थ मॉडल सर्वर के लिए models.providers.<id>.timeoutSeconds का उपयोग करें। प्रोवाइडर टाइमआउट केवल मॉडल HTTP अनुरोधों के लिए कनेक्शन, हेडर, बॉडी स्ट्रीमिंग और सुरक्षित-फ़ेच के कुल निरस्तीकरण को शामिल करता है - यदि एजेंट/रन टाइमआउट कम है, तो उसे भी बढ़ाएँ, क्योंकि प्रोवाइडर टाइमआउट पूरे रन को नहीं बढ़ा सकता।
स्थानीय/प्रॉक्सी किए गए /v1 बैकएंड के व्यवहार संबंधी नोट:
- OpenClaw इन्हें मूल OpenAI एंडपॉइंट नहीं, बल्कि प्रॉक्सी-शैली के OpenAI-संगत रूट मानता है।
- केवल मूल OpenAI के लिए अनुरोध संरचना लागू नहीं होती: न
service_tier, न Responsesstore, न OpenAI रीजनिंग-संगत पेलोड संरचना, न प्रॉम्प्ट-कैश संकेत। - छिपे हुए OpenClaw एट्रिब्यूशन हेडर (
originator,version,User-Agent) कस्टम प्रॉक्सी URL पर प्रविष्ट नहीं किए जाते।
संगतता घोषणाएँ केवल इस प्रोवाइडर पंक्ति द्वारा वर्णित कस्टम एंडपॉइंट के लिए हैं। कैटलॉग में ज्ञात रूट इसके बजाय प्रोवाइडर-स्वामित्व वाली क्षमताओं का उपयोग करते हैं; कस्टम-प्रोवाइडर क्षमता मार्गदर्शिका देखें।
अधिक सख्त OpenAI-संगत बैकएंड के लिए संगतता ओवरराइड:
-
केवल-स्ट्रिंग सामग्री: कुछ सर्वर संरचित कंटेंट-पार्ट ऐरे के बजाय केवल स्ट्रिंग
messages[].contentस्वीकार करते हैं।models.providers.<provider>.models[].compat.requiresStringContent: trueसेट करें। -
सख्त संदेश कुंजियाँ: यदि सर्वर
role/contentसे अधिक वाली संदेश प्रविष्टियाँ अस्वीकार करता है, तोcompat.strictMessageKeys: trueसेट करें। -
ब्रैकेट में टूल टेक्स्ट: कुछ स्थानीय मॉडल स्वतंत्र ब्रैकेटयुक्त टूल अनुरोध को टेक्स्ट के रूप में उत्सर्जित करते हैं, जैसे
[tool_name], उसके बाद JSON और[END_TOOL_REQUEST]। OpenClaw उन्हें वास्तविक टूल कॉल में केवल तभी बदलता है, जब नाम उस टर्न के लिए पंजीकृत टूल से हूबहू मेल खाता हो; अन्यथा वह छिपे हुए, असमर्थित टेक्स्ट के रूप में रहता है। -
असंरचित टूल-कॉल जैसा टेक्स्ट: यदि कोई मॉडल JSON/XML/ReAct-शैली का ऐसा टेक्स्ट उत्सर्जित करता है, जो टूल कॉल जैसा दिखता है लेकिन संरचित आह्वान नहीं था, तो OpenClaw उसे टेक्स्ट के रूप में बनाए रखता है और रन ID, प्रोवाइडर/मॉडल, पहचाने गए पैटर्न तथा उपलब्ध होने पर टूल नाम के साथ चेतावनी लॉग करता है। यह प्रोवाइडर/मॉडल की असंगतता है, पूर्ण हुआ टूल रन नहीं।
-
टूल उपयोग अनिवार्य करना: यदि टूल सहायक टेक्स्ट के रूप में दिखाई देते हैं (कच्चा JSON/XML/ReAct या खाली
tool_callsऐरे), तो पहले पुष्टि करें कि सर्वर का चैट टेम्पलेट/पार्सर टूल कॉल का समर्थन करता है। यदि पार्सर केवल टूल उपयोग अनिवार्य होने पर काम करता है, तो प्रत्येक मॉडल के लिएtool_choice: "auto"के डिफ़ॉल्ट प्रॉक्सी मान को ओवरराइड करें:json5 { agents: { defaults: { models: { "local/my-local-model": { params: { extra_body: { tool_choice: "required", }, }, }, }, }, },}इसका उपयोग केवल वहाँ करें, जहाँ प्रत्येक सामान्य टर्न में टूल कॉल होना चाहिए।
local/my-local-modelकोopenclaw models listके सटीक रेफ़रेंस से बदलें या इसे CLI के माध्यम से सेट करें:bash openclaw config set agents.defaults.models '{"local/my-local-model":{"params":{"extra_body":{"tool_choice":"required"}}}}' --strict-json --merge -
अतिरिक्त रीजनिंग प्रयास: यदि कोई कस्टम OpenAI-संगत मॉडल अंतर्निर्मित प्रोफ़ाइल से परे OpenAI रीजनिंग प्रयासों को स्वीकार करता है, तो उन्हें मॉडल के संगतता ब्लॉक में घोषित करें।
"xhigh"जोड़ने से यह उस मॉडल रेफ़रेंस के लिए/think xhigh, सत्र चयनकर्ताओं, Gateway सत्यापन औरllm-taskसत्यापन में उपलब्ध हो जाता है:json5 { models: { providers: { local: { baseUrl: "http://127.0.0.1:8000/v1", apiKey: "sk-local", api: "openai-responses", models: [ { id: "gpt-5.4", name: "स्थानीय प्रॉक्सी के माध्यम से GPT 5.4", reasoning: true, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 196608, maxTokens: 8192, compat: { supportedReasoningEfforts: ["low", "medium", "high", "xhigh"], reasoningEffortMap: { xhigh: "xhigh" }, }, }, ], }, }, },}
छोटे या अधिक सख्त बैकएंड
यदि मॉडल बिना समस्या के लोड होता है, लेकिन पूर्ण एजेंट टर्न ठीक से काम नहीं करते, तो ऊपर से नीचे की ओर जाँच करें: पहले ट्रांसपोर्ट की पुष्टि करें, फिर दायरा सीमित करें।
-
पुष्टि करें कि स्थानीय मॉडल प्रतिक्रिया देता है - कोई टूल नहीं, कोई एजेंट संदर्भ नहीं:
bash openclaw infer model run --local --model <provider/model> --prompt "ठीक यही उत्तर दें: pong" --json -
Gateway रूटिंग की पुष्टि करें - यह केवल प्रॉम्प्ट भेजता है और ट्रांसक्रिप्ट, AGENTS बूटस्ट्रैप, कॉन्टेक्स्ट-इंजन असेंबली, टूल और बंडल किए गए MCP सर्वर छोड़ देता है, लेकिन फिर भी Gateway रूटिंग, प्रमाणीकरण और प्रदाता चयन का परीक्षण करता है:
bash openclaw infer model run --gateway --model <provider/model> --prompt "ठीक यही उत्तर दें: pong" --json -
यदि दोनों परीक्षण सफल होते हैं, लेकिन वास्तविक एजेंट टर्न विकृत टूल कॉल या बहुत बड़े प्रॉम्प्ट के कारण विफल होते हैं, तो लीन मोड आज़माएँ:
agents.defaults.experimental.localModelLean: trueसेट करें। यह स्पष्ट रूप से आवश्यक न होने पर भारी ब्राउज़र, cron, संदेश, मीडिया-जनरेशन, वॉइस और PDF टूल हटा देता है तथा बड़े टूल कैटलॉग को डिफ़ॉल्ट रूप से संरचित Tool Search नियंत्रणों के पीछे रखता है, जबकिexecको सीधे दृश्यमान बनाए रखता है। विवरण और इसके चालू होने की पुष्टि करने के तरीके के लिए प्रायोगिक सुविधाएँ -> स्थानीय मॉडल लीन मोड देखें। -
अंतिम उपाय के रूप में उस मॉडल के लिए
models.providers.<provider>.models[].compat.supportsTools: falseसेट करके टूल पूरी तरह अक्षम करें - इसके बाद एजेंट टूल कॉल के बिना चलता है। -
इसके बाद बाधा अपस्ट्रीम में है। यदि लीन मोड और
supportsTools: falseके बाद भी बैकएंड केवल बड़े OpenClaw रन पर विफल होता है, तो शेष समस्या सामान्यतः मॉडल या सर्वर में ही होती है - कॉन्टेक्स्ट विंडो, GPU मेमोरी, kv-cache निष्कासन या बैकएंड बग - OpenClaw की ट्रांसपोर्ट परत में नहीं।
समस्या निवारण
- Gateway प्रॉक्सी तक नहीं पहुँच पा रहा?
curl http://127.0.0.1:1234/v1/models। - LM Studio मॉडल अनलोड हो गया? पुनः लोड करें; कोल्ड स्टार्ट का "अटकने" का कारण होना आम है।
- स्थानीय सर्वर
terminated,ECONNRESETबताता है या टर्न के बीच में स्ट्रीम बंद कर देता है? OpenClaw डायग्नोस्टिक्स में कम-कार्डिनैलिटी वालाmodel.call.error.failureKindतथा OpenClaw प्रोसेस का RSS/हीप स्नैपशॉट दर्ज करता है। LM Studio/Ollama पर मेमोरी दबाव के लिए, उस टाइमस्टैम्प का सर्वर लॉग या macOS क्रैश/jetsam लॉग से मिलान करके पुष्टि करें कि मॉडल सर्वर समाप्त किया गया था या नहीं। - कॉन्टेक्स्ट त्रुटियाँ? OpenClaw पहचानी गई मॉडल विंडो (या
agents.defaults.contextTokensद्वारा घटाई गई सीमित विंडो) से कॉन्टेक्स्ट-विंडो प्रीफ्लाइट सीमाएँ निर्धारित करता है, 8k की न्यूनतम सीमा के साथ 20% से कम पर चेतावनी देता है और 4k की न्यूनतम सीमा के साथ 10% से कम पर पूरी तरह अवरुद्ध करता है (इसे प्रभावी कॉन्टेक्स्ट विंडो तक सीमित किया जाता है, ताकि मॉडल का अत्यधिक बड़ा मेटाडेटा किसी मान्य उपयोगकर्ता सीमा को अस्वीकार न कर सके)।contextWindowघटाएँ या सर्वर/मॉडल की कॉन्टेक्स्ट सीमा बढ़ाएँ। messages[].content ... expected a string? उस मॉडल प्रविष्टि मेंcompat.requiresStringContent: trueजोड़ें।validation.keys, या "संदेश प्रविष्टियाँ केवलroleऔरcontentकी अनुमति देती हैं"? उस मॉडल प्रविष्टि मेंcompat.strictMessageKeys: trueजोड़ें।- प्रत्यक्ष
/v1/chat/completionsकॉल काम करते हैं, लेकिन Gemma या किसी अन्य स्थानीय मॉडल परopenclaw infer model run --localविफल होता है? पहले प्रदाता URL, मॉडल संदर्भ, प्रमाणीकरण मार्कर और सर्वर लॉग जाँचें -model runएजेंट टूल को पूरी तरह छोड़ देता है। यदिmodel runसफल होता है, लेकिन बड़े एजेंट टर्न विफल होते हैं, तोlocalModelLeanयाcompat.supportsTools: falseसे टूल का दायरा घटाएँ। - टूल कॉल कच्चे JSON/XML/ReAct टेक्स्ट के रूप में दिखाई देते हैं या प्रदाता खाली
tool_callsऐरे लौटाता है? ऐसा प्रॉक्सी न जोड़ें जो असिस्टेंट टेक्स्ट को बिना जाँच के टूल निष्पादन में बदल दे - पहले सर्वर का चैट टेम्पलेट/पार्सर ठीक करें। यदि मॉडल केवल टूल उपयोग को बाध्य करने पर काम करता है, तो ऊपर दिया गयाparams.extra_body.tool_choice: "required"ओवरराइड जोड़ें और उस मॉडल प्रविष्टि का उपयोग केवल उन सत्रों के लिए करें जहाँ प्रत्येक टर्न में टूल कॉल अपेक्षित हो। - सुरक्षा: स्थानीय मॉडल प्रदाता-पक्षीय फ़िल्टर छोड़ देते हैं। प्रॉम्प्ट-इंजेक्शन के प्रभाव क्षेत्र को सीमित करने के लिए एजेंट का दायरा संकीर्ण रखें और Compaction चालू रखें।