บทความ › AI

EP7 Claude ทำงานร่วมกับ AI ตัวอื่น โมเดลในเครื่อง และเจ้าอื่นผ่านทางเดียว

ไม่มีโมเดลไหนดีและถูกที่สุดทุกงาน วิธีให้ Claude ทำงานร่วมกับโมเดลในเครื่องและโมเดลเจ้าอื่น ผ่านชั้นกลางชั้นเดียว พร้อมโค้ด 15 บรรทัดและทีม agent 17 ตัวที่ใช้จริง

เริ่มต้น อ่าน 6 นาที 15 ตุลาคม 2569 จาก Claude Code สู่ระบบ AI หลายเจ้า · บทที่ 7/8

อ่านจบแล้วจะรู้
  • อย่าให้โค้ดผูกกับเจ้าเดียว ให้ทุกการเรียกโมเดลผ่านฟังก์ชันกลางที่เดียว เปลี่ยนเจ้าแค่แก้ค่าตั้ง
  • โมเดลในเครื่องเหมาะกับงานปริมาณมากและข้อมูลที่ห้ามออกนอกเครื่อง โมเดลใหญ่บน cloud เก็บไว้ให้งานที่ต้องเก่งจริง
  • ข้อมูลที่ส่งผ่าน gateway ไปเจ้าอื่น คือข้อมูลที่ออกจากมือเรา ต้องตัดสินก่อนส่ง

EP5 เราเลือกรุ่นของ Claude ให้เหมาะงาน EP6 เราได้มาตรฐานกลางให้ AI ต่อกับระบบอื่น ตอนนี้ไปอีกขั้น คือให้ Claude ทำงานร่วมกับ AI ตัวอื่น ทั้งโมเดลที่รันในเครื่องเอง และโมเดลของเจ้าอื่น

ทำไมต้องหลายเจ้า

  • ข้อมูลบางอย่างห้ามออกนอกเครื่อง เช่น ข้อมูลลูกค้า โมเดลในเครื่องประมวลผลได้โดยไม่ส่งไปไหน
  • งานปริมาณมาก เช่น สรุปข้อความหลายพันชิ้น โมเดลในเครื่องไม่คิดเงินต่อ token
  • ความเห็นที่สอง โมเดลจากเจ้าอื่นถูกฝึกมาต่างกัน มองพลาดคนละจุด ใช้ตรวจงานกันได้
  • ไม่ฝากชีวิตไว้กับเจ้าเดียว ถ้าเจ้าหนึ่งล่มหรือขึ้นราคา ระบบยังทำงานได้

หลักการ: ให้ทุกการเรียกโมเดลผ่าน ชั้นกลางชั้นเดียว เปลี่ยนเจ้าคือแก้ค่าตั้ง ไม่ใช่แก้โค้ดทั้งระบบ

สองทางที่ใช้บ่อยที่สุด

1. โมเดลในเครื่องด้วย Ollama ติดตั้งแล้วโหลดโมเดลด้วยคำสั่งเดียว

ollama pull qwen2.5:14b
ollama run qwen2.5:14b "สรุปข้อความนี้ให้เหลือสามบรรทัด: ..."

Ollama เปิด API ที่ http://localhost:11434 ในรูปแบบเดียวกับ OpenAI โปรแกรมที่คุยกับ OpenAI ได้ ก็คุยกับมันได้

2. หลายเจ้าผ่าน gateway เช่น OpenRouter ใช้ key เดียว เรียกโมเดลได้หลายเจ้า เปลี่ยนแค่ชื่อโมเดล รูปแบบ API ก็แบบเดียวกัน

ชั้นกลาง 15 บรรทัด

เพราะทั้งสองทางใช้รูปแบบ API เดียวกัน ฟังก์ชันเดียวจึงคุยได้ทั้งคู่

import json, os, urllib.request

PROVIDERS = {
    "local": ("http://localhost:11434/v1", None),
    "openrouter": ("https://openrouter.ai/api/v1", os.environ.get("OPENROUTER_API_KEY")),
}

def ask(provider, model, prompt):
    base, key = PROVIDERS[provider]
    body = json.dumps({"model": model, "messages": [{"role": "user", "content": prompt}]}).encode()
    req = urllib.request.Request(base + "/chat/completions", body, {"Content-Type": "application/json"})
    if key:
        req.add_header("Authorization", "Bearer " + key)
    with urllib.request.urlopen(req) as r:
        return json.load(r)["choices"][0]["message"]["content"]

ใช้ Python ล้วน ไม่ต้องติดตั้งอะไรเพิ่ม key อ่านจากตัวแปรแวดล้อม ไม่อยู่ในโค้ด

Claude เรียก AI ตัวอื่นยังไง

Claude Code เป็น “หัวหน้า” ได้สามแบบ เรียงจากง่ายไปยาก

  1. ผ่านสคริปต์ บันทึกโค้ดข้างบนเป็น ask.py แล้วสั่ง Claude ว่า “ใช้ python ask.py ให้โมเดลในเครื่องสรุป log ทั้ง 500 ไฟล์ แล้วเอาผลมาวิเคราะห์ต่อ”
  2. ผ่าน MCP ห่อ ask เป็นเครื่องมือใน MCP server (EP6) ชื่อ ask_local_model Claude จะเห็นเป็นเครื่องมือหนึ่งที่เรียกได้เอง
  3. กลับด้าน ระบบอื่นเป็นหัวหน้า และเรียก Claude เฉพาะงานที่ต้องเก่งจริง แบบตัวอย่างข้างล่าง

ตัวอย่างจริง: ทีม 17 ตัว ใช้ Claude แค่ตัวเดียว

เรามีทีม agent 17 ตัวรันอยู่บนเครื่องในบ้าน แต่ละตัวมีหน้าที่ เช่น วางแผนงาน ตรวจคุณภาพ เขียนคอนเทนต์ วิเคราะห์ข้อมูล

  • 16 ตัวรันโมเดลในเครื่อง (Qwen ขนาด 9B และ 14B กับ DeepSeek-R1 ขนาด 7B) บนการ์ดจอหน่วยความจำ 12GB
  • ตัวเดียวที่ใช้ Claude คือตำแหน่งนักพัฒนา เรียก Claude Sonnet ผ่าน OpenRouter เพราะงานเขียนโค้ดคืองานที่โมเดลเล็กพลาดแล้วแพงที่สุด
ทีม agent 17 ตัว แต่ละจุดคือหนึ่งตัวQwen 9B · 11 ตัว · ในเครื่องQwen 14B · 4 ตัว · ในเครื่องDeepSeek-R1 7B · 1 ตัว · ในเครื่องClaude Sonnet · 1 ตัว · ผ่าน gateway16 ตัวรันบนการ์ดจอ 12GB · Claude ทำแค่งานเขียนโค้ด
ใช้ตัวแพงเฉพาะตำแหน่งที่พลาดแล้วแพงที่สุด

ข้อจำกัดที่เจอจริง: การ์ดจอ 12GB รันโมเดล 14B ได้ทีละตัว หรือโมเดลเล็กสองตัวพร้อมกัน agent หลายตัวจึงต้องผลัดกันใช้ เครื่องในบ้านไม่ได้ฟรีจริง จ่ายเป็นค่าไฟ ค่าเครื่อง และความช้า แทนค่า token

สิ่งที่ต้องระวัง

  • ข้อมูลที่ส่งผ่าน gateway ออกไปแล้ว ส่งต่อไปยังเจ้าของโมเดลปลายทาง ก่อนส่งข้อมูลลูกค้าหรือโค้ดลับ ให้ตัดสินก่อนว่าส่งได้ไหม ถ้าไม่ได้ ใช้โมเดลในเครื่อง
  • โมเดลเล็กพลาดง่ายกว่า ใช้กับงานที่ตรวจผลได้ง่าย หรือมีตัวใหญ่ตรวจซ้ำ
  • แต่ละเจ้าตอบไม่เหมือนกัน คำสั่งที่ใช้ได้ดีกับ Claude อาจได้ผลต่างไปกับตัวอื่น ต้องลองกับงานจริงก่อน
  • ระบบหลายส่วน พังได้หลายจุด ใส่การจำกัดเวลารอ และมีทางสำรองเมื่อเจ้าหนึ่งไม่ตอบ

ลองเองใน 10 นาที

  1. ติดตั้ง Ollama แล้ว ollama pull qwen2.5:7b (ตัวเล็ก เครื่องทั่วไปรันได้)
  2. บันทึกโค้ดชั้นกลางเป็น ask.py เพิ่มบรรทัดท้าย print(ask("local", "qwen2.5:7b", "อธิบาย MCP ในสองประโยค")) แล้วรัน
  3. เปิด Claude Code สั่งให้ใช้ ask.py ส่งงานสรุปให้โมเดลในเครื่อง แล้วให้ Claude ตรวจผล

ตรงไหนที่คนต้องทำ

คนเป็นคนตัดสิน ว่าข้อมูลไหนออกนอกเครื่องได้ และ งานไหนคุ้มที่จะจ่ายให้ตัวเก่ง การตัดสินแบบนี้ขึ้นกับสัญญากับลูกค้า งบ และความเสี่ยงที่รับได้ AI ช่วยคำนวณได้ แต่ไม่ควรตัดสินแทน

ตอนหน้า

พอมีเครื่องมือ skill agent และโมเดลรวมกันหลายร้อยอย่าง ปัญหาใหม่คือ จะเลือกใช้ตัวไหน EP8 ตอนสุดท้าย จะสร้างตัวจับคู่งานกับเครื่องมือ และวัดว่ามันเลือกถูกจริงหรือไม่

คำถามที่พบบ่อย

โมเดลในเครื่องต้องใช้เครื่องแรงแค่ไหน

ขึ้นกับขนาดโมเดล เครื่องที่ใช้ในบทความนี้เป็นการ์ดจอหน่วยความจำ 12GB รันโมเดลขนาด 14B ได้ทีละตัว หรือโมเดลเล็กสองตัวพร้อมกัน โมเดลขนาด 7–9B รันบนเครื่องทั่วไปที่มีการ์ดจอได้

ใช้ AI หลายเจ้าแล้วผลจะแย่ลงไหม

ถ้าเลือกงานให้เหมาะไม่แย่ลง แต่ต้องวัด โมเดลแต่ละเจ้าตอบคำสั่งเดียวกันไม่เหมือนกัน ก่อนย้ายงานไปตัวอื่น ให้ลองกับตัวอย่างงานจริงสักสิบชิ้นก่อน

คำสั่งและค่าตั้งในบทความทดสอบบนระบบตัวอย่าง ลองบนเครื่องทดสอบก่อนใช้กับระบบจริงเสมอ

อ่านต่อ

#AIเริ่มต้น

รัน LLM บนเครื่องตัวเองด้วย Ollama คุ้มเมื่อไร และต้องมี VRAM เท่าไร

รันโมเดล AI ในเครื่องด้วย Ollama เมื่อไรคุ้ม เมื่อไรไม่คุ้ม คิด VRAM จากขนาดโมเดลกับ quantization ทีละขั้น และช่องว่างคุณภาพที่ต้องยอมรับ

อ่าน 9 นาที
#AIเริ่มต้น

EP8 ให้ระบบเลือกเครื่องมือเอง และวัดว่าเลือกถูก ตอนจบซีรีส์

มีเครื่องมือ skill agent รวมกันหลายร้อย จะรู้ได้ยังไงว่างานนี้ควรใช้ตัวไหน วิธีสร้างตัวจับคู่งานกับเครื่องมือ ค้นด้วยความหมาย ให้ LLM จัดอันดับ และวัดผลด้วยชุดทดสอบ

อ่าน 5 นาที
#AIกลาง

Sandbox ให้ AI เขียนโค้ด: จำกัดไฟล์และเน็ตด้วย bubblewrap กับ Seatbelt

ให้ AI coding agent รันคำสั่งได้เองโดยไม่ต้องกดอนุมัติทุกครั้ง ด้วย sandbox ระดับ OS ตั้งขอบเขตไฟล์และเน็ตยังไง ค่าเริ่มต้นที่ต้องรู้ และส่วนที่ sandbox ไม่ครอบ

อ่าน 8 นาที