Providers
Ollama
OpenClaw ผสานกับ API ดั้งเดิมของ Ollama (/api/chat) สำหรับโมเดลคลาวด์แบบโฮสต์และเซิร์ฟเวอร์ Ollama แบบ local/โฮสต์เอง คุณสามารถใช้ Ollama ได้สามโหมด: Cloud + Local ผ่านโฮสต์ Ollama ที่เข้าถึงได้, Cloud only กับ https://ollama.com, หรือ Local only กับโฮสต์ Ollama ที่เข้าถึงได้
OpenClaw ยังลงทะเบียน ollama-cloud เป็น id ผู้ให้บริการแบบโฮสต์ระดับ first-class สำหรับ
การใช้ Ollama Cloud โดยตรง ใช้ ref เช่น ollama-cloud/kimi-k2.5:cloud เมื่อคุณ
ต้องการการกำหนดเส้นทางแบบ cloud-only โดยไม่ใช้ id ผู้ให้บริการ ollama แบบ local ร่วมกัน
สำหรับหน้าตั้งค่าเฉพาะแบบ cloud-only โปรดดู Ollama Cloud
การกำหนดค่าผู้ให้บริการ Ollama ใช้ baseUrl เป็นคีย์มาตรฐาน OpenClaw ยังยอมรับ baseURL เพื่อความเข้ากันได้กับตัวอย่างสไตล์ OpenAI SDK แต่การกำหนดค่าใหม่ควรใช้ baseUrl
กฎการยืนยันตัวตน
โฮสต์ Local และ LAN
โฮสต์ Ollama แบบ local และ LAN ไม่ต้องใช้ bearer token จริง OpenClaw ใช้เครื่องหมาย ollama-local แบบ local เฉพาะกับ URL ฐานของ Ollama ที่เป็น loopback, เครือข่ายส่วนตัว, .local, และชื่อโฮสต์เปล่าเท่านั้น
โฮสต์ระยะไกลและ Ollama Cloud
โฮสต์สาธารณะระยะไกลและ Ollama Cloud (https://ollama.com) ต้องใช้ข้อมูลรับรองจริงผ่าน OLLAMA_API_KEY, โปรไฟล์ยืนยันตัวตน, หรือ apiKey ของผู้ให้บริการ สำหรับการใช้แบบโฮสต์โดยตรง ควรใช้ผู้ให้บริการ ollama-cloud
id ผู้ให้บริการแบบกำหนดเอง
id ผู้ให้บริการแบบกำหนดเองที่ตั้งค่า api: "ollama" จะใช้กฎเดียวกัน ตัวอย่างเช่น ผู้ให้บริการ ollama-remote ที่ชี้ไปยังโฮสต์ Ollama บน LAN ส่วนตัวสามารถใช้ apiKey: "ollama-local" ได้ และ sub-agent จะ resolve เครื่องหมายนั้นผ่าน hook ของผู้ให้บริการ Ollama แทนที่จะถือว่าเป็นข้อมูลรับรองที่ขาดหาย การค้นหาหน่วยความจำยังสามารถตั้งค่า agents.defaults.memorySearch.provider เป็น id ผู้ให้บริการแบบกำหนดเองนั้น เพื่อให้ embeddings ใช้ endpoint Ollama ที่ตรงกัน
โปรไฟล์ยืนยันตัวตน
auth-profiles.json เก็บข้อมูลรับรองสำหรับ id ผู้ให้บริการ วางการตั้งค่า endpoint (baseUrl, api, id โมเดล, headers, timeouts) ไว้ใน models.providers.<id> ไฟล์ auth-profile แบบแบนรุ่นเก่า เช่น { "ollama-windows": { "apiKey": "ollama-local" } } ไม่ใช่รูปแบบ runtime ให้รัน openclaw doctor --fix เพื่อเขียนใหม่เป็นโปรไฟล์ API key มาตรฐาน ollama-windows:default พร้อมไฟล์สำรอง baseUrl ในไฟล์นั้นเป็น noise เพื่อความเข้ากันได้และควรถูกย้ายไปยังการกำหนดค่าผู้ให้บริการ
ขอบเขต embedding หน่วยความจำ
เมื่อใช้ Ollama สำหรับ embeddings หน่วยความจำ การยืนยันตัวตนแบบ bearer จะถูกจำกัดขอบเขตไว้ที่โฮสต์ที่ประกาศไว้:
- คีย์ระดับผู้ให้บริการจะถูกส่งไปยังโฮสต์ Ollama ของผู้ให้บริการนั้นเท่านั้น
agents.*.memorySearch.remote.apiKeyจะถูกส่งไปยังโฮสต์ embedding ระยะไกลของตัวเองเท่านั้น- ค่า env
OLLAMA_API_KEYล้วนจะถูกถือเป็นธรรมเนียมของ Ollama Cloud และโดยค่าเริ่มต้นจะไม่ส่งไปยังโฮสต์ local หรือโฮสต์เอง
เริ่มต้นใช้งาน
เลือกวิธีตั้งค่าและโหมดที่คุณต้องการ
การเริ่มใช้งาน (แนะนำ)
เหมาะสำหรับ: เส้นทางที่เร็วที่สุดในการตั้งค่า Ollama cloud หรือ local ให้ใช้งานได้
รันการเริ่มใช้งาน
openclaw onboardเลือก Ollama จากรายชื่อผู้ให้บริการ
เลือกโหมดของคุณ
- Cloud + Local — โฮสต์ Ollama แบบ local พร้อมโมเดลคลาวด์ที่กำหนดเส้นทางผ่านโฮสต์นั้น
- Cloud only — โมเดล Ollama แบบโฮสต์ผ่าน
https://ollama.com - Local only — โมเดล local เท่านั้น
เลือกโมเดล
Cloud only จะถามหา OLLAMA_API_KEY และแนะนำค่าเริ่มต้นคลาวด์แบบโฮสต์ Cloud + Local และ Local only จะถามหา URL ฐานของ Ollama, ค้นหาโมเดลที่มีอยู่, และ auto-pull โมเดล local ที่เลือกหากยังไม่มี เมื่อ Ollama รายงาน tag :latest ที่ติดตั้งแล้ว เช่น gemma4:latest การตั้งค่าจะแสดงโมเดลที่ติดตั้งนั้นครั้งเดียว แทนที่จะแสดงทั้ง gemma4 และ gemma4:latest หรือ pull alias เปล่าอีกครั้ง Cloud + Local ยังตรวจสอบด้วยว่าโฮสต์ Ollama นั้นลงชื่อเข้าใช้สำหรับการเข้าถึงคลาวด์หรือไม่
ตรวจสอบว่าโมเดลพร้อมใช้งาน
openclaw models list --provider ollamaโหมดไม่โต้ตอบ
openclaw onboard --non-interactive \ --auth-choice ollama \ --accept-riskระบุ URL ฐานหรือโมเดลแบบกำหนดเองเพิ่มเติมได้:
openclaw onboard --non-interactive \ --auth-choice ollama \ --custom-base-url "http://ollama-host:11434" \ --custom-model-id "qwen3.5:27b" \ --accept-riskตั้งค่าด้วยตนเอง
เหมาะสำหรับ: การควบคุมการตั้งค่าคลาวด์หรือ local อย่างเต็มที่
เลือกคลาวด์หรือ local
- Cloud + Local: ติดตั้ง Ollama, ลงชื่อเข้าใช้ด้วย
ollama signin, และกำหนดเส้นทางคำขอคลาวด์ผ่านโฮสต์นั้น - Cloud only: ใช้
https://ollama.comกับOLLAMA_API_KEY - Local only: ติดตั้ง Ollama จาก ollama.com/download
Pull โมเดล local (local only)
ollama pull gemma4# orollama pull gpt-oss:20b# orollama pull llama3.3เปิดใช้ Ollama สำหรับ OpenClaw
สำหรับ Cloud only ให้ใช้ OLLAMA_API_KEY จริงของคุณ สำหรับการตั้งค่าที่มีโฮสต์รองรับ ค่า placeholder ใดก็ใช้ได้:
# Cloudexport OLLAMA_API_KEY="your-ollama-api-key" # Local-onlyexport OLLAMA_API_KEY="ollama-local" # Or configure in your config fileopenclaw config set models.providers.ollama.apiKey "OLLAMA_API_KEY"ตรวจสอบและตั้งค่าโมเดลของคุณ
openclaw models listopenclaw models set ollama/gemma4หรือตั้งค่าเริ่มต้นใน config:
{ agents: { defaults: { model: { primary: "ollama/gemma4" }, }, },}โมเดลคลาวด์
Cloud + Local
Cloud + Local ใช้โฮสต์ Ollama ที่เข้าถึงได้เป็นจุดควบคุมสำหรับทั้งโมเดล local และคลาวด์ นี่คือ flow แบบ hybrid ที่ Ollama แนะนำ
ใช้ Cloud + Local ระหว่างการตั้งค่า OpenClaw จะถาม URL ฐานของ Ollama, ค้นหาโมเดล local จากโฮสต์นั้น, และตรวจสอบว่าโฮสต์ลงชื่อเข้าใช้สำหรับการเข้าถึงคลาวด์ด้วย ollama signin หรือไม่ เมื่อโฮสต์ลงชื่อเข้าใช้แล้ว OpenClaw ยังแนะนำค่าเริ่มต้นคลาวด์แบบโฮสต์ เช่น kimi-k2.5:cloud, minimax-m2.7:cloud, และ glm-5.1:cloud
หากโฮสต์ยังไม่ได้ลงชื่อเข้าใช้ OpenClaw จะคงการตั้งค่าเป็น local-only จนกว่าคุณจะรัน ollama signin
Cloud only
Cloud only ทำงานกับ API แบบโฮสต์ของ Ollama ที่ https://ollama.com
ใช้ Cloud only ระหว่างการตั้งค่า OpenClaw จะถามหา OLLAMA_API_KEY, ตั้งค่า baseUrl: "https://ollama.com", และใส่รายการโมเดลคลาวด์แบบโฮสต์เริ่มต้น เส้นทางนี้ ไม่ ต้องใช้เซิร์ฟเวอร์ Ollama แบบ local หรือ ollama signin
รายการโมเดลคลาวด์ที่แสดงระหว่าง openclaw onboard ถูกเติมแบบ live จาก https://ollama.com/api/tags โดยจำกัดที่ 500 รายการ ดังนั้นตัวเลือกจะสะท้อน catalog แบบโฮสต์ปัจจุบัน แทนที่จะเป็น seed แบบคงที่ หาก ollama.com เข้าถึงไม่ได้หรือไม่ส่งคืนโมเดลระหว่างตั้งค่า OpenClaw จะ fallback ไปยังคำแนะนำแบบ hardcoded ก่อนหน้าเพื่อให้การเริ่มใช้งานยังเสร็จสมบูรณ์
คุณยังสามารถกำหนดค่าผู้ให้บริการคลาวด์ first-class ได้โดยตรง:
openclaw onboard --auth-choice ollama-cloudopenclaw models set ollama-cloud/kimi-k2.5:cloudLocal only
ในโหมด local-only OpenClaw จะค้นหาโมเดลจาก instance Ollama ที่กำหนดค่าไว้ เส้นทางนี้ใช้สำหรับเซิร์ฟเวอร์ Ollama แบบ local หรือโฮสต์เอง
ปัจจุบัน OpenClaw แนะนำ gemma4 เป็นค่าเริ่มต้นแบบ local
การค้นหาโมเดล (ผู้ให้บริการโดยนัย)
เมื่อคุณตั้งค่า OLLAMA_API_KEY (หรือโปรไฟล์ยืนยันตัวตน) และ ไม่ได้ กำหนด models.providers.ollama หรือผู้ให้บริการระยะไกลแบบกำหนดเองอื่นที่มี api: "ollama" OpenClaw จะค้นหาโมเดลจาก instance Ollama แบบ local ที่ http://127.0.0.1:11434
| พฤติกรรม | รายละเอียด |
|---|---|
| การ query catalog | Query /api/tags |
| การตรวจจับความสามารถ | ใช้การ lookup /api/show แบบ best-effort เพื่ออ่าน contextWindow, พารามิเตอร์ Modelfile num_ctx ที่ขยายแล้ว, และความสามารถรวมถึง vision/tools |
| โมเดล vision | โมเดลที่มีความสามารถ vision ซึ่งรายงานโดย /api/show จะถูกทำเครื่องหมายว่ารองรับรูปภาพ (input: ["text", "image"]) ดังนั้น OpenClaw จะ auto-inject รูปภาพเข้าไปใน prompt |
| การตรวจจับ reasoning | ใช้ความสามารถจาก /api/show เมื่อมี รวมถึง thinking; fallback ไปยัง heuristic จากชื่อโมเดล (r1, reasoning, think) เมื่อ Ollama ละเว้นความสามารถ |
| ขีดจำกัด token | ตั้งค่า maxTokens เป็นขีดจำกัด max-token เริ่มต้นของ Ollama ที่ OpenClaw ใช้ |
| ต้นทุน | ตั้งค่าต้นทุนทั้งหมดเป็น 0 |
วิธีนี้หลีกเลี่ยงรายการโมเดลด้วยตนเอง พร้อมทำให้ catalog สอดคล้องกับ instance Ollama แบบ local คุณสามารถใช้ ref เต็ม เช่น ollama/<pulled-model>:latest ใน infer model run แบบ local ได้; OpenClaw จะ resolve โมเดลที่ติดตั้งนั้นจาก catalog live ของ Ollama โดยไม่ต้องมีรายการ models.json ที่เขียนด้วยมือ
สำหรับโฮสต์ Ollama ที่ลงชื่อเข้าใช้แล้ว โมเดล :cloud บางรายการอาจใช้งานได้ผ่าน /api/chat
และ /api/show ก่อนที่จะปรากฏใน /api/tags เมื่อคุณเลือก ref
เต็ม ollama/<model>:cloud อย่างชัดเจน OpenClaw จะ validate โมเดลที่หายไปแบบเจาะจงนั้นด้วย
/api/show และเพิ่มเข้าไปใน runtime catalog เฉพาะเมื่อ Ollama ยืนยัน metadata
ของโมเดลเท่านั้น การพิมพ์ผิดยังคงล้มเหลวเป็นโมเดลที่ไม่รู้จัก แทนที่จะถูกสร้างอัตโนมัติ
# See what models are availableollama listopenclaw models listสำหรับการทดสอบ smoke test การสร้างข้อความแบบแคบที่หลีกเลี่ยงพื้นผิวเครื่องมือ agent เต็มรูปแบบ
ให้ใช้ infer model run แบบ local กับ ref โมเดล Ollama แบบเต็ม:
OLLAMA_API_KEY=ollama-local \ openclaw infer model run \ --local \ --model ollama/llama3.2:latest \ --prompt "Reply with exactly: pong" \ --jsonเส้นทางนั้นยังคงใช้ผู้ให้บริการ, การยืนยันตัวตน, และ transport ดั้งเดิมของ Ollama ที่ OpenClaw กำหนดค่าไว้ แต่จะไม่เริ่ม turn ของ chat-agent หรือโหลดบริบท MCP/tool หาก สิ่งนี้สำเร็จขณะที่การตอบกลับของ agent ปกติล้มเหลว ให้แก้ปัญหาความจุของ prompt/tool สำหรับ agent ของโมเดลเป็นลำดับถัดไป
สำหรับ smoke test โมเดล vision แบบแคบบนเส้นทาง lean เดียวกัน ให้เพิ่มไฟล์รูปภาพหนึ่งไฟล์หรือมากกว่า
ไปยัง infer model run วิธีนี้ส่ง prompt และรูปภาพโดยตรงไปยัง
โมเดล vision ของ Ollama ที่เลือก โดยไม่โหลดเครื่องมือแชต, หน่วยความจำ, หรือบริบท session
ก่อนหน้า:
OLLAMA_API_KEY=ollama-local \ openclaw infer model run \ --local \ --model ollama/qwen2.5vl:7b \ --prompt "Describe this image in one sentence." \ --file ./photo.jpg \ --jsonmodel run --file รับไฟล์ที่ตรวจพบเป็น image/* รวมถึงอินพุต PNG,
JPEG และ WebP ทั่วไป ไฟล์ที่ไม่ใช่รูปภาพจะถูกปฏิเสธก่อนเรียก Ollama
สำหรับการรู้จำเสียง ให้ใช้ openclaw infer audio transcribe แทน
เมื่อคุณสลับการสนทนาด้วย /model ollama/<model> OpenClaw จะถือว่า
เป็นการเลือกของผู้ใช้อย่างเจาะจง หาก Ollama baseUrl ที่กำหนดค่าไว้
เข้าถึงไม่ได้ การตอบกลับถัดไปจะล้มเหลวด้วยข้อผิดพลาดของผู้ให้บริการ แทนที่จะตอบ
จากโมเดลสำรองอื่นที่กำหนดค่าไว้แบบเงียบ ๆ
งาน Cron แบบแยกเดี่ยวจะทำการตรวจสอบความปลอดภัยภายในเครื่องเพิ่มอีกหนึ่งครั้งก่อนเริ่ม
เทิร์นของเอเจนต์ หากโมเดลที่เลือก resolve ไปยังผู้ให้บริการ Ollama แบบภายในเครื่อง,
เครือข่ายส่วนตัว หรือ .local และเข้าถึง /api/tags ไม่ได้ OpenClaw จะบันทึกการรัน Cron นั้น
เป็น skipped พร้อม ollama/<model> ที่เลือกไว้ในข้อความข้อผิดพลาด endpoint
preflight จะถูกแคชไว้ 5 นาที ดังนั้นงาน Cron หลายงานที่ชี้ไปยัง daemon Ollama เดียวกัน
ที่หยุดอยู่จะไม่ทั้งหมดเริ่มคำขอโมเดลที่ล้มเหลว
ตรวจสอบแบบ live-verify เส้นทางข้อความภายในเครื่อง, เส้นทาง native stream และ embeddings กับ Ollama ภายในเครื่องด้วย:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA=1 OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=0 \ pnpm test:live -- extensions/ollama/ollama.live.test.tsสำหรับการทดสอบ smoke ของ API key สำหรับ Ollama Cloud ให้ชี้ live test ไปที่ https://ollama.com
และเลือกโมเดลแบบ hosted จากแค็ตตาล็อกปัจจุบัน:
export OLLAMA_API_KEY='<your-ollama-cloud-api-key>' OPENCLAW_LIVE_TEST=1 \OPENCLAW_LIVE_OLLAMA=1 \OPENCLAW_LIVE_OLLAMA_BASE_URL=https://ollama.com \OPENCLAW_LIVE_OLLAMA_MODEL=glm-5.1:cloud \OPENCLAW_LIVE_OLLAMA_WEB_SEARCH=1 \pnpm test:live -- extensions/ollama/ollama.live.test.tsCloud smoke จะรันข้อความ, native stream และ web search โดยค่าเริ่มต้นจะข้าม embeddings
สำหรับ https://ollama.com เพราะ API key ของ Ollama Cloud อาจไม่มีสิทธิ์ใช้งาน
/api/embed ตั้งค่า OPENCLAW_LIVE_OLLAMA_EMBEDDINGS=1 เมื่อคุณต้องการอย่างชัดเจน
ให้ live test ล้มเหลวหาก cloud key ที่กำหนดค่าไว้ใช้งาน embed endpoint ไม่ได้
หากต้องการเพิ่มโมเดลใหม่ เพียง pull ด้วย Ollama:
ollama pull mistralโมเดลใหม่จะถูกค้นพบโดยอัตโนมัติและพร้อมใช้งาน
วิสัยทัศน์และคำอธิบายรูปภาพ
Plugin Ollama ที่รวมมาให้จะลงทะเบียน Ollama เป็นผู้ให้บริการความเข้าใจสื่อที่รองรับรูปภาพ ซึ่งทำให้ OpenClaw สามารถ route คำขออธิบายรูปภาพแบบชัดเจนและค่าเริ่มต้นของโมเดลรูปภาพที่กำหนดค่าไว้ผ่านโมเดล vision ของ Ollama ทั้งแบบภายในเครื่องหรือแบบ hosted
สำหรับ vision ภายในเครื่อง ให้ pull โมเดลที่รองรับรูปภาพ:
ollama pull qwen2.5vl:7bexport OLLAMA_API_KEY="ollama-local"จากนั้นตรวจสอบด้วย infer CLI:
openclaw infer image describe \ --file ./photo.jpg \ --model ollama/qwen2.5vl:7b \ --json--model ต้องเป็น ref เต็มรูปแบบ <provider/model> เมื่อกำหนดค่านี้ openclaw infer image describe จะรันโมเดลนั้นโดยตรง แทนที่จะข้ามคำอธิบายเพราะโมเดลรองรับ native vision
ใช้ infer image describe เมื่อคุณต้องการ flow ผู้ให้บริการความเข้าใจรูปภาพของ OpenClaw, agents.defaults.imageModel ที่กำหนดค่าไว้ และรูปแบบเอาต์พุตคำอธิบายรูปภาพ ใช้ infer model run --file เมื่อคุณต้องการ probe โมเดล multimodal แบบ raw พร้อม prompt แบบกำหนดเองและรูปภาพหนึ่งรูปหรือมากกว่า
หากต้องการทำให้ Ollama เป็นโมเดลความเข้าใจรูปภาพเริ่มต้นสำหรับสื่อขาเข้า ให้กำหนดค่า agents.defaults.imageModel:
{ agents: { defaults: { imageModel: { primary: "ollama/qwen2.5vl:7b", }, }, },}แนะนำให้ใช้ ref เต็มรูปแบบ ollama/<model> หากโมเดลเดียวกันอยู่ในรายการภายใต้ models.providers.ollama.models พร้อม input: ["text", "image"] และไม่มีผู้ให้บริการรูปภาพอื่นที่กำหนดค่าไว้ expose ID โมเดลแบบ bare เดียวกัน OpenClaw จะ normalize ref imageModel แบบ bare เช่น qwen2.5vl:7b เป็น ollama/qwen2.5vl:7b ด้วย หากมีผู้ให้บริการรูปภาพที่กำหนดค่าไว้มากกว่าหนึ่งรายมี ID แบบ bare เดียวกัน ให้ใช้คำนำหน้าผู้ให้บริการอย่างชัดเจน
โมเดล vision ภายในเครื่องที่ช้าอาจต้องใช้ timeout สำหรับความเข้าใจรูปภาพนานกว่าโมเดล cloud นอกจากนี้ยังอาจ crash หรือหยุดทำงานเมื่อ Ollama พยายามจัดสรร vision context เต็มตามที่ประกาศไว้บนฮาร์ดแวร์ที่มีข้อจำกัด ตั้งค่า capability timeout และจำกัด num_ctx ในรายการโมเดลเมื่อคุณต้องการเพียงเทิร์นคำอธิบายรูปภาพปกติ:
{ models: { providers: { ollama: { models: [ { id: "qwen2.5vl:7b", name: "qwen2.5vl:7b", input: ["text", "image"], params: { num_ctx: 2048, keep_alive: "1m" }, }, ], }, }, }, tools: { media: { image: { timeoutSeconds: 180, models: [{ provider: "ollama", model: "qwen2.5vl:7b", timeoutSeconds: 300 }], }, }, },}timeout นี้ใช้กับความเข้าใจรูปภาพขาเข้าและเครื่องมือ image แบบชัดเจนที่เอเจนต์เรียกใช้ได้ระหว่างเทิร์น models.providers.ollama.timeoutSeconds ระดับผู้ให้บริการยังคงควบคุมตัวป้องกันคำขอ HTTP ของ Ollama ที่อยู่ข้างใต้สำหรับการเรียกโมเดลปกติ
ตรวจสอบแบบ live-verify เครื่องมือรูปภาพแบบชัดเจนกับ Ollama ภายในเครื่องด้วย:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_OLLAMA_IMAGE=1 \ pnpm test:live -- src/agents/tools/image-tool.ollama.live.test.tsหากคุณกำหนด models.providers.ollama.models ด้วยตนเอง ให้ทำเครื่องหมายโมเดล vision ว่ารองรับอินพุตรูปภาพ:
{ id: "qwen2.5vl:7b", name: "qwen2.5vl:7b", input: ["text", "image"], contextWindow: 128000, maxTokens: 8192,}OpenClaw จะปฏิเสธคำขอคำอธิบายรูปภาพสำหรับโมเดลที่ไม่ได้ทำเครื่องหมายว่ารองรับรูปภาพ เมื่อใช้การค้นพบแบบ implicit OpenClaw จะอ่านค่านี้จาก Ollama เมื่อ /api/show รายงาน capability ด้าน vision
การกำหนดค่า
Basic (implicit discovery)
เส้นทางเปิดใช้งานแบบภายในเครื่องเท่านั้นที่ง่ายที่สุดคือผ่านตัวแปรสภาพแวดล้อม:
export OLLAMA_API_KEY="ollama-local"Explicit (manual models)
ใช้การกำหนดค่าแบบชัดเจนเมื่อคุณต้องการตั้งค่า cloud แบบ hosted, Ollama รันบน host/port อื่น, ต้องการบังคับ context window หรือรายการโมเดลเฉพาะ หรือคุณต้องการนิยามโมเดลด้วยตนเองทั้งหมด
{ models: { providers: { ollama: { baseUrl: "https://ollama.com", apiKey: "OLLAMA_API_KEY", api: "ollama", models: [ { id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", reasoning: false, input: ["text", "image"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 128000, maxTokens: 8192 } ] } } }}Custom base URL
หาก Ollama รันบน host หรือ port อื่น (การกำหนดค่าแบบชัดเจนจะปิดใช้งานการค้นพบอัตโนมัติ ดังนั้นให้กำหนดโมเดลด้วยตนเอง):
{ models: { providers: { ollama: { apiKey: "ollama-local", baseUrl: "http://ollama-host:11434", // No /v1 - use native Ollama API URL api: "ollama", // Set explicitly to guarantee native tool-calling behavior timeoutSeconds: 300, // Optional: give cold local models longer to connect and stream models: [ { id: "qwen3:32b", name: "qwen3:32b", params: { keep_alive: "15m", // Optional: keep the model loaded between turns }, }, ], }, }, },}สูตรที่พบบ่อย
ใช้รายการเหล่านี้เป็นจุดเริ่มต้นและแทนที่ ID โมเดลด้วยชื่อที่ตรงจาก ollama list หรือ openclaw models list --provider ollama
Local model with auto-discovery
ใช้ตัวเลือกนี้เมื่อ Ollama รันบนเครื่องเดียวกับ Gateway และคุณต้องการให้ OpenClaw ค้นพบโมเดลที่ติดตั้งไว้โดยอัตโนมัติ
ollama serveollama pull gemma4export OLLAMA_API_KEY="ollama-local"openclaw models list --provider ollamaopenclaw models set ollama/gemma4เส้นทางนี้ทำให้การกำหนดค่าน้อยที่สุด อย่าเพิ่มบล็อก models.providers.ollama เว้นแต่คุณต้องการกำหนดโมเดลด้วยตนเอง
LAN Ollama host with manual models
ใช้ URL ของ Ollama แบบ native สำหรับ host ใน LAN อย่าเพิ่ม /v1
{ models: { providers: { ollama: { baseUrl: "http://gpu-box.local:11434", apiKey: "ollama-local", api: "ollama", timeoutSeconds: 300, contextWindow: 32768, maxTokens: 8192, models: [ { id: "qwen3.5:9b", name: "qwen3.5:9b", reasoning: true, input: ["text"], params: { num_ctx: 32768, thinking: false, keep_alive: "15m", }, }, ], }, }, }, agents: { defaults: { model: { primary: "ollama/qwen3.5:9b" }, }, },}contextWindow คือ budget ของ context ฝั่ง OpenClaw params.num_ctx จะถูกส่งไปยัง Ollama สำหรับคำขอ จัดให้สอดคล้องกันเมื่อฮาร์ดแวร์ของคุณไม่สามารถรัน context เต็มตามที่โมเดลประกาศไว้ได้
Ollama Cloud only
ใช้ตัวเลือกนี้เมื่อคุณไม่ได้รัน daemon ภายในเครื่องและต้องการใช้โมเดล Ollama แบบ hosted โดยตรง
export OLLAMA_API_KEY="your-ollama-api-key"{ models: { providers: { ollama: { baseUrl: "https://ollama.com", apiKey: "OLLAMA_API_KEY", api: "ollama", models: [ { id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", reasoning: false, input: ["text", "image"], contextWindow: 128000, maxTokens: 8192, }, ], }, }, }, agents: { defaults: { model: { primary: "ollama/kimi-k2.5:cloud" }, }, },}Cloud plus local through a signed-in daemon
ใช้ตัวเลือกนี้เมื่อ daemon Ollama ภายในเครื่องหรือใน LAN ได้ลงชื่อเข้าใช้ด้วย ollama signin และควรให้บริการทั้งโมเดลภายในเครื่องและโมเดล :cloud
ollama signinollama pull gemma4{ models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", apiKey: "ollama-local", api: "ollama", timeoutSeconds: 300, models: [ { id: "gemma4", name: "gemma4", input: ["text"] }, { id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", input: ["text", "image"] }, ], }, }, }, agents: { defaults: { model: { primary: "ollama/gemma4", fallbacks: ["ollama/kimi-k2.5:cloud"], }, }, },}Multiple Ollama hosts
ใช้ ID ผู้ให้บริการแบบกำหนดเองเมื่อคุณมีเซิร์ฟเวอร์ Ollama มากกว่าหนึ่งเครื่อง ผู้ให้บริการแต่ละรายจะมี host, โมเดล, auth, timeout และ ref โมเดลของตนเอง
{ models: { providers: { "ollama-fast": { baseUrl: "http://mini.local:11434", apiKey: "ollama-local", api: "ollama", contextWindow: 32768, models: [{ id: "gemma4", name: "gemma4", input: ["text"] }], }, "ollama-large": { baseUrl: "http://gpu-box.local:11434", apiKey: "ollama-local", api: "ollama", timeoutSeconds: 420, contextWindow: 131072, maxTokens: 16384, models: [{ id: "qwen3.5:27b", name: "qwen3.5:27b", input: ["text"] }], }, }, }, agents: { defaults: { model: { primary: "ollama-fast/gemma4", fallbacks: ["ollama-large/qwen3.5:27b"], }, }, },}เมื่อ OpenClaw ส่งคำขอ คำนำหน้าผู้ให้บริการที่ใช้งานอยู่จะถูกตัดออก ดังนั้น ollama-large/qwen3.5:27b จะไปถึง Ollama เป็น qwen3.5:27b
โปรไฟล์โมเดลภายในเครื่องแบบประหยัด
โมเดลภายในเครื่องบางตัวสามารถตอบพรอมป์ง่าย ๆ ได้ แต่มีปัญหากับพื้นผิวเครื่องมือตัวแทนแบบเต็มรูปแบบ ให้เริ่มด้วยการจำกัดเครื่องมือและบริบทก่อนเปลี่ยนการตั้งค่ารันไทม์ส่วนกลาง
{ agents: { list: [ { id: "local", experimental: { localModelLean: true, }, model: { primary: "ollama/gemma4" }, }, ], }, models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", apiKey: "ollama-local", api: "ollama", contextWindow: 32768, models: [ { id: "gemma4", name: "gemma4", input: ["text"], params: { num_ctx: 32768 }, compat: { supportsTools: false }, }, ], }, }, },}ใช้ compat.supportsTools: false เฉพาะเมื่อโมเดลหรือเซิร์ฟเวอร์ล้มเหลวกับสคีมาเครื่องมืออย่างสม่ำเสมอเท่านั้น ซึ่งเป็นการแลกความสามารถของตัวแทนกับเสถียรภาพ
localModelLean จะลบเครื่องมือเบราว์เซอร์, cron และข้อความออกจากพื้นผิวตัวแทนโดยตรง และตั้งค่าเริ่มต้นให้แค็ตตาล็อกขนาดใหญ่อยู่หลังตัวควบคุม Tool Search แบบมีโครงสร้าง ยกเว้นเมื่อการรันต้องคงความหมายของการส่งข้อความโดยตรงไว้ แต่จะไม่เปลี่ยนบริบทรันไทม์หรือโหมดการคิดของ Ollama จับคู่กับ params.num_ctx และ params.thinking: false อย่างชัดเจนสำหรับโมเดลคิดแบบ Qwen ขนาดเล็กที่วนซ้ำหรือใช้โควตาการตอบสนองไปกับการให้เหตุผลที่ซ่อนอยู่
การเลือกโมเดล
เมื่อกำหนดค่าแล้ว โมเดล Ollama ทั้งหมดของคุณจะพร้อมใช้งาน:
{ agents: { defaults: { model: { primary: "ollama/gpt-oss:20b", fallbacks: ["ollama/llama3.3", "ollama/qwen2.5-coder:32b"], }, }, },}รองรับ ID ผู้ให้บริการ Ollama แบบกำหนดเองด้วย เมื่อการอ้างอิงโมเดลใช้คำนำหน้าผู้ให้บริการที่ใช้งานอยู่
เช่น ollama-spark/qwen3:32b OpenClaw จะตัดเฉพาะคำนำหน้านั้น
ก่อนเรียก Ollama เพื่อให้เซิร์ฟเวอร์ได้รับ qwen3:32b
สำหรับโมเดลภายในเครื่องที่ช้า ให้เลือกปรับแต่งคำขอในขอบเขตผู้ให้บริการก่อนเพิ่ม เวลาหมดเวลารันไทม์ของตัวแทนทั้งหมด:
{ models: { providers: { ollama: { timeoutSeconds: 300, models: [ { id: "gemma4:26b", name: "gemma4:26b", params: { keep_alive: "15m" }, }, ], }, }, },}timeoutSeconds ใช้กับคำขอ HTTP ของโมเดล รวมถึงการตั้งค่าการเชื่อมต่อ
ส่วนหัว การสตรีมเนื้อความ และการยกเลิก guarded-fetch ทั้งหมด params.keep_alive
จะถูกส่งต่อไปยัง Ollama เป็น keep_alive ระดับบนสุดในคำขอ /api/chat แบบเนทีฟ
ให้ตั้งค่าต่อโมเดลเมื่อเวลาโหลดเทิร์นแรกเป็นคอขวด
การตรวจสอบอย่างรวดเร็ว
# Ollama daemon visible to this machinecurl http://127.0.0.1:11434/api/tags # OpenClaw catalog and selected modelopenclaw models list --provider ollamaopenclaw models status # Direct model smokeopenclaw infer model run \ --model ollama/gemma4 \ --prompt "Reply with exactly: ok"สำหรับโฮสต์ระยะไกล ให้แทนที่ 127.0.0.1 ด้วยโฮสต์ที่ใช้ใน baseUrl หาก curl ทำงานแต่ OpenClaw ไม่ทำงาน ให้ตรวจสอบว่า Gateway ทำงานอยู่บนเครื่อง คอนเทนเนอร์ หรือบัญชีบริการอื่นหรือไม่
Ollama Web Search
OpenClaw รองรับ Ollama Web Search เป็นผู้ให้บริการ web_search ที่รวมมาให้
| คุณสมบัติ | รายละเอียด |
|---|---|
| โฮสต์ | ใช้โฮสต์ Ollama ที่คุณกำหนดค่าไว้ (models.providers.ollama.baseUrl เมื่อตั้งค่าไว้ มิฉะนั้นใช้ http://127.0.0.1:11434); https://ollama.com ใช้ API ที่โฮสต์โดยตรง |
| การยืนยันตัวตน | ไม่ต้องใช้คีย์สำหรับโฮสต์ Ollama ภายในเครื่องที่ลงชื่อเข้าใช้แล้ว; ใช้ OLLAMA_API_KEY หรือการยืนยันตัวตนผู้ให้บริการที่กำหนดค่าไว้สำหรับการค้นหา https://ollama.com โดยตรงหรือโฮสต์ที่ป้องกันด้วยการยืนยันตัวตน |
| ข้อกำหนด | โฮสต์ภายในเครื่อง/โฮสต์เองต้องทำงานอยู่และลงชื่อเข้าใช้ด้วย ollama signin; การค้นหาที่โฮสต์โดยตรงต้องใช้ baseUrl: "https://ollama.com" พร้อมคีย์ Ollama API จริง |
เลือก Ollama Web Search ระหว่าง openclaw onboard หรือ openclaw configure --section web หรือตั้งค่า:
{ tools: { web: { search: { provider: "ollama", }, }, },}สำหรับการค้นหาที่โฮสต์โดยตรงผ่าน Ollama Cloud:
{ models: { providers: { ollama: { baseUrl: "https://ollama.com", apiKey: "OLLAMA_API_KEY", api: "ollama", models: [{ id: "kimi-k2.5:cloud", name: "kimi-k2.5:cloud", input: ["text"] }], }, }, }, tools: { web: { search: { provider: "ollama" }, }, },}สำหรับดีมอนภายในเครื่องที่ลงชื่อเข้าใช้แล้ว OpenClaw จะใช้พร็อกซี /api/experimental/web_search ของดีมอน สำหรับ https://ollama.com จะเรียกปลายทาง /api/web_search ที่โฮสต์โดยตรง
การกำหนดค่าขั้นสูง
โหมดเดิมที่เข้ากันได้กับ OpenAI
หากคุณจำเป็นต้องใช้ปลายทางที่เข้ากันได้กับ OpenAI แทน (เช่น อยู่หลังพร็อกซีที่รองรับเฉพาะรูปแบบ OpenAI) ให้ตั้งค่า api: "openai-completions" อย่างชัดเจน:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434/v1", api: "openai-completions", injectNumCtxForOpenAICompat: true, // default: true apiKey: "ollama-local", models: [...] } } }}โหมดนี้อาจไม่รองรับการสตรีมและการเรียกใช้เครื่องมือพร้อมกัน คุณอาจต้องปิดการสตรีมด้วย params: { streaming: false } ในการกำหนดค่าโมเดล
เมื่อใช้ api: "openai-completions" กับ Ollama OpenClaw จะฉีด options.num_ctx ตามค่าเริ่มต้น เพื่อให้ Ollama ไม่ย้อนกลับไปใช้หน้าต่างบริบท 4096 อย่างเงียบ ๆ หากพร็อกซี/อัปสตรีมของคุณปฏิเสธฟิลด์ options ที่ไม่รู้จัก ให้ปิดพฤติกรรมนี้:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434/v1", api: "openai-completions", injectNumCtxForOpenAICompat: false, apiKey: "ollama-local", models: [...] } } }}หน้าต่างบริบท
สำหรับโมเดลที่ค้นพบอัตโนมัติ OpenClaw จะใช้หน้าต่างบริบทที่ Ollama รายงานเมื่อมี รวมถึงค่า PARAMETER num_ctx ที่ใหญ่ขึ้นจาก Modelfile แบบกำหนดเอง มิฉะนั้นจะย้อนกลับไปใช้หน้าต่างบริบทเริ่มต้นของ Ollama ที่ OpenClaw ใช้
คุณสามารถตั้งค่าเริ่มต้น contextWindow, contextTokens และ maxTokens ระดับผู้ให้บริการสำหรับทุกโมเดลภายใต้ผู้ให้บริการ Ollama นั้น แล้วแทนที่เป็นรายโมเดลเมื่อจำเป็น contextWindow คือโควตาพรอมป์และ Compaction ของ OpenClaw คำขอ Ollama แบบเนทีฟจะปล่อย options.num_ctx ไว้โดยไม่ตั้งค่า เว้นแต่คุณจะกำหนดค่า params.num_ctx อย่างชัดเจน เพื่อให้ Ollama ใช้ค่าเริ่มต้นตามโมเดลของตัวเอง, OLLAMA_CONTEXT_LENGTH หรือ VRAM ได้ หากต้องการจำกัดหรือบังคับบริบทรันไทม์ต่อคำขอของ Ollama โดยไม่ต้องสร้าง Modelfile ใหม่ ให้ตั้งค่า params.num_ctx; ค่าที่ไม่ถูกต้อง เป็นศูนย์ ติดลบ และไม่จำกัดจะถูกละเว้น หากคุณอัปเกรดการกำหนดค่าเก่าที่ใช้เฉพาะ contextWindow หรือ maxTokens เพื่อบังคับบริบทคำขอ Ollama แบบเนทีฟ ให้รัน openclaw doctor --fix เพื่อคัดลอกโควตาผู้ให้บริการหรือโมเดลที่ชัดเจนเหล่านั้นไปยัง params.num_ctx อะแดปเตอร์ Ollama ที่เข้ากันได้กับ OpenAI ยังคงฉีด options.num_ctx ตามค่าเริ่มต้นจาก params.num_ctx หรือ contextWindow ที่กำหนดค่าไว้; ปิดด้วย injectNumCtxForOpenAICompat: false หากอัปสตรีมของคุณปฏิเสธ options
รายการโมเดล Ollama แบบเนทีฟยังยอมรับตัวเลือกรันไทม์ Ollama ทั่วไปภายใต้ params รวมถึง temperature, top_p, top_k, min_p, num_predict, stop, repeat_penalty, num_batch, num_thread และ use_mmap OpenClaw จะส่งต่อเฉพาะคีย์คำขอ Ollama ดังนั้นพารามิเตอร์รันไทม์ OpenClaw เช่น streaming จะไม่รั่วไปยัง Ollama ใช้ params.think หรือ params.thinking เพื่อส่ง think ระดับบนสุดของ Ollama; false จะปิดการคิดระดับ API สำหรับโมเดลคิดแบบ Qwen
{ models: { providers: { ollama: { contextWindow: 32768, models: [ { id: "llama3.3", contextWindow: 131072, maxTokens: 65536, params: { num_ctx: 32768, temperature: 0.7, top_p: 0.9, thinking: false, }, } ] } } }}agents.defaults.models["ollama/<model>"].params.num_ctx ต่อโมเดลก็ใช้ได้เช่นกัน หากกำหนดค่าทั้งสองแบบ รายการโมเดลผู้ให้บริการที่ชัดเจนจะมีผลเหนือกว่าค่าเริ่มต้นของตัวแทน
การควบคุมการคิด
สำหรับโมเดล Ollama แบบเนทีฟ OpenClaw จะส่งต่อการควบคุมการคิดตามที่ Ollama คาดหวัง: think ระดับบนสุด ไม่ใช่ options.think โมเดลที่ค้นพบอัตโนมัติซึ่งการตอบกลับ /api/show มีความสามารถ thinking จะแสดง /think low, /think medium, /think high และ /think max; โมเดลที่ไม่คิดจะแสดงเฉพาะ /think off
openclaw agent --model ollama/gemma4 --thinking offopenclaw agent --model ollama/gemma4 --thinking lowคุณยังสามารถตั้งค่าเริ่มต้นของโมเดลได้:
{ agents: { defaults: { models: { "ollama/gemma4": { thinking: "low", }, }, }, },}params.think หรือ params.thinking ต่อโมเดลสามารถปิดหรือบังคับการคิดผ่าน Ollama API สำหรับโมเดลที่กำหนดค่าไว้โดยเฉพาะ OpenClaw จะคงพารามิเตอร์โมเดลที่ชัดเจนเหล่านั้นไว้เมื่อการรันที่ใช้งานอยู่มีเพียงค่าเริ่มต้นโดยนัย off; คำสั่งรันไทม์ที่ไม่ใช่ off เช่น /think medium ยังคงแทนที่การรันที่ใช้งานอยู่
โมเดลให้เหตุผล
OpenClaw ถือว่าโมเดลที่มีชื่ออย่าง deepseek-r1, reasoning หรือ think มีความสามารถในการให้เหตุผลตามค่าเริ่มต้น
ollama pull deepseek-r1:32bไม่จำเป็นต้องกำหนดค่าเพิ่มเติม OpenClaw จะทำเครื่องหมายโมเดลเหล่านั้นโดยอัตโนมัติ
ค่าใช้จ่ายของโมเดล
Ollama ฟรีและทำงานภายในเครื่อง ดังนั้นค่าใช้จ่ายโมเดลทั้งหมดจึงถูกตั้งเป็น $0 ซึ่งใช้กับทั้งโมเดลที่ค้นพบอัตโนมัติและโมเดลที่กำหนดด้วยตนเอง
การฝังเวกเตอร์หน่วยความจำ
Plugin Ollama ที่รวมมาด้วยจะลงทะเบียนผู้ให้บริการการฝังเวกเตอร์หน่วยความจำสำหรับ
การค้นหาหน่วยความจำ โดยใช้ URL ฐานของ Ollama
และ API key ที่กำหนดค่าไว้ เรียก endpoint /api/embed ปัจจุบันของ Ollama และจัดชุด
ชิ้นส่วนหน่วยความจำหลายรายการไว้ในคำขอ input เดียวเมื่อทำได้
เมื่อ proxy.enabled=true คำขอฝังเวกเตอร์หน่วยความจำของ Ollama ไปยังต้นทาง
host-local loopback ที่ตรงกันทุกประการซึ่งได้มาจาก baseUrl ที่กำหนดค่าไว้ จะใช้เส้นทางตรงที่มีการป้องกันของ
OpenClaw แทน managed forward proxy ชื่อโฮสต์ที่กำหนดค่าไว้ต้องเป็น localhost
หรือ IP literal แบบ loopback เองเท่านั้น ชื่อ DNS ที่เพียงแค่ resolve ไปยัง loopback
ยังคงใช้เส้นทาง managed proxy โฮสต์ Ollama บน LAN, tailnet, เครือข่ายส่วนตัว
และสาธารณะก็ยังคงอยู่บนเส้นทาง managed proxy เช่นกัน การเปลี่ยนเส้นทางไปยังโฮสต์หรือพอร์ตอื่น
จะไม่สืบทอดความน่าเชื่อถือ ผู้ปฏิบัติงานยังสามารถตั้งค่า proxy.loopbackMode: "proxy" ระดับ global
เพื่อส่งทราฟฟิก loopback ผ่าน proxy หรือ proxy.loopbackMode: "block"
เพื่อปฏิเสธการเชื่อมต่อ loopback ก่อนเปิดการเชื่อมต่อได้ ดู
Managed proxy สำหรับผลกระทบทั่วทั้งกระบวนการ
ของการตั้งค่านี้
| คุณสมบัติ | ค่า |
|---|---|
| โมเดลเริ่มต้น | nomic-embed-text |
| ดึงอัตโนมัติ | ใช่ — โมเดลฝังเวกเตอร์จะถูกดึงโดยอัตโนมัติหากยังไม่มีในเครื่อง |
การฝังเวกเตอร์ขณะ query ใช้คำนำหน้าการดึงข้อมูลสำหรับโมเดลที่ต้องใช้หรือแนะนำให้ใช้ รวมถึง nomic-embed-text, qwen3-embedding และ mxbai-embed-large ชุดเอกสารหน่วยความจำจะคงเป็น raw เพื่อให้ดัชนีที่มีอยู่ไม่ต้องย้ายรูปแบบ
หากต้องการเลือก Ollama เป็นผู้ให้บริการการฝังเวกเตอร์สำหรับการค้นหาหน่วยความจำ:
{ agents: { defaults: { memorySearch: { provider: "ollama", remote: { // Default for Ollama. Raise on larger hosts if reindexing is too slow. nonBatchConcurrency: 1, }, }, }, },}สำหรับโฮสต์ฝังเวกเตอร์ระยะไกล ให้จำกัด auth ให้อยู่เฉพาะโฮสต์นั้น:
{ agents: { defaults: { memorySearch: { provider: "ollama", model: "nomic-embed-text", remote: { baseUrl: "http://gpu-box.local:11434", apiKey: "ollama-local", nonBatchConcurrency: 2, }, }, }, },}การกำหนดค่า Streaming
การผสานรวม Ollama ของ OpenClaw ใช้ API ดั้งเดิมของ Ollama (/api/chat) เป็นค่าเริ่มต้น ซึ่งรองรับทั้ง streaming และการเรียกใช้เครื่องมือพร้อมกันอย่างสมบูรณ์ ไม่จำเป็นต้องกำหนดค่าพิเศษ
สำหรับคำขอ /api/chat ดั้งเดิม OpenClaw ยังส่งต่อการควบคุม thinking ไปยัง Ollama โดยตรง: /think off และ openclaw agent --thinking off จะส่ง think: false ระดับบนสุด เว้นแต่จะมีการกำหนดค่าโมเดล params.think/params.thinking ไว้อย่างชัดเจน ส่วน /think low|medium|high จะส่งสตริง effort ของ think ระดับบนสุดที่ตรงกัน /think max จะ map ไปยัง effort ดั้งเดิมสูงสุดของ Ollama คือ think: "high"
การแก้ปัญหา
WSL2 crash loop (รีบูตซ้ำ)
บน WSL2 ที่ใช้ NVIDIA/CUDA ตัวติดตั้ง Ollama Linux อย่างเป็นทางการจะสร้าง systemd unit ชื่อ ollama.service พร้อม Restart=always หากบริการนั้นเริ่มอัตโนมัติและโหลดโมเดลที่ใช้ GPU ระหว่างการ boot ของ WSL2 Ollama อาจตรึงหน่วยความจำของโฮสต์ไว้ขณะโหลดโมเดล Hyper-V memory reclaim อาจไม่สามารถ reclaim หน้าเหล่านั้นที่ถูกตรึงไว้ได้เสมอ ทำให้ Windows อาจหยุด VM ของ WSL2, systemd เริ่ม Ollama อีกครั้ง และเกิดวงจรซ้ำ
หลักฐานที่พบบ่อย:
- WSL2 รีบูตหรือถูกหยุดซ้ำจากฝั่ง Windows
- CPU สูงใน
app.sliceหรือollama.serviceไม่นานหลังจาก WSL2 เริ่มทำงาน - SIGTERM จาก systemd แทนที่จะเป็นเหตุการณ์ Linux OOM-killer
OpenClaw จะบันทึกคำเตือนตอนเริ่มต้นเมื่อพบ WSL2, ollama.service ที่เปิดใช้พร้อม Restart=always และ marker ของ CUDA ที่มองเห็นได้
การบรรเทาปัญหา:
sudo systemctl disable ollamaเพิ่มสิ่งนี้ลงใน %USERPROFILE%\.wslconfig ที่ฝั่ง Windows แล้วเรียกใช้ wsl --shutdown:
[experimental]autoMemoryReclaim=disabledตั้ง keep-alive ที่สั้นลงในสภาพแวดล้อมของบริการ Ollama หรือเริ่ม Ollama ด้วยตนเองเฉพาะเมื่อต้องใช้:
export OLLAMA_KEEP_ALIVE=5mollama serveตรวจไม่พบ Ollama
ตรวจสอบว่า Ollama กำลังทำงานอยู่ และคุณตั้งค่า OLLAMA_API_KEY แล้ว (หรือมีโปรไฟล์ auth) และคุณ ไม่ได้ กำหนดรายการ models.providers.ollama อย่างชัดเจน:
ollama serveตรวจสอบว่า API เข้าถึงได้:
curl http://localhost:11434/api/tagsไม่มีโมเดลที่พร้อมใช้งาน
หากโมเดลของคุณไม่อยู่ในรายการ ให้ดึงโมเดลมาไว้ในเครื่องหรือกำหนดไว้โดยตรงใน models.providers.ollama
ollama list # See what's installedollama pull gemma4ollama pull gpt-oss:20bollama pull llama3.3 # Or another modelการเชื่อมต่อถูกปฏิเสธ
ตรวจสอบว่า Ollama กำลังทำงานบนพอร์ตที่ถูกต้อง:
# Check if Ollama is runningps aux | grep ollama # Or restart Ollamaollama serveโฮสต์ระยะไกลใช้กับ curl ได้แต่ใช้กับ OpenClaw ไม่ได้
ตรวจสอบจากเครื่องและ runtime เดียวกันกับที่รัน Gateway:
openclaw gateway status --deepcurl http://ollama-host:11434/api/tagsสาเหตุที่พบบ่อย:
baseUrlชี้ไปที่localhostแต่ Gateway รันอยู่ใน Docker หรือบนโฮสต์อื่น- URL ใช้
/v1ซึ่งเลือกพฤติกรรมที่เข้ากันได้กับ OpenAI แทน Ollama ดั้งเดิม - โฮสต์ระยะไกลต้องปรับ firewall หรือการ bind บน LAN ที่ฝั่ง Ollama
- โมเดลมีอยู่บน daemon ของแล็ปท็อปคุณ แต่ไม่มีบน daemon ระยะไกล
โมเดลส่งออก tool JSON เป็นข้อความ
โดยปกติหมายความว่าผู้ให้บริการกำลังใช้โหมดที่เข้ากันได้กับ OpenAI หรือโมเดลไม่สามารถจัดการ tool schema ได้
ควรใช้โหมด Ollama ดั้งเดิม:
{ models: { providers: { ollama: { baseUrl: "http://ollama-host:11434", api: "ollama", }, }, },}หากโมเดล local ขนาดเล็กยังล้มเหลวกับ tool schema ให้ตั้ง compat.supportsTools: false ในรายการโมเดลนั้นแล้วทดสอบใหม่
Kimi หรือ GLM ส่งคืนสัญลักษณ์อ่านไม่ออก
การตอบกลับ Kimi/GLM แบบ hosted ที่ยาวและเป็นชุดสัญลักษณ์ที่ไม่ใช่ภาษา จะถูกถือเป็น output ของผู้ให้บริการที่ล้มเหลว แทนที่จะเป็นคำตอบ assistant ที่สำเร็จ ซึ่งทำให้ retry, fallback หรือการจัดการข้อผิดพลาดตามปกติรับช่วงต่อได้โดยไม่บันทึกข้อความที่เสียหายลงใน session
หากเกิดซ้ำ ให้บันทึกชื่อโมเดลดิบ ไฟล์ session ปัจจุบัน และ run นั้นใช้ Cloud + Local หรือ Cloud only จากนั้นลอง session ใหม่และโมเดล fallback:
openclaw infer model run --model ollama/kimi-k2.5:cloud --prompt "Reply with exactly: ok" --jsonopenclaw models set ollama/gemma4โมเดล local ที่เย็นอยู่ timeout
โมเดล local ขนาดใหญ่อาจต้องใช้เวลานานในการโหลดครั้งแรกก่อน streaming จะเริ่ม ให้จำกัด timeout ไว้เฉพาะผู้ให้บริการ Ollama และจะขอให้ Ollama คงโมเดลไว้ในหน่วยความจำระหว่าง turn ก็ได้:
{ models: { providers: { ollama: { timeoutSeconds: 300, models: [ { id: "gemma4:26b", name: "gemma4:26b", params: { keep_alive: "15m" }, }, ], }, }, },}หากตัวโฮสต์เองตอบรับการเชื่อมต่อช้า timeoutSeconds ยังขยาย guarded Undici connect timeout สำหรับผู้ให้บริการนี้ด้วย
โมเดล context ใหญ่ทำงานช้าเกินไปหรือหน่วยความจำไม่พอ
โมเดล Ollama จำนวนมากประกาศ context ที่ใหญ่กว่าฮาร์ดแวร์ของคุณจะรันได้อย่างสบาย Ollama ดั้งเดิมใช้ค่าเริ่มต้น context runtime ของ Ollama เอง เว้นแต่คุณจะตั้ง params.num_ctx จำกัดทั้ง budget ของ OpenClaw และ request context ของ Ollama เมื่อคุณต้องการ latency ของ token แรกที่คาดเดาได้:
{ models: { providers: { ollama: { contextWindow: 32768, maxTokens: 8192, models: [ { id: "qwen3.5:9b", name: "qwen3.5:9b", params: { num_ctx: 32768, thinking: false }, }, ], }, }, },}ลด contextWindow ก่อนหาก OpenClaw ส่ง prompt มากเกินไป ลด params.num_ctx หาก Ollama กำลังโหลด runtime context ที่ใหญ่เกินไปสำหรับเครื่อง ลด maxTokens หากการสร้างผลลัพธ์ใช้เวลานานเกินไป