Jev — โมเดลสำหรับการตัดสินใจ
MarkdownJev โมเดลสำหรับการตัดสินใจจาก TypeSafe ตอบคำถามเกี่ยวกับข้อความหรือ JSON ด้วยผลลัพธ์ที่ระบุชนิด: เลือกตัวเลือก ให้คะแนนตามสเกล หรือ “ใช่/ไม่ใช่” พร้อมค่าความน่าจะเป็น ไม่ใช่แชตหรือการสร้างข้อความ
คู่มือฉบับเต็ม
https://api.ailoot.ai/v1/systemonecurl https://api.ailoot.ai/v1/systemone \
-H "Authorization: Bearer $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "ช่วยด้วย! การจ่ายเงินให้ฉันไม่สำเร็จมา 3 วันแล้ว",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "ข้อความนี้สื่อถึงความเร่งด่วนหรือไม่?"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "ช่วยด้วย! การจ่ายเงินให้ฉันไม่สำเร็จมา 3 วันแล้ว",
"questions": {
"is_urgent": {"type": "noul", "instructions": "ข้อความนี้สื่อถึงความเร่งด่วนหรือไม่?"},
},
}
req = urllib.request.Request(
"https://api.ailoot.ai/v1/systemone",
data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + os.environ["AILOOT_API_KEY"],
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as resp:
result = json.load(resp)
print(result["answers"]["is_urgent"]["noul"]) # 0.95const resp = await fetch("https://api.ailoot.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AILOOT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: "ช่วยด้วย! การจ่ายเงินให้ฉันไม่สำเร็จมา 3 วันแล้ว",
questions: {
is_urgent: { type: "noul", instructions: "ข้อความนี้สื่อถึงความเร่งด่วนหรือไม่?" },
},
}),
});
const result = await resp.json();
if (!resp.ok) throw new Error(`${resp.status} ${JSON.stringify(result)}`);
console.log(result.answers.is_urgent.noul); // 0.95{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}Jev เป็นโมเดลสำหรับการตัดสินใจระดับ System One จาก TypeSafe โมเดลไม่เขียนข้อความหรือสนทนา: คุณส่ง สถานะ (state) — ข้อความหรือ JSON — พร้อมชุด คำถาม, แล้วรับค่าที่ระบุชนิดพร้อมความน่าจะเป็น โค้ดจึงใช้ผลลัพธ์แยกเงื่อนไข จัดเรียง และกำหนดเส้นทางได้ทันที โดยไม่ต้องแยกวิเคราะห์ข้อความอิสระ
ทุกคำถามในคำขอเดียวกันจะได้รับการประเมินพร้อมกันและเป็นอิสระจากกัน โดยเทียบกับ stateเดียวกัน ตามข้อมูลของ TypeSafe การเพิ่มคำถามแทบไม่เปลี่ยนเวลาตอบ และคำถามไม่รบกวนกัน
| หัวข้อ | สรุป |
|---|---|
| โมเดล | jev-latest — นามแฝงของ Jev เวอร์ชันเสถียรล่าสุด; รายละเอียดในแค็ตตาล็อก |
| เมธอด | POST /v1/systemone. ไม่ใช่แชต: รูปแบบ OpenAI, Anthropic และ Gemini ใช้กับ Jev ไม่ได้ คำตอบจะส่งมาครบใน JSON เดียว |
| อินพุตที่รับ | เฉพาะข้อความ: สตริง ออบเจ็กต์ JSON หรืออาร์เรย์ของข้อความ ให้แปลงภาพ เสียง และวิดีโอเป็นข้อความก่อน |
| บริบท | 64K โทเค็นต่อคำขอ — รวม state และคำถามทั้งหมด; state รวมกับคำถามที่ยาวที่สุด — สูงสุด 32K |
| ภาษา | ตามข้อมูลของ TypeSafe โมเดลให้ความแม่นยำสูงสุดกับภาษาอังกฤษ โดยรับภาษาอื่นได้แต่ความแม่นยำต่ำกว่า จึงควรทดสอบด้วยข้อมูลของคุณเอง |
| ราคา | อินพุต $0.084 ต่อ 1 ล้านโทเค็น ไม่คิดค่าบริการขาออก |
คำขอ
การยืนยันสิทธิ์
- Authorizationheaderจำเป็น
คีย์ Ailoot ในรูปแบบ
Bearer sk-….
เนื้อหาคำขอ
- modelstringจำเป็น
jev-latest. - statestring | object | arrayจำเป็น
สิ่งที่ต้องการประเมิน: สตริงข้อความหรือ JSON — คำร้องของลูกค้า ระเบียนจากฐานข้อมูล บทสนทนา หรือสถานะปัจจุบันของแอปพลิเคชัน ออบเจ็กต์ที่ใช้ชื่อฟิลด์ชัดเจนมักสะดวกกว่าสตริงเดียว
- questionsobjectจำเป็น
คำถาม คุณกำหนดคีย์เองและจะได้รับคำตอบภายใต้คีย์เดิม คีย์ไม่มีผลต่อคำตอบ — ตัวคำถามระบุใน
instructions. - questions.*.typestringจำเป็น
noul,choiceหรือscore— ดูด้านล่าง - questions.*.instructionsstring | object | arrayจำเป็น
ตัวคำถาม หากคำถามยาวและมีข้อมูล สามารถส่งเป็นออบเจ็กต์ได้: ใส่คำถามในฟิลด์หนึ่งและข้อมูลในฟิลด์อื่น โดยอ้างถึงชื่อฟิลด์ด้วยเครื่องหมาย backtick
- questions.*.criteriaobject | array
ตัวเลือกคำตอบ ซึ่งต่างกันตามแต่ละชนิด: คำอธิบาย “ใช่” และ “ไม่ใช่” สำหรับ noul (ไม่จำเป็น), พจนานุกรมตัวเลือกสำหรับ choice และรายการระดับที่เรียงลำดับสำหรับ score
ชนิดคำถาม
| ชนิด | ถามอะไร | ส่งกลับอะไร |
|---|---|---|
noul | ข้อความที่ระบุเป็นจริงหรือไม่: ใช่หรือไม่ใช่ | noul — ความน่าจะเป็นของ “ใช่” ตั้งแต่ 0 ถึง 1 |
choice | ตัวเลือกใดในชุดที่ระบุเหมาะสม | choice, probabilities, confidence |
score | state อยู่ตรงไหนในสเกลระดับของคุณ | score, legend, probabilities, confidence |
ใช้คำถามหลายชนิดร่วมกันในคำขอเดียวได้
noul — ใช่หรือไม่ใช่
ฟิลด์ criteria ไม่จำเป็น: สามารถใช้อธิบายว่า “ใช่” (true) และ “ไม่ใช่” (false) หมายถึงอะไร คำตอบ noul — ตัวเลขตั้งแต่ 0 (ไม่ใช่) ถึง 1 (ใช่)
"is_urgent": {
"type": "noul",
"instructions": "ข้อความนี้สื่อถึงความเร่งด่วนหรือไม่?",
"criteria": {
"true": "ระบุชัดเจนว่าต้องดำเนินการให้ทันเวลา",
"false": "ไม่ได้แสดงความเร่งด่วน"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — เลือกตัวเลือก
criteria — พจนานุกรม “ตัวเลือก → คำอธิบาย”; หากไม่ต้องการคำอธิบาย ให้ระบุ null. สูงสุด 255 ตัวเลือก ในคำตอบ choice — ตัวเลือกที่มีความน่าจะเป็นสูงสุด, probabilities — ความน่าจะเป็นของแต่ละตัวเลือก (รวมกันเป็น 1), confidence — ความมั่นใจตั้งแต่ 0 ถึง 1
"department": {
"type": "choice",
"instructions": "ทีมใดควรดูแลเรื่องนี้?",
"criteria": {
"billing": "การชำระเงิน การออกใบแจ้งหนี้ การคืนเงิน",
"technical": "บั๊ก ระบบขัดข้อง การเชื่อมต่อระบบ",
"sales": "ราคา การอัปเกรด ลูกค้าใหม่"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — ให้คะแนนตามสเกล
criteria — ระดับเรียงจากต่ำไปสูง ไม่เกิน 10 ระดับ (TypeSafe แนะนำอย่างน้อยสองระดับ) ในคำตอบ score — ค่าที่ถ่วงน้ำหนักตามความน่าจะเป็นของแต่ละระดับ (อาจอยู่ระหว่างระดับ), legend — หมายเลขระดับและคำอธิบายระดับนั้น, probabilities และ confidence. ตามข้อมูลของ TypeSafe, score เหมาะสำหรับเทียบกับเกณฑ์ แต่ไม่เหมาะใช้เป็นตัวเลขที่แม่นยำระหว่างระดับ
"frustration": {
"type": "score",
"instructions": "ลูกค้ารู้สึกหงุดหงิดมากแค่ไหน?",
"criteria": ["สงบ", "หงุดหงิด", "โกรธมาก"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "สงบ", "1": "หงุดหงิด", "2": "โกรธมาก" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}คำตอบ
- modelstring
เวอร์ชันของโมเดลที่ตอบ นามแฝง jev-latest จะเปลี่ยนไปใช้เวอร์ชันใหม่เมื่อเวลาผ่านไป หากคุณตั้งเกณฑ์
confidenceสำหรับเวอร์ชันใดไว้ ให้ตรวจสอบฟิลด์นี้ - answersobject
คำตอบหนึ่งรายการต่อคำถาม ภายใต้คีย์เดิม แต่ละคำตอบมี
type, สำหรับ choice และ score ยังมีconfidence. - usageobject
input_tokensและoutput_tokens. คิดค่าบริการเฉพาะโทเคนขาเข้าเท่านั้น
หลายคำถามในคำขอเดียว
ส่งคำถามทั้งหมดเกี่ยวกับ state เดียวกันในคำขอเดียว: ระบบประเมินคำถามพร้อมกัน และส่ง state เพียงครั้งเดียว ตามข้อมูลของ TypeSafe ในตัวอย่างที่มี 13 คำถาม การส่งรวมเป็นคำขอเดียวถูกกว่า 12,2 เท่าและเร็วกว่า 10 เท่าเมื่อเทียบกับการส่ง 13 คำขอแยกกันตามลำดับ โดยได้คำตอบเหมือนกัน
ควรแยกการตัดสินที่ซับซ้อนออกเป็นคำถามง่าย ๆ แล้วรวมคำตอบในโค้ด เช่น แทนที่จะถามว่า “ประเมินใบสมัคร” ให้ประเมินตลาด ความเป็นไปได้ และจุดต่างจากคู่แข่งแยกกัน จากนั้นปรับน้ำหนักในโค้ด แทนการปรับข้อความคำถาม
{
"model": "jev-latest",
"state": "ช่วยด้วย! การจ่ายเงินให้ฉันไม่สำเร็จมา 3 วันแล้ว",
"questions": {
"department": {
"type": "choice",
"instructions": "ทีมใดควรดูแลเรื่องนี้?",
"criteria": {
"billing": "การชำระเงิน การออกใบแจ้งหนี้ การคืนเงิน",
"technical": "บั๊ก ระบบขัดข้อง การเชื่อมต่อระบบ",
"sales": "ราคา การอัปเกรด ลูกค้าใหม่"
}
},
"frustration": {
"type": "score",
"instructions": "ลูกค้ารู้สึกหงุดหงิดมากแค่ไหน?",
"criteria": ["สงบ", "หงุดหงิด", "โกรธมาก"]
},
"is_urgent": {
"type": "noul",
"instructions": "ข้อความนี้สื่อถึงความเร่งด่วนหรือไม่?"
}
}
}กรณีที่เหมาะสม
- การกำหนดเส้นทาง ส่งเรื่องไปยังแผนกที่เหมาะสม และส่งคำขอไปยังตัวประมวลผลที่เหมาะสม ไม่ว่าจะเป็นโค้ดง่าย ๆ โมเดลขนาดใหญ่ หรือคน
- การจัดหมวดหมู่และลำดับความสำคัญ ประเมินความเร่งด่วน อารมณ์ของข้อความ และความเสี่ยงตามมาตราส่วน โดยกำหนดเกณฑ์ตัดสินในโค้ด
- การกลั่นกรองเนื้อหาและการตรวจสอบ ตรวจสอบว่าข้อความละเมิดกฎหรือไม่ แหล่งข้อมูลรองรับข้อความอ้างอิงหรือไม่ หรือเอกสารมีคำตอบสำหรับคำถามหรือไม่ ก่อนส่งข้อความไปยังขั้นตอนถัดไป
- การให้คะแนนและจัดอันดับ ประเมินเอกสาร ผู้สมัคร หรือข้อความที่ค้นพบตามเกณฑ์ของคุณ แล้วตัดสินใจในโค้ดว่าจะส่งอะไรไปยังขั้นตอนถัดไป
- ใช้แทนคำสั่ง “ส่งกลับเป็น JSON” ที่เปราะบาง การเรียกที่รับประกันว่าจะส่งกลับค่าแบบมีชนิดข้อมูลตั้งแต่ต้น แทนข้อความที่ต้องนำมาแยกวิเคราะห์เอง
กรณีที่ไม่เหมาะสม
- แชต การตอบผู้ใช้ และการสร้างข้อความหรือโค้ด Jev ไม่ได้สร้างข้อความ หากต้องการสร้างข้อความ ให้ใช้ โมเดลข้อความ.
- ใช้เป็นโมเดลสำหรับ Claude Code, Cursor และเอเจนต์อื่น ๆ ไม่สามารถใช้ jev-latest แทนโมเดลของเอเจนต์ได้ เพราะเอเจนต์ต้องการโมเดลที่สร้างข้อความและเรียกใช้เครื่องมือได้ แต่สามารถเรียก Jev จากโค้ดที่เอเจนต์เขียนให้คุณได้
- เลขคณิต การนับ และการเปรียบเทียบวันที่ ตามข้อมูลของ TypeSafe งานเหล่านี้ทำในโค้ดได้อย่างเชื่อถือได้มากกว่า และควรถามโมเดลเฉพาะส่วนที่ต้องตีความ เช่น ใช้ choice ดึงส่วนต่าง ๆ ของวันที่
- รูปภาพ เสียง และวิดีโอ โมเดลรับเฉพาะข้อความ จึงต้องแปลงข้อมูลเหล่านี้เป็นข้อความไว้ก่อน
ราคา
คิดค่าบริการเฉพาะโทเคนขาเข้า — ฟิลด์ usage.input_tokens ในคำตอบ: $0.084 ต่อ 1 ล้าน. โทเคนขาออกไม่มีค่าใช้จ่าย
คำขอในตัวอย่างบนหน้านี้ (296 โทเคนขาเข้า) มีค่าใช้จ่ายน้อยกว่า $0.0001
ก่อนส่งคำขอ Ailoot จะกันเงินจากยอดคงเหลือไว้ และหลังได้รับคำตอบจะหักเงินเพียงครั้งเดียวตามการใช้งานจริง — วิธีการทำงาน.
ขีดจำกัด
| หัวข้อ | ขีดจำกัด |
|---|---|
| คำขอทั้งหมด: state และคำถามทั้งหมด | 64K โทเคน |
| state รวมกับคำถามที่ยาวที่สุด | 32K โทเคน |
| จำนวนตัวเลือกใน choice เดียว | ไม่เกิน 255 |
| จำนวนระดับใน score เดียว | ตั้งแต่ 2 ถึง 10 |
| อินพุต | ข้อความเท่านั้น: สตริง ออบเจ็กต์ JSON หรืออาร์เรย์ของข้อความ |
ขีดจำกัดของโมเดลอ้างอิงข้อมูลจาก TypeSafe ข้อจำกัดของคีย์และยอดคงเหลือของคุณมีผลเช่นเดียวกับโมเดลอื่น ๆ ใน Ailoot: ข้อผิดพลาดและขีดจำกัด.
ข้อผิดพลาด
ข้อผิดพลาดส่งกลับในรูปแบบมาตรฐานของ Ailoot API: รหัส ข้อความที่เข้าใจได้ และ Request ID ข้อผิดพลาดที่พบบ่อยสำหรับเมธอดนี้ ได้แก่:
| รหัส | เมื่อใด | สิ่งที่ต้องทำ |
|---|---|---|
400 invalid_request | เนื้อหาคำขอไม่ผ่านการตรวจสอบ: ไม่มี state, model หรือ questions, มี type ที่ไม่รู้จัก, choice มีตัวเลือกมากกว่า 255 หรือ score มีมากกว่า 10 ระดับ | แก้ไขคำขอตามข้อความข้อผิดพลาด หากไม่แก้ไข คำขอจะไม่ผ่านการตรวจสอบอีก |
400 context_length_exceeded | state และคำถามรวมกันยาวเกินขีดจำกัดของโมเดล | กรอง state ในโค้ดให้เหลือเฉพาะข้อมูลที่จำเป็นสำหรับคำถาม |
401 invalid_api_key | ไม่มีคีย์หรือคีย์ไม่ถูกต้อง | ส่งคีย์ในเฮดเดอร์ Authorization |
402 insufficient_balance | ยอดคงเหลือที่ใช้ได้ไม่เพียงพอสำหรับกันเงิน | เติมเงินเข้ายอดคงเหลือ |
404 model_not_found, unsupported_endpoint | ID ไม่ถูกต้อง หรือเรียกโมเดลด้วยเมธอดที่ไม่ตรง เช่น ผ่าน /v1/chat/completions | เรียก jev-latest ผ่าน POST /v1/systemone เท่านั้น |
429 rate_limit_exceeded | มีคำขอมากเกินไป | รอตามจำนวนวินาทีที่ระบุในเฮดเดอร์ Retry-After แล้วลองใหม่ |
503 model_overloaded, model_unavailable | โมเดลมีภาระงานสูงเกินไปหรือไม่พร้อมใช้งานชั่วคราว | หาก X-Should-Retry: true ให้ลองใหม่หลังจากผ่านไปตามจำนวนวินาทีใน Retry-After หากเป็น false ให้ตรวจสอบ Request ID ในประวัติก่อน |
504 model_timeout | โมเดลไม่ตอบกลับภายในเวลาที่กำหนด | อย่าส่งคำขอซ้ำจนกว่าจะตรวจสอบ Request ID ในประวัติแล้ว |
ดูรายการรหัสทั้งหมดได้ที่หน้า ข้อผิดพลาดและขีดจำกัด.