openclaw onboard.
W przypadku lokalnych serwerów, które powinny uruchamiać się tylko wtedy, gdy potrzebuje ich wybrany model, zobacz
Usługi modeli lokalnych.
Minimalny próg sprzętowy
Celuj wysoko: ≥2 maksymalnie doposażone Mac Studio albo równoważna maszyna GPU (~30 tys. USD+) dla wygodnej pętli agenta. Pojedynczy GPU 24 GB działa tylko dla lżejszych promptów przy większym opóźnieniu. Zawsze uruchamiaj największy / pełnowymiarowy wariant, jaki możesz hostować; małe lub mocno skwantyzowane checkpointy zwiększają ryzyko prompt injection (zobacz Bezpieczeństwo).Wybierz backend
| Backend | Używaj, gdy |
|---|---|
| ds4 | Lokalny DeepSeek V4 Flash na macOS Metal z wywołaniami narzędzi zgodnymi z OpenAI |
| LM Studio | Pierwsza konfiguracja lokalna, loader GUI, natywne Responses API |
| LiteLLM / OAI-proxy / custom OpenAI-compatible proxy | Wystawiasz inne API modelu i potrzebujesz, aby OpenClaw traktował je jak OpenAI |
| MLX / vLLM / SGLang | Wysokoprzepustowe samodzielnie hostowane serwowanie z punktem końcowym HTTP zgodnym z OpenAI |
| Ollama | Przepływ pracy CLI, biblioteka modeli, bezobsługowa usługa systemd |
api: "openai-responses"), gdy backend je obsługuje (LM Studio obsługuje). W przeciwnym razie trzymaj się Chat Completions (api: "openai-completions").
Zalecane: LM Studio + duży model lokalny (Responses API)
Najlepszy obecny stos lokalny. Załaduj duży model w LM Studio (na przykład pełnowymiarową kompilację Qwen, DeepSeek lub Llama), włącz lokalny serwer (domyślniehttp://127.0.0.1:1234) i użyj Responses API, aby oddzielić rozumowanie od tekstu końcowego.
- Zainstaluj LM Studio: https://lmstudio.ai
- W LM Studio pobierz największą dostępną kompilację modelu (unikaj wariantów “small”/mocno skwantyzowanych), uruchom serwer, potwierdź, że
http://127.0.0.1:1234/v1/modelsją wyświetla. - Zastąp
my-local-modelrzeczywistym identyfikatorem modelu pokazanym w LM Studio. - Utrzymuj model załadowany; zimne ładowanie dodaje opóźnienie uruchamiania.
- Dostosuj
contextWindow/maxTokens, jeśli Twoja kompilacja LM Studio się różni. - W przypadku WhatsApp trzymaj się Responses API, aby wysyłany był tylko tekst końcowy.
models.mode: "merge", aby fallbacki pozostały dostępne.
Konfiguracja hybrydowa: hostowany model główny, lokalny fallback
Najpierw lokalnie, z hostowaną siatką bezpieczeństwa
Zamień kolejność modelu głównego i fallbacków; zachowaj ten sam blok providers orazmodels.mode: "merge", aby móc wrócić do Sonnet lub Opus, gdy lokalna maszyna jest niedostępna.
Hosting regionalny / routing danych
- Hostowane warianty MiniMax/Kimi/GLM istnieją również w OpenRouter z punktami końcowymi przypiętymi do regionu (np. hostowane w USA). Wybierz tam wariant regionalny, aby utrzymać ruch w wybranej jurysdykcji, nadal używając
models.mode: "merge"dla fallbacków Anthropic/OpenAI. - Tryb wyłącznie lokalny pozostaje najmocniejszą ścieżką prywatności; hostowany routing regionalny to rozwiązanie pośrednie, gdy potrzebujesz funkcji dostawcy, ale chcesz kontrolować przepływ danych.
Inne lokalne proxy zgodne z OpenAI
MLX (mlx_lm.server), vLLM, SGLang, LiteLLM, OAI-proxy lub niestandardowe
bramy działają, jeśli wystawiają punkt końcowy w stylu OpenAI /v1/chat/completions.
Użyj adaptera Chat Completions, chyba że backend jawnie
dokumentuje obsługę /v1/responses. Zastąp powyższy blok provider swoim
punktem końcowym i identyfikatorem modelu:
api zostanie pominięte w niestandardowym providerze z baseUrl, OpenClaw domyślnie używa
openai-completions. Niestandardowe/lokalne wpisy providerów ufają dokładnie skonfigurowanemu
origin baseUrl dla chronionych żądań modeli, w tym hostom loopback, LAN, tailnet
i prywatnego DNS. Żądania do innych prywatnych origin nadal wymagają
request.allowPrivateNetwork: true; origin metadanych/link-local pozostają zablokowane
bez jawnej zgody. Ustaw wartość false, aby zrezygnować z zaufania do dokładnego origin.
Wartość models.providers.<id>.models[].id jest lokalna dla providera. Nie
dołączaj tam prefiksu providera. Na przykład serwer MLX uruchomiony z
mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit powinien używać tego
identyfikatora katalogowego i odwołania do modelu:
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"] w lokalnych lub pośredniczonych modelach wizyjnych, aby
załączniki obrazów były wstrzykiwane do tur agenta. Interaktywne wdrażanie
niestandardowego providera rozpoznaje typowe identyfikatory modeli wizyjnych i pyta tylko
o nieznane nazwy. Nieinteraktywne wdrażanie używa tego samego wnioskowania; użyj --custom-image-input
dla nieznanych identyfikatorów wizyjnych albo --custom-text-input, gdy model wyglądający na znany jest
tekstowy za Twoim punktem końcowym.
Zachowaj models.mode: "merge", aby modele hostowane pozostały dostępne jako fallbacki.
Użyj models.providers.<id>.timeoutSeconds dla wolnych lokalnych lub zdalnych serwerów
modeli, zanim zwiększysz agents.defaults.timeoutSeconds. Timeout providera
dotyczy tylko żądań HTTP modelu, w tym połączenia, nagłówków, strumieniowania treści
i całkowitego przerwania guarded-fetch. Jeśli timeout agenta lub uruchomienia jest niższy, zwiększ
również ten limit, ponieważ timeouty providera nie mogą wydłużyć całego uruchomienia agenta.
W przypadku niestandardowych providerów zgodnych z OpenAI utrwalenie niebędącego sekretem lokalnego znacznika, takiego jak
apiKey: "ollama-local", jest akceptowane, gdy baseUrl rozwiązuje się do loopback, prywatnej sieci LAN, .local lub samej nazwy hosta. OpenClaw traktuje go jako prawidłowe lokalne poświadczenie zamiast zgłaszać brak klucza. Użyj rzeczywistej wartości dla każdego providera, który akceptuje publiczną nazwę hosta./v1:
- OpenClaw traktuje je jako trasy w stylu proxy zgodne z OpenAI, a nie natywne punkty końcowe OpenAI
- nie ma tu zastosowania kształtowanie żądań wyłącznie dla natywnego OpenAI: brak
service_tier, brak Responsesstore, brak kształtowania payloadu zgodności rozumowania OpenAI i brak wskazówek prompt-cache - ukryte nagłówki atrybucji OpenClaw (
originator,version,User-Agent) nie są wstrzykiwane w tych niestandardowych adresach URL proxy
-
Niektóre serwery akceptują w Chat Completions tylko tekstowe
messages[].content, a nie tablice ustrukturyzowanych części treści. Ustawmodels.providers.<provider>.models[].compat.requiresStringContent: truedla takich punktów końcowych. -
Niektóre modele lokalne emitują samodzielne nawiasowane żądania narzędzi jako tekst, takie jak
[tool_name], po którym następuje JSON i[END_TOOL_REQUEST]. OpenClaw promuje je do rzeczywistych wywołań narzędzi tylko wtedy, gdy nazwa dokładnie pasuje do zarejestrowanego narzędzia dla danej tury; w przeciwnym razie blok jest traktowany jako nieobsługiwany tekst i jest ukrywany przed odpowiedziami widocznymi dla użytkownika. - Jeśli model emituje JSON, XML lub tekst w stylu ReAct, który wygląda jak wywołanie narzędzia, ale provider nie wyemitował ustrukturyzowanej inwokacji, OpenClaw pozostawia go jako tekst i zapisuje ostrzeżenie z identyfikatorem uruchomienia, providerem/modelem, wykrytym wzorcem oraz nazwą narzędzia, gdy jest dostępna. Traktuj to jako niezgodność wywołań narzędzi providera/modelu, a nie ukończone uruchomienie narzędzia.
-
Jeśli narzędzia pojawiają się jako tekst asystenta zamiast się uruchamiać, na przykład surowy JSON,
XML, składnia ReAct albo pusta tablica
tool_callsw odpowiedzi providera, najpierw sprawdź, czy serwer używa szablonu/parsera chatu obsługującego wywołania narzędzi. Dla backendów Chat Completions zgodnych z OpenAI, których parser działa tylko wtedy, gdy użycie narzędzi jest wymuszone, ustaw nadpisanie żądania dla modelu zamiast polegać na parsowaniu tekstu:Używaj tego tylko dla modeli/sesji, w których każda normalna tura powinna wywoływać narzędzie. Nadpisuje to domyślną wartość proxy OpenClawtool_choice: "auto". Zastąplocal/my-local-modeldokładnym odwołaniem provider/model pokazanym przezopenclaw models list. -
Jeśli niestandardowy model zgodny z OpenAI akceptuje wysiłki rozumowania OpenAI wykraczające poza
wbudowany profil, zadeklaruj je w bloku compat modelu. Dodanie tutaj
"xhigh"sprawia, że/think xhigh, selektory sesji, walidacja Gateway i walidacjallm-taskudostępniają ten poziom dla skonfigurowanego odwołania provider/model:
Mniejsze lub bardziej restrykcyjne backendy
Jeśli model ładuje się poprawnie, ale pełne tury agenta działają nieprawidłowo, pracuj od góry do dołu — najpierw potwierdź transport, a potem zawęź obszar.-
Potwierdź, że sam model lokalny odpowiada. Bez narzędzi, bez kontekstu agenta:
-
Potwierdź routowanie Gateway. Wysyła tylko podany prompt — pomija transkrypt, inicjalizację AGENTS, składanie przez silnik kontekstu, narzędzia i dołączone serwery MCP, ale nadal sprawdza routowanie Gateway, uwierzytelnianie i wybór providera:
-
Wypróbuj tryb odchudzony. Jeśli oba testy przechodzą, ale rzeczywiste tury agenta kończą się nieprawidłowymi wywołaniami narzędzi lub zbyt dużymi promptami, włącz
agents.defaults.experimental.localModelLean: true. Usuwa trzy najcięższe narzędzia domyślne (browser,cron,message) i domyślnie umieszcza większe katalogi narzędzi za strukturalnymi kontrolkami wyszukiwania narzędzi, z wyjątkiem uruchomień, które muszą zachować bezpośrednią semantykę dostarczaniamessage. Zobacz Funkcje eksperymentalne → Tryb odchudzony modelu lokalnego, aby poznać pełne wyjaśnienie, kiedy go używać i jak potwierdzić, że jest włączony. -
W ostateczności całkowicie wyłącz narzędzia. Jeśli tryb odchudzony nie wystarczy, ustaw
models.providers.<provider>.models[].compat.supportsTools: falsedla tego wpisu modelu. Agent będzie wtedy działać bez wywołań narzędzi na tym modelu. -
Poza tym wąskim gardłem jest warstwa upstream. Jeśli backend nadal zawodzi tylko przy większych uruchomieniach OpenClaw po włączeniu trybu odchudzonego i
supportsTools: false, pozostały problem zwykle dotyczy modelu upstream albo pojemności serwera — okna kontekstu, pamięci GPU, eksmisji kv-cache lub błędu backendu. Na tym etapie nie jest to warstwa transportowa OpenClaw.
Rozwiązywanie problemów
- Gateway może połączyć się z proxy?
curl http://127.0.0.1:1234/v1/models. - Model LM Studio jest wyładowany? Załaduj ponownie; zimny start to częsta przyczyna „zawieszania się”.
- Serwer lokalny zgłasza
terminated,ECONNRESETalbo zamyka strumień w trakcie tury? OpenClaw zapisuje niskokardynalnościowemodel.call.error.failureKindoraz migawkę RSS/heap procesu OpenClaw w diagnostyce. W przypadku presji pamięci LM Studio/Ollama dopasuj ten znacznik czasu do dziennika serwera albo dziennika awarii macOS / jetsam, aby potwierdzić, czy serwer modelu został zabity. - OpenClaw wyprowadza progi preflight okna kontekstu z wykrytego okna modelu albo z nielimitowanego okna modelu, gdy
agents.defaults.contextTokensobniża efektywne okno. Ostrzega poniżej 20% z dolnym limitem 8k. Twarde blokady używają progu 10% z dolnym limitem 4k, ograniczonego do efektywnego okna kontekstu, aby zbyt duże metadane modelu nie mogły odrzucić skądinąd poprawnego limitu użytkownika. Jeśli trafisz na ten preflight, zwiększ limit kontekstu serwera/modelu albo wybierz większy model. - Błędy kontekstu? Obniż
contextWindowalbo zwiększ limit serwera. - Serwer zgodny z OpenAI zwraca
messages[].content ... expected a string? Dodajcompat.requiresStringContent: truew tym wpisie modelu. - Serwer zgodny z OpenAI zwraca
validation.keysalbo mówi, że wpisy wiadomości dopuszczają tylkoroleicontent? Dodajcompat.strictMessageKeys: truew tym wpisie modelu. - Bezpośrednie małe wywołania
/v1/chat/completionsdziałają, aleopenclaw infer model run --localzawodzi na Gemma albo innym modelu lokalnym? Najpierw sprawdź URL providera, referencję modelu, znacznik uwierzytelniania i dzienniki serwera; lokalnemodel runnie obejmuje narzędzi agenta. Jeśli lokalnemodel runsię powiedzie, ale większe tury agenta zawodzą, zmniejsz powierzchnię narzędzi agenta za pomocąlocalModelLeanalbocompat.supportsTools: false. - Wywołania narzędzi pojawiają się jako surowy tekst JSON/XML/ReAct albo provider zwraca
pustą tablicę
tool_calls? Nie dodawaj proxy, które ślepo konwertuje tekst asystenta na wykonanie narzędzi. Najpierw napraw szablon/parser czatu serwera. Jeśli model działa tylko wtedy, gdy użycie narzędzi jest wymuszone, dodaj powyższe nadpisanie dla konkretnego modeluparams.extra_body.tool_choice: "required"i używaj tego wpisu modelu tylko dla sesji, w których wywołanie narzędzia jest oczekiwane w każdej turze. - Bezpieczeństwo: modele lokalne pomijają filtry po stronie providera; utrzymuj agentów wąsko ukierunkowanych i włącz Compaction, aby ograniczyć promień rażenia wstrzyknięcia promptu.