Skip to main content

🎯 Jev ภาษาไทยมาแล้ว! OpenThai-SystemOne

ประกาศเมื่อ 20 กันยายน 2569 (2026)

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

0.8B พารามิเตอร์61.9 public benchฟรี Apache-2.0ไทย + อังกฤษ

ส่งข้อความ + คำถาม → ได้คำตอบพร้อมค่าความมั่นใจ ในรอบเดียว

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

  • โมเดล 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 เปิดหมด ทั้งน้ำหนักโมเดล สคริปต์เทรน คอนฟิก และข้อมูลสังเคราะห์

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

ลองเล่นในเบราว์เซอร์

ลองเล่น OpenThai-SystemOne ในเบราว์เซอร์ + เอกสาร APIiapp.co.th/docs/llm/openthai-systemone

ดาวน์โหลดและติดตั้ง

OpenThai-SystemOne — น้ำหนักโมเดลและ model card พร้อมตารางผลทดสอบhuggingface.co/iapp/OpenThai-SystemOne

โค้ด คอนฟิก และสคริปต์เทรนทั้งหมด — GitHubgithub.com/iapp-technology/openthai-systemone

pip install "git+https://github.com/iapp-technology/openthai-systemone"

ลองใช้งาน

ตัวอย่างจริงจากโมเดล: ticket ลูกค้าหนึ่งข้อความ ถามสองคำถาม ได้คำตอบทั้งหมดในการคำนวณรอบเดียว (91 โทเคนขาเข้า, 0 โทเคนขาออก)

curl -s https://api.iapp.co.th/v3/store/openthai/systemone -H "apikey: $IAPP_API_KEY" -H "content-type: application/json" -d '{
"state": {"ticket": "โดนหักเงินซ้ำสองครั้ง ขอเงินคืนด่วน"},
"questions": {
"department": {"type": "choice", "instructions": "ทีมใดควรรับผิดชอบ",
"criteria": {"billing": "การเงิน/คืนเงิน", "technical": "ระบบใช้งานไม่ได้", "sales": null}},
"refund": {"type": "noul", "instructions": "ลูกค้าขอเงินคืนหรือไม่"}
}}'
{"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}}

🔑 API สาธารณะ

endpoint https://api.iapp.co.th/v3/store/openthai/systemone บน iApp AI Marketplace ใช้ iApp API key (สมัครฟรี) รายละเอียดและ playground อยู่ที่ iapp.co.th/docs/llm/openthai-systemone หรือรันโมเดลบนเครื่องของคุณเองตามตัวอย่างด้านล่าง

รันบนเครื่องคุณเอง (CUDA, Apple MPS หรือ CPU)

from openthai_systemone import SystemOneClient, Choice, Score, Noul

c = SystemOneClient("iapp/OpenThai-SystemOne")
r = c.system_one(
state={"ticket": "โดนหักเงินซ้ำสองครั้ง ขอเงินคืนด่วน โทรไปสามรอบแล้วไม่มีใครรับ"},
questions={
"department": Choice(instructions="ทีมใดควรรับผิดชอบ", criteria={"billing": "การเงิน/คืนเงิน", "technical": "ระบบใช้งานไม่ได้", "sales": None}),
"frustration": Score(instructions="ลูกค้าหงุดหงิดแค่ไหน", criteria=["ใจเย็น", "หงุดหงิดแต่สุภาพ", "โกรธมาก"]),
"refund": Noul(instructions="ลูกค้าขอเงินคืนอย่างชัดเจนหรือไม่"),
},
)
print(r.answers["department"].choice, r.answers["department"].probabilities)
print(r.answers["frustration"].score, r.answers["refund"].noul)

เปิดเป็น HTTP server ที่ใช้ contract เดียวกับ POST /v1/systemone

OPENTHAI_SYSTEMONE_MODEL=iapp/OpenThai-SystemOne uvicorn openthai_systemone.server:app --port 8000

หรือโหลดด้วย transformers ตรง ๆ (remote code อยู่ในรีโปโมเดล)

from transformers import AutoModel
model = AutoModel.from_pretrained("iapp/OpenThai-SystemOne", trust_remote_code=True)

คำถาม 3 แบบ

ประเภทคุณให้คุณได้
choiceคำสั่ง + ตัวเลือกได้ถึง 255 ตัว (ชื่อ → คำอธิบาย หรือ null)choice, probabilities ของทุกตัวเลือก, confidence
scoreคำสั่ง + ระดับเรียงลำดับ 2–10 ระดับscore (ถ่วงน้ำหนักด้วยความน่าจะเป็น มีทศนิยมได้), probabilities, confidence
noulคำถามใช่/ไม่ใช่noul = ความน่าจะเป็นที่คำตอบคือ "ใช่"

ทุกคำถามในหนึ่งคำขอถูกตอบพร้อมกันในการคำนวณรอบเดียว confidence คือ 1 − เอนโทรปีที่ normalise แล้ว และมีค่า abstain = ความน่าจะเป็นที่ไม่มีตัวเลือกใดเหมาะเลย

📊 ตัวเลข

ทุกตัวเลขเป็น zero-shot โมเดลเห็นเพียง state คำสั่ง และชื่อ/คำอธิบายตัวเลือก และเป็นผลของโมเดล v0.1 ที่ผ่านขั้น calibration แล้ว

Public benchmark 13 ชุดของ Bespoke Labs (แหล่งข้อมูล split คำสั่ง และตัวสุ่มตัวอย่างชุดเดียวกับที่ใช้เทียบ 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 85.6, SummEval-consistency 84.0, HelpSteer2 42.8, Civil Comments 78.0) และแพ้ชัดในงานอ่านจับใจความแบบใช่/ไม่ใช่ (squad2 อยู่ระดับสุ่ม, boolq, pubmedqa) กับการให้คะแนน relevance ของบทสรุป ซึ่งเป็นชุดเดียวที่ score head ยัง calibrate ไม่ดี (ECE 0.79) ตัวเลขของ Nimble-9B และ Jev ตามที่ Bespoke Labs เผยแพร่ (18 ก.ย. 2569) ส่วนของเราวัดด้วย scripts/06_eval.py บนชุดข้อมูลที่ scripts/06b_public_benchmarks.py สร้างขึ้นใหม่จากแหล่งเดียวกัน ตารางแยกรายชุดพร้อม ECE อยู่ใน model card

ชุดทดสอบภาษาไทยที่กันออกจากการเทรน (ชุด eval เต็ม ชุดที่มี * กันออกทั้งชุดข้อมูล ECE ยิ่งต่ำยิ่ง confidence เชื่อถือได้)

ชุดทดสอบงานความแม่นยำECE
Prachathai67kหัวข้อข่าว (choice)97.70.005
Prachathai67kหัวข้อข่าว แบบใช่/ไม่ใช่ (noul)94.10.008
MASSIVE-thจับ intent 60 แบบ (choice)86.40.048
XNLI-thอนุมานความหมาย NLI (choice)76.50.028
XNLI-thentailment แบบใช่/ไม่ใช่ (noul)84.30.042
SIB-200 Thai*หัวข้อ 7 แบบ (choice)77.50.074
คู่ประโยคไทยเปลี่ยนข้อเท็จจริงเดียวchoice / noul / score78.7 / 82.3 / 73.20.105 / 0.088 / 0.133
Wongnaiดาวรีวิว 1–5 (score)63.3 ตรงเป๊ะ (MAE 0.44)0.010
xLAM tool selection (อังกฤษ)เลือกเครื่องมือ (choice)99.40.007
Wisesight*ความรู้สึกโซเชียล 4 แบบ (choice)38.7 (จุดอ่อนที่รู้แล้ว v0.2 แก้)0.341
banking77* (อังกฤษ)intent 77 แบบ (choice)32.7 (จุดอ่อน)0.165

ขั้น calibration ช่วยชุดที่โมเดลเก่งอยู่แล้ว (หัวข้อ/NLI ภาษาไทย, Wongnai, MultiNLI: ECE ไม่เกิน 0.05) แต่ไม่ช่วยชุดที่ความแม่นยำต่ำ เพราะ temperature แก้การจัดอันดับที่ผิดไม่ได้ บนชุดอังกฤษ ECE มัธยฐาน 0.15 จึงควรเชื่อ confidence บนงานไทยและงาน NLI/หัวข้อ ส่วนงานใช่/ไม่ใช่ภาษาอังกฤษที่ confidence ต่ำควรส่งต่อโมเดลใหญ่

ความเร็ว — คำขอ 3 คำถามใช้เวลาราว 40 มิลลิวินาทีบน H100 และ 154 มิลลิวินาทีบน MacBook M3 Max (Apple GPU ผ่าน MPS) คำถามที่มี 255 ตัวเลือกใช้ 44 มิลลิวินาทีบน H100 และ 1.5 วินาทีบน MacBook ส่วน CPU ล้วนยังช้า (ราว 4.6 วินาที) แนะนำให้ใช้ GPU หรือ MPS

⚙️ ทำงานอย่างไร

สถาปัตยกรรม: state และคำถาม → text tower ของ Qwen3.5-0.8B → hidden state ที่ตำแหน่ง ts_answer → หัวตัดสินใจ 256 ช่อง → masked softmax → choice / score / noul

  • แกนโมเดล — text tower ของ Qwen3.5-0.8B-Base (24 ชั้น ผสม Gated-DeltaNet กับ attention บริบท 262k) ตัด vision encoder ออก แล้ว เทรนต่อด้วยข้อความไทยราว 5 พันล้านโทเคน (เว็บ Wikipedia คู่แปลไทย-อังกฤษ และข้อความสถานะเครื่อง เช่น accessibility tree และ JSON)
  • หัวตัดสินใจ — หัว LM ขนาด 248k คำถูกแทนด้วยหัว 256 ช่อง ตัวเลือกแต่ละตัวถูกแนะนำด้วย control token <|ts_opt_0|> … <|ts_opt_254|> hidden state ที่ตำแหน่ง <|ts_answer|> ของแต่ละคำถามถูกฉายเป็น logit 256 ค่า ช่องที่เกินจำนวนตัวเลือกถูก mask ออก แล้ว softmax ให้การแจกแจง ช่อง 255 คือ abstain (ไม่มีตัวเลือกใดเหมาะ)
  • การอ่านผลchoice = ตัวเลือกที่ความน่าจะเป็นสูงสุด, score = Σ pᵢ·i บนระดับที่เรียงลำดับ, noul = p(ใช่)
  • ไม่มี position bias — ลำดับตัวเลือกถูกสลับระหว่างเทรน และมีตัวอย่าง abstain ปนอยู่ด้วย จึงไม่ใช่ trick อ่าน logprob ของตัวอักษร A/B/C

🔬 สูตรการเทรน

ทุกขั้นตอนอยู่ใน รีโป GitHub หนึ่งสคริปต์ต่อหนึ่งขั้น ทำซ้ำได้บน H100 ใบเดียว

  1. scripts/00_prepare_base.py — ตัด vision encoder ของ Qwen3.5-0.8B ออก เหลือ text tower (752M พารามิเตอร์)
  2. scripts/01_cpt_data.py + scripts/02_cpt_train.py — CPT เน้นภาษาไทย (FineWeb-2 ไทยที่กรองแล้ว, Thai Wikipedia, ข้อความคำสั่ง/สรุปภาษาไทย, OPUS ไทย↔อังกฤษ, FineWeb-Edu replay, accessibility tree และ JSON สังเคราะห์) H100 1 ใบ ราว 40 ชั่วโมง perplexity บนชุดกันออก 31.4 → 5.38
  3. scripts/03_decision_data.py — 1.81 ล้านตัวอย่างการตัดสินใจ แปลงจากชุดข้อมูลสาธารณะ 21 ชุด (ไทย: wisesight*, wongnai, prachathai, XNLI-th, MASSIVE-th, SIB-200*, ThaiExam, iapp_wiki_qa, Thai toxicity; อังกฤษ: MNLI, MMLU, ARC, HelpSteer2, AG News, DBpedia, CLINC, banking77*, Mind2Web, xLAM tools) ชุดที่มี * กันออกทั้งชุดเพื่อใช้ทดสอบเท่านั้น
  4. scripts/03b_synth_generate.py — งานตัดสินใจไทย/อังกฤษสังเคราะห์ราว 100k ชุด สร้างด้วย Qwen3.6-35B-A3B ติดป้ายซ้ำแบบ blind และกรองการรั่วของคำตอบ (ชุดข้อมูล iapp/openthai2.0-systemone-synth)
  5. scripts/04_decision_train.py — เปลี่ยนหัวโมเดล + SFT 12k step แล้วต่อด้วยขั้น calibration (Brier loss + temperature แยกตามประเภทคำถาม) เพื่อให้ confidence สูง ⇒ ความแม่นยำสูงจริง
  6. scripts/06b_public_benchmarks.py — สร้าง public benchmark 13 ชุดของ Bespoke Nimble ขึ้นใหม่ เพื่อเทียบแบบ like-for-like

👨‍👩‍👧 ตระกูล OpenThai 2.0

โมเดลทำอะไรขนาดสถานะ
OpenThai 2.0LLM สนทนา/ให้เหตุผลภาษาไทย อ่านภาพได้27Bเปิดตัวแล้ว
OpenThai 2.0 Legalโมเดลกฎหมายไทยสำหรับ RAG30B-A3Bเปิดตัวแล้ว
OpenThai-SystemOneโมเดลตัดสินใจไทย+อังกฤษ (ไม่สร้างข้อความ)0.8Bเปิดตัวแล้ว
OpenThai-SystemOne CPTโมเดลฐานที่เทรนต่อด้วยภาษาไทย (สำหรับงานวิจัย)0.8Bยังไม่เปิด

⚠️ ข้อจำกัด

  • เวอร์ชัน 0.1 — โมเดล 0.8B ไม่ใช่โมเดลคิดวิเคราะห์ ไม่ทำการตรวจสอบหลายขั้นหรือคำนวณเลข
  • ตอบได้เฉพาะตัวเลือกที่ให้ แต่ยังผิดได้ — โมเดลปล่อยตัวเลือกที่ไม่มีอยู่ไม่ได้ แต่เลือกผิดได้ ใช้ค่า confidence แล้วส่งเคสที่ไม่มั่นใจไปโมเดลใหญ่หรือคน
  • ข้อความอย่างเดียว — ไม่รับรูปภาพ สูงสุด 255 ตัวเลือกต่อคำถาม (มากกว่านั้นให้แบ่งเป็นกลุ่ม) และ 64k โทเคนต่อคำขอ
  • CPU ล้วนยังช้า — ใช้ GPU หรือ Apple MPS
  • จุดอ่อนของ v0.1 ที่รู้แล้ว — ความรู้สึกในโซเชียลไทย (Wisesight 38.7), intent ภาษาอังกฤษแบบละเอียด 77 แบบ (banking77 32.7), ใช่/ไม่ใช่แบบ extractive QA (squad2 ระดับสุ่ม) และการให้คะแนน relevance ของบทสรุป v0.2 เพิ่มชุดความรู้สึกไทยสังเคราะห์และ SFT รอบสอง คาดว่าจะขยับข้อแรก ไม่ใช่ข้ออื่น
  • calibration ภาษาอังกฤษอ่อนกว่าไทย — ECE มัธยฐาน 0.15 เทียบกับไม่เกิน 0.05 เพราะชุดเทรนเน้นภาษาไทยโดยตั้งใจ

🤝 ร่วมพัฒนา

  • ชุดทดสอบภาษาไทยเพิ่ม — โดยเฉพาะงานที่มีตัวเลือกเยอะ ๆ และงาน UI/agent ส่งมาเป็น issue ใน GitHub ได้เลย
  • GGUF / ONNX / MLX — หัวโมเดลเป็น Linear ธรรมดา ใครถนัดช่วยแปลงได้
  • LoRA adapter เฉพาะ domain — ส่งมาแชร์กันตามแผน "1 base, N adapters"
  • พูดคุยกันได้ที่ Discord OpenThaiGPT และ กลุ่ม Facebook

📄 สัญญาอนุญาตและเครดิต

Apache-2.0 พัฒนาโดย iApp Technology / OpenThaiGPT บน Qwen3.5-0.8B-Base (Apache-2.0) ได้แรงบันดาลใจจากโมเดล System One ของ TypeSafe AI (Jev) โดยเป็นการสร้างขึ้นใหม่แบบเปิดอย่างอิสระ ไม่มีส่วนเกี่ยวข้องกับ TypeSafe AI

🙏 ขอบคุณ Siam AI

Siam AI Corporation

การเทรนต่อด้วยข้อความไทย การ SFT และการประเมินผลทั้งหมดรันบน GPU NVIDIA H100 ที่ได้รับการสนับสนุนจาก บริษัท สยาม เอไอ คอร์เปอเรชั่น จำกัด ขอขอบคุณเป็นอย่างยิ่งที่ร่วมสนับสนุน AI ไทยแบบเปิดมาอย่างต่อเนื่อง