Skip to main content

Jev ภาษาไทยมาแล้ว! โมเดล Opensource โดยทีม OpenThai ภายใต้ชื่อ OpenThai-SystemOne

อัปเดต 22 ก.ย. 2569: เวอร์ชัน 0.3 ออกแล้ว public benchmark 61.9 → 74.3 (ห่าง Nimble-9B แค่ 0.5 จุด) และ Wisesight 38.7 → 51.6 ตัวเลขล่าสุด เดโม Doom และตัวอย่างงานไทยอยู่ที่หน้าโมเดล บทความนี้คงตัวเลขวันเปิดตัวไว้ตามเดิม

Jev ภาษาไทยมาแล้ว! โมเดล Opensource โดยทีม OpenThai ภายใต้ชื่อ OpenThai-SystemOne

Jev ภาษาไทยมาแล้ว! โมเดล Opensource โดยทีม OpenThai ภายใต้ชื่อ OpenThai-SystemOne

5 วันหลัง TypeSafe เปิดตัว Jev ("System One model" ที่ไม่สร้างข้อความ แต่ตอบเป็นการตัดสินใจพร้อมความน่าจะเป็นในรอบเดียว) ทีม OpenThai ทำเวอร์ชันโอเพนซอร์สสำหรับภาษาไทย+อังกฤษออกมาแล้ว

  • โมเดล 0.8B พารามิเตอร์ รันบนโน้ตบุ๊กได้
  • ฐาน Qwen3.5-0.8B เทรนต่อด้วยข้อความไทย ~5 พันล้านโทเคน แล้วเปลี่ยนหัวโมเดลจาก 248k คำ เป็น "หัวตัดสินใจ 256 ช่อง"
  • ป้อน state (ข้อความ/JSON) + คำถามแบบ เลือกตัวเลือก / ให้คะแนน / ใช่-ไม่ใช่ → ได้คำตอบทุกข้อพร้อมความมั่นใจในการคำนวณรอบเดียว
  • ผลบน public benchmark 13 ชุดเดียวกับ Bespoke-Nimble-9B: เรา 61.9 / Nimble-9B 74.8 / Jev 76.0 / Qwen3.5-0.8B ดิบ 45.4 (ชนะ 9B ใน 4 จาก 13 ชุด) และงานภาษาไทย: intent 86.4%, หัวข้อข่าว 97.7%, XNLI-th 76.5%
  • ใช้ทำ: จัดหมวดหมู่ (Text Classification), คัดกรองข้อความ (Sentiment Analysis), เลือก Action ให้ AI (Agentic Computer Use)
  • Apache-2.0 เปิดหมด ทั้งน้ำหนักโมเดล สคริปต์เทรน คอนฟิก และข้อมูลสังเคราะห์

โหลด/อ่านวิธีใช้: huggingface.co/iapp/OpenThai-SystemOne ลองเล่นในเบราว์เซอร์: iapp.co.th/docs/llm/openthai-systemone โค้ด: github.com/iapp-technology/openthai-systemone รายละเอียดเต็ม: หน้าโมเดล OpenThai-SystemOne

ตัวอย่างคำตอบจริง​

ticket "โดนหักเงินซ้ำสองครั้ง ขอเงินคืนด่วน" ถามว่าทีมใดควรรับผิดชอบ และลูกค้าขอเงินคืนหรือไม่ โมเดลตอบทั้งสองข้อในการคำนวณรอบเดียว ไม่มีโทเคนขาออกเลย

{"answers": {"department": {"choice": "billing", "probabilities": {"billing": 0.972, "technical": 0.009, "sales": 0.018}, "confidence": 0.87},
"refund": {"noul": 0.954}}, "usage": {"input_tokens": 91, "output_tokens": 0}}

ธุรกิจไทยตัดสินใจแบบนี้ซ้ำ ๆ วันละหลายล้านครั้ง การเรียก LLM ทุกครั้งแพงและช้าเกินไป โมเดลประเภท System One คือรูปทรงที่ถูกต้องสำหรับงานแบบนี้ และยังไม่เคยมีตัวไหนสำหรับภาษาไทย

ทำงานอย่างไร​

สถาปัตยกรรม OpenThai-SystemOne

  • ฐานคือ text tower ของ Qwen3.5-0.8B (ตัด vision encoder ออก) เทรนต่อด้วยข้อความไทยราว 5 พันล้านโทเคน
  • หัว LM ขนาด 248k คำถูกแทนด้วยหัวตัดสินใจ 256 ช่อง ตัวเลือกแต่ละตัวถูกแนะนำด้วย control token <|ts_opt_i|> hidden state ที่ตำแหน่ง <|ts_answer|> ถูกฉายเป็น logit 256 ค่า mask ช่องที่เกินจำนวนตัวเลือก แล้ว softmax ช่อง 255 คือ abstain
  • ลำดับตัวเลือกถูกสลับระหว่างเทรน จึงไม่มี position bias นี่คือสถาปัตยกรรม ไม่ใช่ trick อ่าน logprob ของตัวอักษร
  • ผ่านขั้น calibration (Brier loss + temperature แยกตามประเภทคำถาม) เพื่อให้ค่า confidence ที่สูงหมายถึงความแม่นยำที่สูงจริง

ตัวเลข​

บน public benchmark 13 ชุดของ Bespoke Labs (ชุดเดียวกับที่ใช้เทียบ Jev) ค่าเฉลี่ยแบบ macro

โมเดลขนาดค่าเฉลี่ย
OpenThai-SystemOne0.8B61.9
Bespoke-Nimble-9B9B74.8
Jev (TypeSafe AI, ปิด)–76.0
Qwen3.5-0.8B ดิบ0.8B45.4

โมเดล 0.8B ชนะ Nimble-9B ใน 4 จาก 13 ชุด (MultiNLI, SummEval-consistency, HelpSteer2, Civil Comments) และแพ้ชัดในงานอ่านจับใจความแบบใช่/ไม่ใช่ภาษาอังกฤษ

ชุดทดสอบภาษาไทยที่กันออกจากการเทรน (ชุด eval เต็ม): Prachathai 97.7, MASSIVE-th 86.4, XNLI-th 76.5 (แบบใช่/ไม่ใช่ 84.3), SIB-200 Thai 77.5, Wongnai 63.3 ตรงเป๊ะ (MAE 0.44), เลือกเครื่องมือ xLAM 99.4 และ Wisesight 38.7 ซึ่งเป็นจุดอ่อนที่รู้แล้วและกำลังแก้ใน v0.2 ค่า ECE บนชุดไทยไม่เกิน 0.05 จึงเชื่อค่า confidence ได้

ความเร็ว: คำขอ 3 คำถามใช้ราว 40 มิลลิวินาทีบน H100 และ 154 มิลลิวินาทีบน MacBook M3 Max

ข้อจำกัดที่บอกไว้ก่อน​

นี่คือเวอร์ชัน 0.1 โมเดล 0.8B ไม่ใช่โมเดลคิดวิเคราะห์ มันปล่อยตัวเลือกที่ไม่มีอยู่ไม่ได้ แต่เลือกผิดได้ ใช้ค่า confidence แล้วส่งเคสที่ไม่มั่นใจไปโมเดลใหญ่หรือคน รับข้อความอย่างเดียว สูงสุด 255 ตัวเลือกต่อคำถาม และ CPU ล้วนยังช้า ใช้ GPU หรือ Apple MPS

ลองใช้​

pip install "git+https://github.com/iapp-technology/openthai-systemone"
from openthai_systemone import SystemOneClient, Choice, Noul
c = SystemOneClient("iapp/OpenThai-SystemOne")
r = c.system_one("โดนหักเงินซ้ำสองครั้ง ขอเงินคืนด่วน",
{"dept": Choice(instructions="ทีมใดควรรับผิดชอบ", criteria={"billing": None, "technical": None}),
"refund": Noul(instructions="ลูกค้าขอเงินคืนหรือไม่")})
print(r.answers["dept"].probabilities, r.answers["refund"].noul)

รูปแบบ API เหมือน POST /v1/systemone ของ TypeSafe จึงชี้โค้ดเดิมมาที่โมเดลนี้ได้เลย

ใครลองแล้วเจออะไร บอกเราได้ที่ Discord หรือ กลุ่ม Facebook เราอยากได้ชุดทดสอบภาษาไทยเพิ่ม โดยเฉพาะงานที่มีตัวเลือกเยอะ ๆ และงาน UI/agent