SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor

วิธีเชื่อมต่อ Ollama กับ Coding Agent อย่างละเอียด

เรียนรู้วิธีตั้งค่า Ollama ให้ทำงานร่วมกับ coding agent ผ่านพอร์ต 11434 โดยใช้ base URL และ API key จำลอง พร้อมวิธีปรับแต่ง context length เพื่อป้องกันข้อผิดพลาดในการประมวลผล

สิ่งที่คุณกำลังเชื่อมต่อ

คุณสามารถใช้ Ollama ร่วมกับ coding agent ของคุณได้ และการเชื่อมต่อก็มีขนาดเล็กกว่าที่หลายคนคาดคิด คุณเพียงแค่เปลี่ยน base URL หนึ่งรายการและเลือกชื่อโมเดลหนึ่งชื่อ ช่องสำหรับใส่ API key ยังคงต้องการค่าอยู่ แต่เซิร์ฟเวอร์ภายในเครื่องจะเพิกเฉยต่อค่านั้น ดังนั้นคุณสามารถใส่สตริงใดก็ได้

Ollama ทำงานบนพอร์ต 11434 และให้บริการ API 3 รูปแบบพร้อมกัน /api คือ native API ของ Ollama ส่วน /v1 คือเลเยอร์ที่รองรับการทำงานร่วมกับ OpenAI ซึ่งครอบคลุมรูปแบบต่างๆ ได้แก่ /v1/chat/completions, /v1/responses, /v1/completions, /v1/models และ /v1/embeddings เอกสารของ Ollama ระบุว่าคีย์ในส่วนนี้จำเป็นต้องใส่แต่จะถูกเพิกเฉย รูปแบบที่สามคือการรองรับ Anthropic โดยไคลเอนต์จะใช้ http://localhost:11434 เป็น base URL และต่อท้ายด้วย /v1/messages ซึ่งเป็นสิ่งที่ Claude Code ใช้งาน โดยส่วนใหญ่แล้ว agent จะใช้ /v1/chat/completions, Codex ใช้ /v1/responses และ Claude Code ใช้ /v1/messages เนื่องจาก agent ของคุณรองรับรูปแบบเหล่านี้อยู่แล้ว จึงไม่มีการตั้งค่าอื่นใดที่ต้องเปลี่ยนแปลง

ส่วนนี้ใช้เวลาดำเนินการเพียง 5 นาที ผลลัพธ์จะใช้งานได้ดีหรือไม่นั้นขึ้นอยู่กับการตั้งค่า 2 อย่างที่แทบไม่มีใครเปลี่ยน นั่นคือ context length และ keep-alive รวมถึงการมอบหมายงานที่เหมาะสมกับโมเดลนั้นๆ ทั้งสองหัวข้อนี้จะมีส่วนอธิบายแยกต่างหาก และขีดจำกัดที่แท้จริงจะระบุไว้ในช่วงท้าย

Coding agent ตัวใดบ้างที่รองรับการตั้งค่า base URL แบบ local

การทดสอบทำได้ด้วยคำถามเดียวคือ เครื่องมือนั้นเปิดให้ตั้งค่า base URL ได้หรือไม่ หากทำได้ เครื่องมือนั้นจะสามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณได้

Ollama มีหน้าเอกสารการเชื่อมต่อสำหรับ Claude Code, OpenCode, Codex, Cline, Roo Code, Zed, JetBrains IDEs และ VS Code ส่วน Aider มีเอกสารการรองรับ Ollama แยกต่างหาก ซึ่งครอบคลุมเครื่องมือส่วนใหญ่ที่ผู้คนมักหมายถึงเมื่อพูดถึง coding agent ในเดือนตุลาคม 2026 อย่างไรก็ตาม เครื่องมือเหล่านี้ไม่ได้ใช้รูปแบบ API เดียวกันทั้งหมด และความแตกต่างนี้เองที่เป็นสาเหตุให้การตั้งค่าล้มเหลว

  • 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 ให้ใช้เลเยอร์แปลงข้อมูลคั่นกลางแทน เช่น a self-hosted LiteLLM gateway เพื่อแปลงรูปแบบโมเดลของคุณให้ตรงกับที่ client ต้องการ

Ollama สามารถเขียนไฟล์ตั้งค่าเหล่านี้ให้คุณได้ โดย ollama launch opencode จะเริ่มการทำงานของ OpenCode พร้อมการตั้งค่าแบบ inline สำหรับโมเดลที่คุณเลือก ส่วน ollama launch claude จะทำเช่นเดียวกันสำหรับ Claude Code และ ollama launch droid --config จะเขียนไฟล์ตั้งค่าโดยไม่เปิดใช้งานเครื่องมือดังกล่าว

ติดตั้ง Ollama และดาวน์โหลดโมเดลที่รองรับการเรียกใช้เครื่องมือ (Tool Calling)

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) เนื่องจากเป็นกลไกหลักที่เอเจนต์ใช้ในการทำงาน เอเจนต์จะอ่านไฟล์ เขียน patch รันการทดสอบ จากนั้นอ่านผลลัพธ์ที่ผิดพลาดและแก้ไขใหม่ โมเดลที่ไม่สามารถสร้างคำสั่งเรียกใช้เครื่องมือได้จะอธิบายการแก้ไขเป็นข้อความแทนที่จะลงมือทำจริง ซึ่งจะทำให้เอเจนต์วนลูปหรือหยุดทำงาน ให้มองหาป้ายกำกับ 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:30b

ANTHROPIC_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) ที่ตรวจพบ ซึ่งค่าเริ่มต้นเหล่านี้ได้ถูกเผยแพร่ไว้แล้ว:

แผนภูมิOllama default context length by available VRAM, documented October 2026
ข้อมูลเบื้องหลังแผนภูมินี้
[
  {
    "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 ในแถวสุดท้าย

เอเจนต์จะใช้ tokens ไปแล้ว 4096 ก่อนที่จะเริ่มทำงานใดๆ ทั้ง 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 ps

ollama ps คือคำสั่งตรวจสอบ โดยจะแสดงคอลัมน์ CONTEXT ซึ่งตัวเลขนั้นคือจำนวนที่โมเดลได้รับจริง ค่า ID และ SIZE ของคุณจะแตกต่างกัน:

NAME               ID              SIZE     PROCESSOR    CONTEXT    UNTIL
qwen3-coder:30b    a1b2c3d4e5f6    24 GB    100% GPU     64000      4 minutes from now

ควรตั้งค่าบนเซิร์ฟเวอร์แทนที่จะตั้งในตัวเอเจนต์ด้วยเหตุผลสองประการ ประการแรก schema ของ OpenAI chat completions ไม่มีฟิลด์สำหรับความยาว context ดังนั้นไคลเอ็นต์ที่รองรับ OpenAI จึงไม่สามารถร้องขอค่านี้ได้ ประการที่สอง การตั้งค่านี้เป็นแบบต่อเซิร์ฟเวอร์ ดังนั้นเอเจนต์ทุกตัวที่คุณชี้มาที่เซิร์ฟเวอร์นี้จะได้รับค่าดังกล่าวไปโดยอัตโนมัติ ฝั่งขาออก (output) มีขีดจำกัดของตัวเอง และต่างจากความยาว context ตรงที่ค่านี้สามารถส่งผ่าน compatibility endpoint ได้ ดังนั้น num_predict และฟิลด์ max_tokens ที่แมปเข้าหากัน คือสิ่งที่คุณควรปรับเมื่อการตอบกลับหยุดลงกลางคันระหว่างการทำ patch หากโมเดลตัวใดตัวหนึ่งต้องการหน้าต่างที่แตกต่างออกไป ให้สร้างโมเดลใหม่โดยใช้ Modelfile:

FROM qwen3-coder:30b
PARAMETER num_ctx 65536
ollama create qwen3-coder-64k -f Modelfile

Context ไม่ได้มาฟรีๆ หน้าต่างที่ยาวขึ้นใช้หน่วยความจำมากขึ้น ดังนั้นให้คอยสังเกตคอลัมน์ PROCESSOR ค่า 100% GPU คือสิ่งที่คุณต้องการ เมื่อส่วนหนึ่งของโมเดลถูกย้ายไปประมวลผลที่ CPU อัตราการประมวลผล tokens จะลดลงจนลูปของเอเจนต์ใช้งานไม่ได้จริง และ การวัดจำนวน tokens ต่อวินาทีบน LLM ท้องถิ่น คือวิธีที่คุณจะพบขีดจำกัดที่แท้จริงของเครื่องคุณ การประเมินขนาดเครื่องก่อนตัดสินใจซื้อได้อธิบายไว้ใน RAM และ CPU ที่จำเป็นสำหรับ VPS ที่ใช้รัน coding agent

คงโมเดลไว้ในหน่วยความจำระหว่างการร้องขอ

โดยปกติแล้ว 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-vps

Agent ของคุณจะยังคงชี้ไปที่ 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 หาก PROCESSOR แสดงค่า 100% CPU บนเครื่องที่มี GPU ให้ตัดสาเหตุอื่นออกก่อน: Ollama อาจตรวจไม่พบ GPU เลย เอกสารของ Ollama ระบุว่าบน Linux หลังจากผ่านรอบ suspend/resume บางครั้งมันอาจตรวจไม่พบ NVIDIA GPU และเปลี่ยนไปใช้ CPU แทน ซึ่งการโหลด driver ใหม่ด้วย sudo rmmod nvidia_uvm && sudo modprobe nvidia_uvm จะช่วยแก้ปัญหานี้ได้ หากพบ GPU แล้วแต่การแบ่งโหลด (split) ยังคงอยู่ ให้ลดความยาว 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 ลดลงอย่างมาก

#ollama#coding-agent#openai-compatible#local-llm#self-hosted-ai