ข้ามไปยังเนื้อหา
KoishiAI
EN
← สารบัญ

บทที่ 6 จาก 9 · AI 101 — คู่มือเริ่มต้นสำหรับคนที่จะเอา AI ไปใช้งานจริง

เลือกโมเดลให้เหมาะกับงาน

เริ่มจากข้อจำกัดของคุณ ไม่ใช่จาก leaderboard ตารางงานต่อประเภทโมเดล กฎเดียวที่ใช้ได้เสมอ วิธีสร้างชุดทดสอบของตัวเอง ข้อควรรู้เฉพาะภาษาไทย และการอ่านใบอนุญาตก่อนใช้เชิงพาณิชย์

6.1 เริ่มจากข้อจำกัด ไม่ใช่จาก leaderboard

คำถามที่ต้องตอบตามลำดับนี้ ก่อนจะไปดูว่าโมเดลไหนคะแนนสูง

#คำถามสิ่งที่คำตอบตัดออก
1ข้อมูลออกนอกองค์กรได้ไหมถ้าไม่ได้ ตัดตัวเลือก API ทิ้งทั้งหมด
2ต้องตอบเร็วแค่ไหนต้องได้ใน 1 วินาที หรือรอ 30 วินาทีก็ได้
3มีคนใช้พร้อมกันกี่คนกำหนดว่าต้องใช้ตัวรันแบบไหนและ VRAM เท่าไร
4ฮาร์ดแวร์ที่มีคืออะไรกำหนดขนาดโมเดลสูงสุดที่เป็นไปได้
5งบต่อเดือนเท่าไรเทียบต้นทุน API กับต้นทุนรันเอง
6ภาษาไทยสำคัญแค่ไหนตัดโมเดลที่อ่อนภาษาไทยออก แม้คะแนนอังกฤษจะสูง
7งานคืออะไรกันแน่เพิ่งมาถึงข้อนี้ค่อยเลือกประเภทและขนาด

ข้อ 1–6 มักตัดตัวเลือกไปเกิน 90% ก่อนที่จะได้ดูคะแนนด้วยซ้ำ

6.2 ตารางงาน → โมเดลที่ควรใช้

งานประเภทที่ต้องใช้ขนาดที่พอหมายเหตุ
จำแนกข้อความเป็นหมวดLLM เล็ก หรือ classifier0.5–3Bงานนี้ไม่ต้องใช้โมเดลใหญ่เลย โมเดลเล็กที่ fine-tune แล้วมักแม่นกว่าและถูกกว่ามาก
สกัดข้อมูลเป็น JSONLLM + structured output3–8Bใช้ตัวรันที่บังคับ schema ได้ จะแม่นขึ้นมากโดยไม่ต้องใช้โมเดลใหญ่
สรุปและเขียนใหม่LLM8–14Bถ้าต้องการภาษาไทยที่ลื่นจริง ให้เผื่อขนาดขึ้นไปหรือเลือกตัวที่ฝึกภาษาไทยมาโดยเฉพาะ
ตอบคำถามจากเอกสารEmbedding + Reranker + LLM8–14Bคุณภาพขึ้นกับการค้นมากกว่าขนาดของ LLM ลงทุนที่ retrieval ก่อน
เขียนโค้ดLLM สาย Coder14–32B ขึ้นไปงานนี้ขนาดมีผลชัดเจน โมเดลเล็กจะเขียนโค้ดที่ดูถูกแต่รันไม่ผ่าน
คณิต / ตรรกะซับซ้อนReasoning model14B ขึ้นไปโมเดล reasoning ขนาดกลาง มักชนะโมเดลธรรมดาที่ใหญ่กว่าในงานประเภทนี้
อ่านเอกสารสแกน / ใบเสร็จVLM2–8BVLM เล็กที่ฝึกงาน OCR มาโดยเฉพาะ มักดีกว่า VLM ทั่วไปที่ใหญ่กว่า
ถอดเสียงASRไม่เกี่ยวกับ Bเลือกจากความแม่นในภาษาที่ใช้ ไม่ใช่จากจำนวนพารามิเตอร์
ค้นหาเชิงความหมายEmbedding0.3–1Bเลือกตัวที่รองรับหลายภาษาและมิติเวกเตอร์ที่ฐานข้อมูลของคุณรับได้
ทำนายตัวเลขจากตารางไม่ใช่ LLMใช้ XGBoost หรือ LightGBM แม่นกว่า เร็วกว่า อธิบายได้ และรันบน CPU

6.3 กฎเดียวที่ใช้ได้เสมอ

เลือกโมเดลที่เล็กที่สุดที่ผ่านชุดทดสอบของคุณ

ไม่ใช่โมเดลที่ดีที่สุดในตาราง leaderboard เพราะโมเดลเล็กกว่าหมายถึงตอบเร็วกว่า ถูกกว่า รันหลายตัวพร้อมกันได้ และเหลือ VRAM ไว้ทำอย่างอื่น

วิธีปฏิบัติคือ เริ่มจากตัวที่เล็กเกินไปแน่ ๆ แล้วไต่ขึ้นทีละขั้นจนผ่านเกณฑ์ แล้วหยุด อย่าเริ่มจากตัวใหญ่แล้วค่อยลด เพราะคุณจะไม่มีวันได้ลดจริง

6.4 สร้างชุดทดสอบของตัวเอง — ขั้นตอนที่คนข้ามบ่อยที่สุด

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

{"id":"ocr-01","input":"[ภาพใบเสร็จ]","expect":{"vendor":"ร้านค้า ก","total":1250.00},"why":"เคสปกติ"}
{"id":"ocr-02","input":"[ภาพเอียง 15 องศา]","expect":{"total":890.50},"why":"ภาพถ่ายมือ"}
{"id":"ocr-03","input":"[ใบเสร็จมีลายน้ำ]","expect":{"total":2100.00},"why":"เคสที่เคยพลาด"}
{"id":"sum-01","input":"บทความ 2000 คำ...","expect_contains":["ประเด็นหลัก A","ตัวเลข 45%"],"why":"ต้องไม่ตกตัวเลข"}
{"id":"neg-01","input":"คำถามนอกขอบเขต","expect_behavior":"ปฏิเสธ","why":"ต้องไม่มั่ว"}

หลักการเลือกตัวอย่าง:

  • 60% เคสปกติที่เจอบ่อยที่สุด
  • 30% เคสยากที่เคยพลาดจริง — มีค่าที่สุด เก็บทุกครั้งที่เจอ
  • 10% เคสที่โมเดลควรปฏิเสธหรือบอกว่าไม่รู้

เทียบหลายตัวด้วยเกณฑ์เดียวกัน:

import json, time
from openai import OpenAI

MODELS = [
    ("qwen3:4b",  "http://localhost:11434/v1"),
    ("qwen3:8b",  "http://localhost:11434/v1"),
    ("qwen3:14b", "http://localhost:11434/v1"),
]

cases = [json.loads(l) for l in open("evalset.jsonl", encoding="utf-8")]

for name, base in MODELS:
    client = OpenAI(base_url=base, api_key="local")
    ok, latencies = 0, []
    for c in cases:
        t0 = time.perf_counter()
        r = client.chat.completions.create(
            model=name,
            messages=[{"role": "user", "content": c["input"]}],
            temperature=0, max_tokens=512)
        latencies.append(time.perf_counter() - t0)
        out = r.choices[0].message.content
        # เกณฑ์ตรวจต้องเป็นแบบอัตโนมัติ อย่าใช้สายตา
        if all(k in out for k in c.get("expect_contains", [])):
            ok += 1
    latencies.sort()
    print(f"{name:14s} ผ่าน {ok}/{len(cases)} "
          f"p50={latencies[len(latencies)//2]:.2f}s "
          f"p95={latencies[int(len(latencies)*.95)-1]:.2f}s")

ตัดสินใจจากตารางนี้ ไม่ใช่จากความรู้สึกหลังลองคุยไม่กี่ประโยค

6.5 ข้อควรรู้เฉพาะภาษาไทย

ประเด็นผลกระทบและวิธีรับมือ
Tokenizer ไม่มีประสิทธิภาพข้อความไทยกิน token มากกว่าอังกฤษหลายเท่าที่ความหมายเท่ากัน ทำให้ค่า API แพงขึ้น context เต็มเร็วขึ้น และช้าลง ทดสอบด้วยข้อความจริงเพื่อดูอัตราส่วนของโมเดลที่เลือก
การตัดคำภาษาไทยไม่มีช่องว่างระหว่างคำ โมเดลที่ฝึกภาษาไทยน้อยจะตัดคำผิดและทำให้ความหมายเพี้ยน
คะแนนอังกฤษไม่ได้แปลว่าไทยดีโมเดลที่คะแนนอังกฤษสูงมากอาจตอบไทยได้แข็งทื่อหรือปนภาษา ต้องทดสอบด้วยข้อความไทยจริงเสมอ
โมเดลที่ปรับมาสำหรับไทยมีทั้งตัวที่พัฒนาในไทยและตัวที่เน้นภูมิภาคเอเชียตะวันออกเฉียงใต้ มักชนะโมเดลสากลขนาดเดียวกันในงานภาษาไทย คุ้มค่าที่จะทดสอบเทียบเสมอ
เอกสารราชการและธุรกิจไทยรูปแบบเฉพาะ เช่น เลขไทย พ.ศ. ที่อยู่แบบไทย มักต้อง fine-tune หรือใช้กฎช่วย ไม่ควรหวังให้โมเดลสากลทำได้เอง

6.6 รันเองหรือใช้ API

ประเด็นรันเอง (open-weight)API
ข้อมูลไม่ออกจากเครื่องออกไปยังผู้ให้บริการ ต้องมีข้อตกลงรองรับ
ต้นทุนจ่ายก้อนใหญ่ครั้งเดียว บวกค่าไฟจ่ายตามใช้ เริ่มต้นเกือบศูนย์
คุณภาพสูงสุดต่ำกว่าโมเดลปิดตัวท็อปเข้าถึงโมเดลที่เก่งที่สุดได้ทันที
ความเสถียรโมเดลไม่เปลี่ยนจนกว่าคุณจะเปลี่ยนเองผู้ให้บริการอัปเดตได้ พฤติกรรมอาจเปลี่ยน
ปรับแต่งfine-tune ได้เต็มที่จำกัดตามที่ผู้ให้บริการเปิดให้
เวลาที่ต้องดูแลสูง — ไดรเวอร์ อัปเดต ปัญหาเฉพาะหน้าเกือบศูนย์

แนวทางที่ได้ผลจริงสำหรับทีมเล็ก

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

6.7 ใบอนุญาต — ตรวจก่อนใช้เชิงพาณิชย์

ประเภทใบอนุญาตความหมายในทางปฏิบัติ
Apache 2.0 / MITใช้เชิงพาณิชย์ได้เต็มที่ ดัดแปลงได้ ปลอดภัยที่สุดสำหรับธุรกิจ
ใบอนุญาตเฉพาะของผู้พัฒนามักใช้เชิงพาณิชย์ได้ แต่มีเงื่อนไข เช่น เพดานจำนวนผู้ใช้ ข้อกำหนดการแสดงที่มา หรือข้อห้ามการใช้งานบางประเภท ต้องอ่านจริง
Non-commercial / Research onlyห้ามใช้หารายได้ รวมถึงการใช้ภายในบริษัทที่ทำเงินทางอ้อม ระวังโมเดลสร้างภาพที่มักเป็นแบบนี้
Gated ต้องขออนุมัติต้องยอมรับเงื่อนไขบนเว็บก่อนโหลด และเงื่อนไขนั้นผูกพันคุณจริง

สิ่งที่คนลืมตรวจบ่อยคือ ใบอนุญาตของ โมเดลที่ถูกดัดแปลง ไม่ว่าจะ fine-tune, merge หรือ quantize โดยบุคคลที่สาม จะสืบทอดข้อจำกัดจากโมเดลต้นทางเสมอ ผู้อัปโหลดจะเขียนว่า Apache 2.0 ก็ได้ แต่ถ้าฐานเป็นโมเดลที่มีข้อจำกัด ข้อจำกัดนั้นยังอยู่ ให้ไล่ดูถึงต้นทางก่อนใช้ในงานที่มีรายได้

สรุปบทนี้

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

บทถัดไปว่าด้วยแหล่งโหลดโมเดล และวิธีอ่าน repo ก่อนกดโหลด