วิธีเชื่อมต่อ Ollama กับ Coding Agent อย่างละเอียด
เรียนรู้วิธีตั้งค่า Ollama ให้ทำงานร่วมกับ Coding Agent ของคุณผ่านการปรับแต่ง Base URL และ API Key พร้อมคำแนะนำการตั้งค่า Context Length และ Keep-alive เพื่อประสิทธิภาพสูงสุด
สิ่งที่คุณกำลังเชื่อมต่อ
คุณสามารถใช้ Ollama ร่วมกับ coding agent ของคุณได้ โดยการเชื่อมต่อมีความซับซ้อนน้อยกว่าที่หลายคนคาดคิด คุณเพียงแค่เปลี่ยน base URL หนึ่งรายการและเลือกชื่อโมเดลหนึ่งชื่อ ช่องสำหรับใส่ API key ยังคงต้องการค่า แต่เซิร์ฟเวอร์ภายในเครื่องจะเพิกเฉยต่อค่านั้น ดังนั้นคุณสามารถใส่ข้อความใดก็ได้ลงไป
Ollama จะฟังคำขอที่พอร์ต 11434 และให้บริการรูปแบบคำขอสองแบบพร้อมกัน /v1/chat/completions คือรูปแบบที่รองรับ OpenAI ซึ่งเอกสารของ Ollama ระบุว่าคีย์ในส่วนนี้จำเป็นต้องมีแต่จะถูกเพิกเฉย /v1/messages คือรูปแบบที่รองรับ Anthropic ซึ่งเป็นรูปแบบที่ Claude Code ใช้งานอยู่แล้ว เนื่องจาก agent ของคุณรองรับรูปแบบใดรูปแบบหนึ่งอยู่แล้ว จึงไม่มีการเปลี่ยนแปลงอื่นใดที่จำเป็นต้องทำ
ขั้นตอนส่วนนี้ใช้เวลาเพียง 5 นาที ผลลัพธ์จะใช้งานได้ดีหรือไม่นั้นขึ้นอยู่กับการตั้งค่าสองอย่างที่แทบไม่มีใครปรับเปลี่ยน นั่นคือ context length และ keep-alive รวมถึงการมอบหมายงานที่เหมาะสมกับโมเดลนั้นๆ ทั้งสองหัวข้อจะมีส่วนอธิบายแยกต่างหาก และข้อจำกัดตามความเป็นจริงจะระบุไว้ในตอนท้าย
Coding agent ตัวใดบ้างที่รองรับการตั้งค่า base URL ภายในเครื่อง
การทดสอบมีเพียงคำถามเดียวคือ เครื่องมือนั้นเปิดให้ตั้งค่า base URL หรือไม่ หากทำได้ เครื่องมือนั้นก็จะสามารถสื่อสารกับเซิร์ฟเวอร์ของคุณได้
Ollama ได้เผยแพร่หน้าการเชื่อมต่อสำหรับ Claude Code, OpenCode, Codex, Cline, Roo Code, Zed, JetBrains IDEs และ VS Code ส่วน Aider มีเอกสารรองรับ Ollama แยกต่างหาก ซึ่งครอบคลุมเครื่องมือส่วนใหญ่ที่ผู้คนมักหมายถึงเมื่อพูดถึง coding agent ในเดือนสิงหาคม 2026 อย่างไรก็ตาม เครื่องมือเหล่านี้ไม่ได้ใช้รูปแบบการสื่อสารเดียวกันทั้งหมด และความแตกต่างนี้เองที่เป็นสาเหตุให้การตั้งค่าล้มเหลว
- Coding agent ส่วนใหญ่ต้องการ endpoint ที่เข้ากันได้กับ OpenAI ให้ระบุ base URL เป็น
http://localhost:11434/v1และใส่ API key เป็นสตริงใดก็ได้ที่ไม่ว่างเปล่า - Claude Code ไม่รองรับ OpenAI base URL เลย เนื่องจากใช้ Anthropic Messages API จึงจำเป็นต้องตั้งค่า
ANTHROPIC_BASE_URLให้เป็นhttp://localhost:11434ซึ่งเป็นตำแหน่งที่ Ollama ให้บริการ/v1/messagesอยู่ - Codex ใช้ OpenAI Responses API ซึ่ง Ollama ก็ให้บริการ
/v1/responsesเช่นกัน โดยเพิ่มเข้ามาตั้งแต่เวอร์ชัน 0.13.3 - หาก agent ไม่มีช่องให้ตั้งค่า base URL จะไม่สามารถเปลี่ยนเส้นทางได้ เนื่องจาก endpoint ถูกฝังไว้ในตัว client ให้ใช้เลเยอร์แปลงข้อมูลคั่นกลางแทน เช่น LiteLLM gateway ที่โฮสต์เอง แล้วนำโมเดลของคุณออกมาในรูปแบบที่ client ต้องการ
Ollama สามารถเขียนไฟล์กำหนดค่าเหล่านี้ให้คุณได้ โดย ollama launch opencode จะเริ่มการทำงานของ OpenCode พร้อมการตั้งค่าแบบ inline สำหรับโมเดลที่คุณเลือก ส่วน ollama launch claude จะทำแบบเดียวกันสำหรับ Claude Code และ ollama launch droid --config จะเขียนไฟล์กำหนดค่าโดยไม่เปิดใช้งานเครื่องมือดังกล่าว
ติดตั้ง Ollama และดึงโมเดลที่สามารถเรียกใช้เครื่องมือได้
curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama --no-pager
ollama pull qwen3-coder:30b
ollama lsตัวติดตั้งจะเพิ่ม systemd unit และเริ่มการทำงานให้โดยอัตโนมัติ ดังนั้น systemctl status ollama ควรแสดงผลเป็น active (running) หากไม่เป็นเช่นนั้น journalctl -e -u ollama จะแสดงสาเหตุของปัญหา
โมเดลต้องรองรับการเรียกใช้เครื่องมือ (tool calling) เพราะนั่นคือวิธีการทำงานของเอเจนต์ โดยเอเจนต์จะอ่านไฟล์ เขียนแพตช์ รันการทดสอบ จากนั้นอ่านผลลัพธ์ที่ล้มเหลวแล้วลองใหม่ โมเดลที่ไม่สามารถสร้างคำสั่งเรียกใช้เครื่องมือได้จะอธิบายการแก้ไขเป็นข้อความแทนที่จะลงมือทำจริง ซึ่งจะทำให้เอเจนต์วนลูปหรือหยุดทำงาน ให้มองหาป้ายกำกับ tools บนหน้าโมเดลใน ollama.com ก่อนทำการดึงข้อมูล qwen3-coder:30b รองรับฟีเจอร์นี้ และ ณ เดือนสิงหาคม 2026 แท็กดังกล่าวมีขนาดดาวน์โหลด 19 GB พร้อม context window ขนาด 256K หากเซิร์ฟเวอร์ของคุณเป็นแบบ CPU-only หรือมี RAM จำกัด การคำนวณหน่วยความจำสำหรับแท็ก Qwen 27B บน VPS จะแสดงให้เห็นว่าขนาดใดที่เหมาะสมกับ RAM ตั้งแต่ 8 ถึง 64 GB ก่อนที่คุณจะเริ่มดาวน์โหลด เมื่อดึงข้อมูลมาแล้ว ข้อมูลขนาดหลายกิกะไบต์จะถูกจัดเก็บไว้ใน root disk ของเซิร์ฟเวอร์ ซึ่งมักเป็นส่วนที่มีพื้นที่ว่างน้อยที่สุดบน VPS ดังนั้น ตำแหน่งที่ Ollama เก็บไฟล์โมเดลและวิธีการย้ายไปยังที่อื่น จึงเป็นสิ่งที่ควรอ่านก่อนที่ดิสก์จะเต็ม
จากนั้นยืนยันว่าเซิร์ฟเวอร์ให้บริการชื่อโมเดลใดบ้าง:
curl http://localhost:11434/v1/modelsสตริงที่ปรากฏในผลลัพธ์ดังกล่าวคือสิ่งที่คุณต้องนำไปใส่ในการตั้งค่าเอเจนต์ให้ถูกต้องทุกตัวอักษร การตรวจสอบขั้นตอนนี้ก่อนจะช่วยแก้ปัญหา model-not-found ส่วนใหญ่ได้ หากยังไม่ได้ติดตั้ง Ollama สามารถดูคำแนะนำฉบับเต็มได้ที่ การทำ self-hosting LLM ด้วย Ollama บน VPS
กำหนดค่า OpenCode ให้เชื่อมต่อกับ Ollama
แก้ไข ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-coder:30b": {
"name": "qwen3-coder 30b"
}
}
}
}
}คีย์ภายใต้ models คือชื่อโมเดลที่ส่งไปยัง Ollama ดังนั้นจึงต้องตรงกับ ollama ls ทุกประการ ส่วนฟิลด์ name เป็นเพียงป้ายกำกับในตัวเลือกโมเดลเท่านั้น ให้เริ่มการทำงานของ opencode สลับไปที่ผู้ให้บริการ Ollama และตรวจสอบ journalctl -e -u ollama เพื่อยืนยันว่าคำขอถูกส่งมายังเซิร์ฟเวอร์ของคุณ ไม่ใช่ที่อื่น สำหรับการตั้งค่าตัวเอเจนต์นั้นมีอธิบายไว้ใน การรัน OpenCode บน VPS
การกำหนดให้ Claude Code ใช้งาน Ollama
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_API_KEY=""
export ANTHROPIC_BASE_URL=http://localhost:11434
claude --model qwen3-coder:30bANTHROPIC_API_KEY ถูกตั้งค่าเป็นสตริงว่างโดยเจตนา หากคุณทิ้งคีย์จริงไว้ใน environment ระบบจะส่งคำขอของคุณไปยัง API ที่โฮสต์ไว้แทน ซึ่งจะทำให้คุณมีค่าใช้จ่ายและไม่ได้ใช้งานการประมวลผลภายในเครื่อง ollama launch claude จะตั้งค่าทั้งหมดนี้ให้คุณโดยอัตโนมัติ
โปรดทราบว่าเลเยอร์ความเข้ากันได้นี้มีข้อจำกัดบางประการ โดยไม่ได้รองรับ tool_choice หรือการทำ prompt caching และไม่มี endpoint สำหรับนับจำนวน token ดังนั้นจำนวน token ที่คุณเห็นจึงเป็นเพียงค่าประมาณจาก tokenizer ของตัวโมเดลเอง นอกจากนี้ Claude Code ยังมาพร้อมกับ system prompt ขนาดใหญ่และชุดเครื่องมือจำนวนมาก จึงต้องการ context มากกว่าแอปพลิเคชันแชททั่วไป สำหรับคำถามในวงกว้างว่าฟีเจอร์ใดสามารถใช้งานได้หรือไม่ได้บ้างนั้น สามารถดูรายละเอียดได้ที่ ว่าคุณสามารถ self-host Claude ได้หรือไม่
การชี้ Aider ไปที่ Ollama
export OLLAMA_API_BASE=http://127.0.0.1:11434
aider --model ollama_chat/qwen3-coder:30bเอกสารประกอบของ Aider แนะนำให้ใช้ prefix ollama_chat/ แทน ollama/ นอกจากนี้ยังช่วยให้คุณสามารถกำหนดขนาด context window แยกตามโมเดลได้ใน .aider.model.settings.yml ซึ่งมีประโยชน์ในกรณีที่โมเดลหนึ่งต้องการขนาดหน้าต่างที่แตกต่างจากค่าเริ่มต้นของเซิร์ฟเวอร์:
- name: ollama_chat/qwen3-coder:30b
extra_params:
num_ctx: 65536เหตุใดการตั้งค่าที่ทำงานได้ปกติจึงให้ผลลัพธ์ที่ไม่สมเหตุสมผล
นี่คือส่วนที่สำคัญที่สุด Ollama จะเลือกความยาว context เริ่มต้นจาก VRAM (หน่วยความจำวิดีโอบน GPU) ที่ตรวจพบ ซึ่งค่าเริ่มต้นเหล่านี้ได้มีการเผยแพร่ไว้แล้ว:
The data behind this chart
[
{
"label": "Under 24 GiB VRAM",
"default_context_tokens": "4,096"
},
{
"label": "24 to 48 GiB VRAM",
"default_context_tokens": "32,768"
},
{
"label": "48 GiB VRAM or more",
"default_context_tokens": "262,144"
}
]แผนบริการ VPS ส่วนใหญ่และเซิร์ฟเวอร์ที่ใช้เฉพาะ CPU จะอยู่ในแถวแรก คือ 4,096 tokens มีเพียง GPU ขนาดใหญ่เท่านั้นที่จะได้รับ 262,144 tokens ในแถวสุดท้าย
เอเจนต์จะใช้ไป 4096 tokens ก่อนที่จะเริ่มทำงานใดๆ ทั้ง system prompt, คำจำกัดความของเครื่องมือ, รายการไฟล์ใน repository และไฟล์แรกที่เปิดขึ้นมานั้นมีขนาดใหญ่กว่าค่าดังกล่าวแล้ว สิ่งที่เกิดขึ้นหลังจากนั้นคือปัญหาทั้งหมด: ไม่มีการแจ้งเตือนข้อผิดพลาด เอกสารของ Aider ระบุว่า Ollama จะตัด context ที่เกินหน้าต่างการทำงานออกไปโดยไม่มีการแจ้งเตือน tokens ที่เก่าที่สุดจะถูกลบออก ทำให้โมเดลตอบคำถามอย่างมั่นใจเกี่ยวกับไฟล์ที่มันมองไม่เห็นอีกต่อไป หรือลืมคำสั่งที่คุณเพิ่งให้ไปเมื่อสองขั้นตอนก่อนหน้า กลไกนี้คือสาเหตุเบื้องหลังรายงานส่วนใหญ่ที่ว่าโมเดลในเครื่องนั้น "โง่เกินกว่าจะเขียนโค้ดได้" การเลือกตัวเลขนี้เป็นการตัดสินใจเฉพาะตัว และ ค่าใช้จ่ายของ num_ctx ในหน่วยความจำ KV cache ในแต่ละขนาด เป็นสิ่งที่ควรศึกษาให้เข้าใจก่อนที่คุณจะตัดสินใจเลือกค่าใดค่าหนึ่ง
เอกสารของ Ollama ระบุว่างานประเภทเอเจนต์และเครื่องมือเขียนโค้ดควรตั้งค่าไว้ที่อย่างน้อย 64000 tokens ให้ตั้งค่าบนเซิร์ฟเวอร์ดังนี้:
sudo systemctl edit ollama.serviceเพิ่มบรรทัดเหล่านี้ลงในไฟล์ override:
[Service]
Environment="OLLAMA_CONTEXT_LENGTH=64000"จากนั้นโหลดการตั้งค่าใหม่และรีสตาร์ทบริการ:
sudo systemctl daemon-reload
sudo systemctl restart ollama
ollama psollama ps คือคำสั่งตรวจสอบ โดยจะแสดงคอลัมน์ CONTEXT ซึ่งตัวเลขนั้นคือจำนวนที่โมเดลได้รับจริง ค่า ID และ SIZE ของคุณจะแตกต่างกัน:
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3-coder:30b a1b2c3d4e5f6 24 GB 100% GPU 64000 4 minutes from nowควรตั้งค่าบนเซิร์ฟเวอร์แทนที่จะตั้งในตัวเอเจนต์ด้วยเหตุผล 2 ประการ ประการแรก schema ของ OpenAI chat completions ไม่มีฟิลด์สำหรับความยาว context ดังนั้นไคลเอนต์ที่รองรับ OpenAI จึงไม่สามารถร้องขอค่านี้ได้ ประการที่สอง การตั้งค่านี้เป็นแบบต่อเซิร์ฟเวอร์ ดังนั้นเอเจนต์ทุกตัวที่คุณชี้มายังเซิร์ฟเวอร์นี้จะได้รับค่าดังกล่าวไปโดยอัตโนมัติ ในส่วนของ output นั้นมีขีดจำกัดของตัวเอง และต่างจากความยาว context ตรงที่ค่านี้สามารถส่งผ่าน endpoint ที่รองรับได้ ดังนั้น num_predict และฟิลด์ max_tokens ที่แมปเข้าหากัน คือสิ่งที่คุณควรปรับเมื่อการตอบกลับหยุดชะงักกลางคันระหว่างการทำ patch หากโมเดลตัวใดตัวหนึ่งต้องการหน้าต่าง context ที่ต่างออกไป ให้สร้างโมเดลใหม่โดยใช้ Modelfile:
FROM qwen3-coder:30b
PARAMETER num_ctx 65536ollama create qwen3-coder-64k -f ModelfileContext ไม่ได้มาฟรีๆ หน้าต่างที่ยาวขึ้นจะใช้หน่วยความจำมากขึ้น ดังนั้นให้คอยสังเกตคอลัมน์ PROCESSOR ค่า 100% GPU คือสิ่งที่คุณต้องการ เมื่อส่วนหนึ่งของโมเดลถูกย้ายไปประมวลผลที่ CPU อัตราการประมวลผล token จะลดลงจนเอเจนต์ไม่สามารถทำงานได้ตามปกติ และ การวัดจำนวน tokens ต่อวินาทีบน LLM ในเครื่อง คือวิธีที่คุณจะพบขีดจำกัดที่แท้จริงของเครื่องคุณ การเลือกขนาดเครื่องก่อนตัดสินใจซื้อได้ครอบคลุมไว้ใน ปริมาณ RAM และ CPU ที่ VPS สำหรับเอเจนต์เขียนโค้ดจำเป็นต้องใช้
คงโมเดลไว้ในหน่วยความจำระหว่างการร้องขอ
โดยปกติแล้ว Ollama จะยกเลิกการโหลดโมเดลหลังจากไม่มีการร้องขอเป็นเวลา 5 นาที ซึ่งเหมาะสมสำหรับแชทบอทแต่ไม่เหมาะสำหรับงานประเภทเอเจนต์ เมื่อคุณหยุดอ่าน diff ตัวจับเวลาจะเริ่มนับถอยหลัง และการร้องขอถัดไปจะต้องโหลดข้อมูลน้ำหนัก (weights) ขนาดหลายสิบกิกะไบต์จากดิสก์ใหม่ก่อนที่โทเค็นแรกจะปรากฏขึ้น ทำให้ดูเหมือนระบบค้าง
OLLAMA_KEEP_ALIVE รับค่าเป็นสตริงระยะเวลา เช่น 10m หรือ 24h, ตัวเลขจำนวนวินาทีปกติ, -1 เพื่อคงโมเดลไว้ในหน่วยความจำอย่างไม่มีกำหนด หรือ 0 เพื่อยกเลิกการโหลดทันที ให้ตั้งค่านี้ควบคู่ไปกับความยาวของบริบท (context length):
[Service]
Environment="OLLAMA_CONTEXT_LENGTH=64000"
Environment="OLLAMA_KEEP_ALIVE=-1"ฟิลด์การร้องขอ keep_alive มีอยู่เฉพาะใน endpoint /api/generate และ /api/chat แบบเนทีฟของ Ollama เท่านั้น ไม่รองรับใน endpoint ที่มีความเข้ากันได้ (compatibility endpoints) ดังนั้นเอเจนต์จึงไม่สามารถตั้งค่านี้แยกตามการร้องขอได้ ตัวแปรสภาพแวดล้อม (environment variable) จึงเป็นเครื่องมือเดียวที่คุณมี เมื่อคุณต้องการคืนหน่วยความจำ ollama stop qwen3-coder:30b จะยกเลิกการโหลดโมเดลโดยไม่ต้องหยุดการทำงานของเซิร์ฟเวอร์ หากคุณต้องการให้การตั้งค่านี้คงอยู่หลังการรีบูต หรือต้องการชั่งน้ำหนักระหว่างการเก็บข้อมูลน้ำหนักไว้ในหน่วยความจำตลอดทั้งวันกับการเรียกคืนหน่วยความจำนั้น การคงโมเดล Ollama ไว้ในหน่วยความจำ สามารถทำได้ทั้งสองวิธี
การรัน Ollama บนเซิร์ฟเวอร์แยกต่างหาก
Ollama จะผูกการทำงานไว้กับ localhost หากต้องการเข้าถึงจากเครื่องอื่น ให้ตั้งค่า OLLAMA_HOST=0.0.0.0:11434 ในไฟล์ systemd override เดียวกันแล้วรีสตาร์ท service
ควรดำเนินการเฉพาะบนเครือข่ายส่วนตัว (private network) เท่านั้น เอกสารของ Ollama ระบุว่า API ภายในไม่จำเป็นต้องมีการยืนยันตัวตน ดังนั้นการเปิดพอร์ต 11434 สู่สาธารณะจะทำให้ทุกคนสามารถใช้งานฮาร์ดแวร์ของคุณและอ่านข้อมูลที่ agent ของคุณส่งได้ ทางเลือกที่ปลอดภัยมี 2 วิธี วิธีแรกคือคงการผูกไว้ที่ localhost แล้วทำ port forwarding ผ่าน SSH จากแล็ปท็อปของคุณ:
ssh -N -L 11434:localhost:11434 you@your-vpsAgent ของคุณจะยังคงชี้ไปที่ http://localhost:11434/v1 โดยไม่พบความแตกต่างใดๆ อีกทางเลือกหนึ่งคือการใช้ VPN โดยผูก Ollama ไว้กับที่อยู่ IP ของ VPN แทนที่จะเป็น 0.0.0.0 หากมีผู้ใช้หลายคนหรือหลาย agent ใช้งานเครื่องเดียวกัน ตัว scheduler ของ Ollama ไม่ได้ถูกออกแบบมาเพื่อรองรับภาระงานระดับนั้น และ การเปรียบเทียบระหว่าง Ollama และ vLLM จะแสดงให้เห็นว่าความแตกต่างของ throughput จะเริ่มส่งผลกระทบในจุดใด
จุดแข็งและจุดอ่อนของโมเดลภาษาที่รันบนเครื่องตนเอง
เอเจนต์ที่ขับเคลื่อนด้วยโมเดลที่คุณโฮสต์เองไม่ได้เข้ามาแทนที่ API ระดับแนวหน้าในทุกงาน แต่มีจุดแข็งที่ชัดเจนในงาน 4 ประเภทดังนี้:
- การแก้ไขเชิงกลไกจำนวนมาก ซึ่งแต่ละจุดเป็นการเปลี่ยนแปลงเล็กน้อยและคุณสามารถตรวจสอบได้ เช่น การเปลี่ยนชื่อไฟล์ทั่วทั้ง repository, การเพิ่ม type hints, การเขียน docstrings หรือการแปลความคิดเห็น โมเดลสามารถรันงานเหล่านี้ได้นานหลายชั่วโมงโดยไม่มีค่าใช้จ่ายเพิ่มเติม
- งานที่ไม่สามารถนำออกจากฮาร์ดแวร์ของคุณได้ เช่น โค้ดของลูกค้าที่ติดสัญญาไม่เปิดเผยข้อมูล (confidentiality agreement) หรือ repository ภายในองค์กรที่คุณไม่ได้รับอนุญาตให้ส่งข้อมูลไปยังบุคคลที่สาม
- เครื่องที่ทำงานแบบออฟไลน์หรือ air-gapped ซึ่งไม่มี API ภายนอกให้เรียกใช้งานได้เลย
- ค่าใช้จ่ายที่คาดการณ์ได้ เมื่อจ่ายค่าเซิร์ฟเวอร์แล้ว เอเจนต์ที่ใช้โทเค็นจำนวนมากในลูปจะไม่สร้างค่าใช้จ่ายเพิ่ม ซึ่งตรงกันข้ามกับ API ที่คิดเงินตามการใช้งานจริง จุดคุ้มทุนของ GPU VPS เมื่อเทียบกับค่าโทเค็น API มีการคำนวณในส่วนนี้
โมเดลเหล่านี้จะเสียเปรียบในงานที่ซับซ้อนและมีหลายขั้นตอน เช่น "หาสาเหตุที่ test นี้ล้มเหลว แก้ไขต้นเหตุ และอัปเดตส่วนที่เรียกใช้งาน" งานเหล่านี้ต้องการการเรียกใช้เครื่องมือ (tool calls) ที่ถูกต้องต่อเนื่องกันหลายครั้งโดยที่ยังคงบริบทเดิมไว้ทั้งหมด โมเดลขนาด 8B ถึง 14B บนเซิร์ฟเวอร์ทั่วไปมักจะสร้างคำสั่งเรียกใช้เครื่องมือที่ผิดรูปแบบ หรือหลงลืมแผนงานหลังจากผ่านไปไม่กี่ขั้นตอน ทำให้คุณต้องเสียเวลาควบคุมมันมากกว่าการลงมือทำเอง ซึ่งนี่ไม่ใช่ปัญหาที่แก้ไขได้ด้วยการปรับ prompt แต่เป็นข้อจำกัดด้านขีดความสามารถของโมเดล
นอกจากนี้ โมเดลที่รันเองยังเสียเปรียบในงานที่ความผิดพลาดมีราคาแพงและคุณไม่สามารถตรวจสอบโค้ดทุกบรรทัดได้ ควรเลือกใช้โมเดลที่รันบนเครื่องตนเองสำหรับงานเฉพาะทางที่คุณสามารถตรวจสอบผลลัพธ์ได้ และใช้โมเดลผ่าน API สำหรับงานที่คุณไม่สามารถตรวจสอบทีละขั้นตอนได้
รูปแบบความล้มเหลวและข้อความที่คุณจะพบ
curl: (7) Failed to connect to localhost port 11434 after 0 ms: Connection refused. เซิร์ฟเวอร์ไม่ได้ทำงานอยู่ หรือตัว agent ชี้ไปยังโฮสต์อื่น ให้รัน systemctl status ollama จากนั้นรัน journalctl -e -u ollama
ตัว agent รายงานว่าไม่พบโมเดลดังกล่าว ชื่อในไฟล์ config ของคุณไม่ตรงกับชื่อที่เซิร์ฟเวอร์ให้บริการ ให้เปรียบเทียบกับ curl http://localhost:11434/v1/models แล้วคัดลอกสตริงจากที่นั่น ชื่อแท็กเป็นส่วนหนึ่งของชื่อโมเดล ดังนั้นหาก config ระบุแท็กที่คุณไม่เคยดึงมา (pull) จะทำให้เกิดข้อผิดพลาด แม้ว่าจะมีโมเดลที่คล้ายกันติดตั้งอยู่ก็ตาม
ตัว agent ตอบกลับเป็นข้อความปกติและไม่แก้ไขไฟล์ อาจเป็นเพราะโมเดลไม่รองรับเครื่องมือ (tool) หรือคำขอรวมถึงคำจำกัดความของเครื่องมือมีขนาดใหญ่จนเต็ม context window แล้ว ให้ตรวจสอบป้ายกำกับ tools ในหน้าโมเดล จากนั้นตรวจสอบคอลัมน์ CONTEXT ใน ollama ps
เกิดความเงียบเป็นเวลานานก่อนที่ token แรกจะปรากฏ จากนั้นจึงทำงานด้วยความเร็วปกติ ค่า keep-alive หมดอายุและระบบกำลังอ่านค่าน้ำหนัก (weights) จากดิสก์ใหม่อีกครั้ง ให้ตั้งค่า OLLAMA_KEEP_ALIVE
โมเดลให้ข้อมูลขัดแย้งกับไฟล์ที่เพิ่งอ่านไป เกิดจากการตัดทอน context (context truncation) โดยปกติแล้ว ollama ps จะแสดงค่า CONTEXT ที่น้อยกว่าที่คุณคิดว่าได้ตั้งค่าไว้ เนื่องจาก environment variable ถูกส่งไปยัง shell ของคุณแทนที่จะเป็น systemd unit
ทุกอย่างทำงานได้ แต่ช้า และ PROCESSOR ไม่ใช่ 100% GPU โมเดลรวมถึง context ของมันไม่สามารถบรรจุลงใน VRAM ได้ ให้ลดความยาวของ context หรือเปลี่ยนไปใช้โมเดลที่เล็กลงหรือใช้การทำ quantisation ที่ต่ำลง ก่อนที่คุณจะดึงโมเดลใหม่ ต้นทุนหน่วยความจำของ q4_K_M, q8_0 และ fp16 แต่ละแบบ และจุดที่คุณภาพลดลงจริง จะบอกคุณว่าการลดระดับลงหนึ่งขั้นจะช่วยเพิ่มพื้นที่ได้เท่าใดและคุณต้องแลกกับอะไรบ้าง
FAQ
ฉันสามารถชี้ Claude Code ไปที่ Ollama ได้หรือไม่?
ได้ แต่ไม่ใช่ด้วย URL ที่รองรับ OpenAI โดยตรง Claude Code ใช้ Anthropic Messages API และ Ollama ให้บริการในรูปแบบดังกล่าวที่ /v1/messages บนพอร์ต 11434 เท่าเดิม ให้ export ค่า ANTHROPIC_BASE_URL=http://localhost:11434, ANTHROPIC_AUTH_TOKEN=ollama และ ANTHROPIC_API_KEY ที่เป็นค่าว่าง จากนั้นเริ่มการทำงานด้วย claude --model qwen3-coder:30b ทั้งนี้ ollama launch claude สามารถเขียนการตั้งค่าเหล่านี้ให้คุณได้โดยอัตโนมัติ เลเยอร์ความเข้ากันได้นี้ไม่ได้รองรับ tool_choice หรือการทำ prompt caching และไม่มี endpoint สำหรับนับจำนวน token ดังนั้นจำนวน token ที่แสดงจึงเป็นเพียงค่าประมาณเท่านั้น
ทำไมโมเดลในเครื่องของฉันถึงตอบคำถามเกี่ยวกับโค้ดที่มันมองไม่เห็น?
เพราะคำขอมีขนาดเกิน context window และส่วนที่เก่าที่สุดถูกตัดออกโดยไม่มีการแจ้งเตือนข้อผิดพลาด Ollama จะกำหนดค่า context เริ่มต้นตามปริมาณ VRAM ที่ตรวจพบ ซึ่งหากต่ำกว่า 24 GiB ค่าเริ่มต้นจะเป็น 4,096 token ซึ่งเพียงแค่ system prompt และคำนิยามของเครื่องมือ (tool definitions) ของ agent ก็มีขนาดเกินค่านี้แล้ว ให้ตั้งค่า OLLAMA_CONTEXT_LENGTH=64000 ใน systemd unit, รีสตาร์ท Ollama และตรวจสอบว่าคอลัมน์ CONTEXT ใน ollama ps แสดงค่าใหม่ที่ถูกต้อง
ฉันควรใช้โมเดลใดสำหรับ coding agent บน VPS?
ให้เลือกโมเดลที่ใหญ่ที่สุดที่มีป้ายกำกับ tools ซึ่งยังคงสามารถโหลดลงในหน่วยความจำได้เมื่อใช้ context window ขนาด 64k และควรเลือกโมเดลที่ปรับแต่งมาเพื่อการเขียนโค้ดโดยเฉพาะ qwen3-coder:30b เป็นตัวเลือกที่นิยมสำหรับเซิร์ฟเวอร์ที่มี GPU และมี VRAM เพียงพอ หากโมเดลดังกล่าวใหญ่เกินไปสำหรับเซิร์ฟเวอร์ของคุณ ตัวเลขการใช้ RAM และความเร็วในการประมวลผลด้วย CPU ของ Nemotron 3.5 Lightning เป็นข้อมูลเปรียบเทียบที่มีประโยชน์ก่อนที่คุณจะตัดสินใจดาวน์โหลด สำหรับโมเดลที่มีพารามิเตอร์ต่ำกว่าประมาณ 14B แม้จะตอบคำถามเกี่ยวกับโค้ดได้ดี แต่อาจล้มเหลวในการแก้ไขโค้ดหลายขั้นตอน เนื่องจากงานของ agent จะได้รับผลกระทบอย่างมากจากความผิดพลาดในการจัดรูปแบบเพียงเล็กน้อยขณะเรียกใช้เครื่องมือ (tool calls) แนะนำให้ทดสอบด้วยงานจริงจาก repository ของคุณเองแทนการใช้ prompt ตัวอย่าง
ฉันจำเป็นต้องใช้ GPU เพื่อรัน coding agent ด้วยโมเดลของตัวเองหรือไม่?
ในทางปฏิบัติคือจำเป็น การประมวลผลด้วย CPU เพียงอย่างเดียวสามารถทำได้และเพียงพอสำหรับการตอบคำถามสั้นๆ แต่เนื่องจาก agent ต้องส่งคำขอจำนวนมากต่อหนึ่งงาน และแต่ละคำขอต้องอ่านประวัติการสนทนาที่ยาวนาน อัตราการสร้าง token ที่ช้าจะทำให้งานที่ควรใช้เวลาสองนาทีกลายเป็นหนึ่งชั่วโมง ให้ตรวจสอบคอลัมน์ PROCESSOR ใน ollama ps หากค่าที่แสดงไม่ใช่ 100% GPU หมายความว่าโมเดลบางส่วนกำลังทำงานบน CPU ซึ่งจะทำให้อัตราการสร้าง token ลดลงอย่างมาก