Jev คือโมเดลการตัดสินใจของ TypeSafe AI คุณส่งสถานะบางส่วนและชุดคำถามที่กำหนดประเภทให้ และมันจะตอบกลับด้วยค่าความน่าจะเป็นแทนการบรรยาย คู่มือนี้ครอบคลุมคีย์ API ของ Jev และคำขอแรกของคุณ สำหรับข้อมูลเบื้องหลังเกี่ยวกับ Jev คืออะไร และเหตุใดจึงส่งคืนตัวเลขแทนข้อความ โปรดอ่าน Jev คืออะไร ก่อน เพื่อความชัดเจน เนื่องจากผลการค้นหาอาจไม่เป็นระเบียบ: นี่คือ Jev โมเดล AI ของ TypeSafe ไม่ใช่ FaZe Jev ยูทูปเบอร์ และไม่ใช่วัคซีน JEV
คีย์ API ของ Jev ทำงานเหมือน Bearer Token อื่นๆ ดังนั้นหากคุณยังใหม่กับรูปแบบนี้ โปรดอ่าน API Key คืออะไร เพื่อทำความเข้าใจพื้นฐาน การเข้าถึง API โดยตรงยังอยู่ในช่วง Early Access ดังนั้นขั้นตอนแรกคือการออกจากรายการรอ หลังจากนั้น คุณจะสร้างคีย์ ทำความเข้าใจรูปแบบคำขอ เรียกใช้ปลายทางด้วย curl และ Python SDK อ่านฟิลด์ความน่าจะเป็น และเชื่อมโยงคำขอเข้ากับ Apidog พร้อมกับการยืนยันค่าความน่าจะเป็นเหล่านั้น หากคุณรอไม่ไหว โมเดลเดียวกันนี้มีให้บริการบน Vercel AI Gateway โดยไม่มีรายการรอ; คำถามที่พบบ่อยครอบคลุมเส้นทางนั้น
ขั้นตอนที่ 1: เข้าถึง Early Access แล้วสร้างคีย์
Jev ยังอยู่ในช่วง Early Access ณ เวลาที่เขียนนี้ โพสต์เปิดตัวของ TypeSafe ระบุว่ากำลัง "นำนักพัฒนาออกจากรายการรอให้เร็วที่สุดเท่าที่จะทำได้" ดังนั้นเข้าร่วมรายการรอที่ typesafe.ai และรอคำเชิญเข้าสู่คอนโซล; ยังไม่มีการลงทะเบียนด้วยตนเอง เมื่อบัญชีคอนโซลของคุณเปิดใช้งานแล้ว ให้ไปที่ console.typesafe.ai/settings/keys และสร้างคีย์ คัดลอกเพียงครั้งเดียวและถือว่าเป็นรหัสผ่าน
ส่งออกเป็นตัวแปรสภาพแวดล้อมแทนการวางลงในโค้ด:
export TYPESAFE_API_KEY="ts_..."
ตัวอย่าง curl อย่างเป็นทางการและ Python SDK ทั้งคู่จะอ่าน TYPESAFE_API_KEY จากสภาพแวดล้อม ดังนั้นตัวแปรเดียวจะครอบคลุมทุกตัวอย่างด้านล่าง หากคีย์เคยถูกบันทึกในการคอมมิต ให้หมุนเวียนคีย์ในคอนโซลและเรียกใช้ การตรวจสอบการรั่วไหลของ API key ทั่วทั้ง repository
ขั้นตอนที่ 2: ทำความเข้าใจรูปแบบคำขอ
การเรียกใช้ Jev ทุกครั้งคือการส่ง POST https://api.typesafe.ai/v1/systemone เพียงครั้งเดียวพร้อมกับสามฟิลด์ใน Body ซึ่งระบุไว้ใน เอกสารอ้างอิง TypeSafe API:
| ฟิลด์ | ประเภท | คืออะไร |
|---|---|---|
model |
string | jev-latest (ปัจจุบันคือ jev-1.13.0) หรือ jev-preview สำหรับรุ่นใหม่ล่าสุด |
state |
string, object, or array | เนื้อหาที่จะประเมิน: ตั๋ว, ระเบียน JSON, ประวัติข้อความ |
questions |
map of name to question | คำถามที่กำหนดประเภทที่ Jev ตอบตามสถานะ |
คำถามแต่ละข้อเป็นหนึ่งในสามประเภทพื้นฐานดังนี้:
| ประเภทพื้นฐาน | เกณฑ์คำขอ | ฟิลด์การตอบกลับ |
|---|---|---|
noul (ใช่/ไม่ใช่) |
ตัวเลือกเสริม {"true": "...", "false": "..."} |
noul: 0 (ไม่ใช่) ถึง 1 (ใช่) |
choice |
แผนที่ที่จำเป็นของตัวเลือกไปยังคำอธิบาย, สูงสุด 255 ตัวเลือก | choice, confidence, probabilities ต่อตัวเลือก |
score |
อาร์เรย์ที่เรียงลำดับที่จำเป็นของคำอธิบายระดับ 2 ถึง 10 | score, confidence, legend, probabilities ต่อระดับ |
การตอบกลับยังรวมถึง model และ usage.input_tokens / usage.output_tokens ด้วย คำถามที่มีประเภทต่างกันสามารถใช้สถานะเดียวกันและได้รับการตอบกลับในการส่งคำขอครั้งเดียว
ขั้นตอนที่ 3: ทำคำขอแรกด้วย curl
คำขอนี้จะเรียกใช้ประเภทพื้นฐานทั้งสามกับตั๋วสนับสนุนหนึ่งใบ:
curl https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "My card was charged twice for one order and nobody has replied in three days.",
"questions": {
"needs_review": {
"type": "noul",
"instructions": "Does this ticket need a human agent?",
"criteria": {
"true": "money, legal, or an unanswered complaint",
"false": "a routine question a bot can close"
}
},
"route": {
"type": "choice",
"instructions": "Route this ticket to a team.",
"criteria": {
"billing": "payment or charge problems",
"shipping": "delivery problems",
"technical": "application bugs"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this ticket?",
"criteria": ["low", "medium", "high"]
}
}
}'
การตอบกลับจะมีลักษณะดังนี้ (ค่าเป็นตัวอย่างเท่านั้น):
{
"model": "jev-1.13.0",
"answers": {
"needs_review": { "type": "noul", "noul": 0.97 },
"route": {
"type": "choice",
"choice": "billing",
"confidence": 0.98,
"probabilities": { "billing": 0.98, "shipping": 0.01, "technical": 0.01 }
},
"urgency": {
"type": "score",
"score": 1.6,
"confidence": 0.62,
"legend": { "0": "low", "1": "medium", "2": "high" },
"probabilities": { "0": 0.02, "1": 0.36, "2": 0.62 }
}
},
"usage": { "input_tokens": 190, "output_tokens": 0 }
}
ขั้นตอนที่ 4: อ่านฟิลด์ความน่าจะเป็น
อ่านตัวเลขให้แม่นยำ:
noulคือความน่าจะเป็นของ "ใช่" 0.97 หมายความว่า Jev มั่นใจ 97% ว่าตั๋วนี้ต้องใช้มนุษย์choiceคือตัวเลือกที่มีความน่าจะเป็นสูงสุด,probabilitiesแสดงรายการตัวเลือกทั้งหมด, และconfidenceบอกคุณว่าการเลือกนั้นเด็ดขาดแค่ไหน เส้นทาง 0.98 ปลอดภัยที่จะดำเนินการโดยอัตโนมัติ; เส้นทาง 0.51 ที่มี 0.47 สำหรับตัวเลือกอันดับรองลงมาคือการตัดสินใจแบบครึ่งๆ กลางๆscoreคือตำแหน่งที่ถ่วงน้ำหนักด้วยความน่าจะเป็นในระดับที่จัดเรียงไว้ ดังนั้น 1.6 จึงอยู่ระหว่าง "ปานกลาง" (1) และ "สูง" (2)legendจะแมปแต่ละดัชนีกลับไปยังป้ายกำกับ และprobabilitiesแสดงการกระจายตัวทั้งหมด
เนื่องจากผลลัพธ์เป็นการกระจายตัว ไม่ใช่ป้ายกำกับ คุณจึงต้องกำหนดเกณฑ์เอง ไม่ใช่โมเดล นั่นเป็นเหตุผลที่การยืนยันในขั้นตอนที่ 6 ทดสอบตัวเลข
ขั้นตอนที่ 5: การเรียกใช้แบบเดียวกันด้วย Python SDK
ติดตั้ง SDK; client จะดึง TYPESAFE_API_KEY จากสภาพแวดล้อม:
pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
with TypeSafeClient() as client:
response = client.system_one(
state="My card was charged twice for one order and nobody has replied in three days.",
questions={
"needs_review": Noul(
instructions="Does this ticket need a human agent?",
criteria={"true": "money, legal, or an unanswered complaint",
"false": "a routine question a bot can close"},
),
"route": Choice(
instructions="Route this ticket to a team.",
criteria={"billing": "payment or charge problems",
"shipping": "delivery problems",
"technical": "application bugs"},
),
"urgency": Score(
instructions="How urgent is this ticket?",
criteria=["low", "medium", "high"],
),
},
)
print(response.nouls["needs_review"].noul)
print(response.choices["route"].choice, response.choices["route"].probabilities)
print(response.scores["urgency"].score)
คำตอบจะถูกจัดกลุ่มตามประเภทบนวัตถุการตอบกลับ (nouls, choices, scores) มี JavaScript SDK ที่มีรูปแบบเดียวกัน และหากคุณใช้งาน Vercel AI Gateway อยู่แล้ว experimental_evaluate จาก AI SDK 7 จะเรียกโมเดลเป็น typesafe-ai/jev โดยมีความแตกต่างกันหนึ่งประการคือ ประเภทคำถามแบบบูลีนจะคืนค่าฟิลด์ probability แทน noul
ขั้นตอนที่ 6: จัดเก็บและทดสอบ Jev API key ใน Apidog
Curl พิสูจน์ว่าคีย์ใช้งานได้เพียงครั้งเดียว Apidog ทำให้คำขอสามารถรันซ้ำได้ ยืนยันได้ และจำลองได้สำหรับทั้งทีม
จัดเก็บคีย์เป็นตัวแปรลับ สร้างสภาพแวดล้อมที่ชื่อว่า TypeSafe และเพิ่ม TYPESAFE_API_KEY เป็นความลับ เพื่อให้ค่าของมันถูกซ่อนไว้ใน UI และไม่ถูกส่งออก; สภาพแวดล้อมและตัวแปรลับของ Apidog จะอธิบายขั้นตอนการตั้งค่า ตั้งค่าการตรวจสอบสิทธิ์ในคำขอเป็น Bearer Token โดยใช้ {{TYPESAFE_API_KEY}} เป็นค่า
สร้างคำขอ POST เพิ่มคำขอ POST ไปยัง https://api.typesafe.ai/v1/systemone วาง JSON body จากขั้นตอนที่ 3 แล้วส่ง แผงการตอบกลับจะแสดงผลลัพธ์เป็นโครงสร้างคำตอบ ดังนั้นคุณสามารถตรวจสอบค่าความน่าจะเป็นก่อนที่จะเขียนคำยืนยัน
ยืนยันจากค่าความน่าจะเป็น ไม่ใช่การบรรยาย ในตัวสร้างการยืนยันแบบภาพ ให้ชี้ JSONPath expressions ไปยังฟิลด์ที่คุณสนใจ:
$.answers.needs_review.noulมากกว่า0.9$.answers.route.choiceเท่ากับbilling$.answers.route.probabilities.billingมากกว่า0.8$.answers.urgency.scoreมากกว่าหรือเท่ากับ1$.usage.input_tokensน้อยกว่า1000
หากคุณต้องการสคริปต์ ตัวประมวลผลภายหลังจะยอมรับ API pm ที่คุ้นเคย:
const body = pm.response.json();
pm.test("ticket flagged for a human", () => {
pm.expect(body.answers.needs_review.noul).to.be.above(0.9);
});
pm.test("routed to billing", () => {
pm.expect(body.answers.route.choice).to.eql("billing");
});
บันทึกเป็นสถานการณ์ทดสอบ ใส่คำขอลงในสถานการณ์ทดสอบพร้อมกับ CSV ขนาดเล็กของตั๋วและเส้นทางที่คาดหวัง และรันทุกครั้งที่มีการเปลี่ยนแปลงคำแนะนำหรือเกณฑ์ของคุณ การแก้ไข Prompt คือการเปลี่ยนแปลงโค้ด; สถานการณ์ 10 แถวจะตรวจจับการแก้ไขที่เปลี่ยนแปลงค่า 0.95 เป็น 0.6 โดยไม่มีใครสังเกตเห็น สถานการณ์เดียวกันนี้สามารถทำงานใน CI ผ่าน Apidog CLI ดังนั้นการถดถอยจะบล็อกการรวม
จำลองรูปแบบการตอบกลับที่ประกาศไว้ กำหนดสคีมาการตอบกลับบนปลายทาง (วัตถุคำตอบทั้งสามบวกกับ usage) และฟังก์ชัน Smart Mock ของ Apidog จะให้บริการค่าความน่าจะเป็นปลอมที่สมจริงทันที ส่วนหน้าสามารถสร้างป้าย "ต้องการการตรวจสอบ" และ UI การกำหนดเส้นทางโดยใช้ mock ก่อนที่ส่วนหลังจะพร้อมใช้งาน จากนั้นจึงเปลี่ยน URL ของ mock เป็นปลายทางจริงด้วยการเปลี่ยนแปลงสภาพแวดล้อมเพียงครั้งเดียว
สำหรับการวางแผนจำนวนที่นั่ง: แผน Free ของ Apidog รวมถึงผู้ใช้ 4 คน และแพ็กเกจแบบชำระเงินจะคิดตามจำนวนที่นั่ง
เกณฑ์ในโค้ด
เมื่อการยืนยันผ่าน ตัวเลขเดียวกันนี้จะขับเคลื่อนตรรกะการผลิต เก็บเกณฑ์ไว้ในที่เดียวและตั้งชื่อให้ชัดเจน:
REVIEW_THRESHOLD = 0.9
AUTO_ROUTE_CONFIDENCE = 0.85
needs_review = response.nouls["needs_review"].noul >= REVIEW_THRESHOLD
route = response.choices["route"]
if route.confidence >= AUTO_ROUTE_CONFIDENCE and not needs_review:
assign(ticket, team=route.choice)
else:
queue_for_human(ticket, suggested=route.choice)
บันทึกแผนที่ probabilities ฉบับเต็มพร้อมกับการตัดสินใจแต่ละครั้ง เพื่อให้คุณสามารถปรับแต่งเกณฑ์จากข้อมูลจริงในภายหลัง และกำหนดให้การตรวจสอบโดยมนุษย์เป็นค่าเริ่มต้นเมื่อความมั่นใจต่ำ; โมเดลกำลังบอกคุณว่ามันไม่แน่ใจ
ข้อจำกัด, ราคา และโมเดล
จาก หน้าโมเดล TypeSafe โดยตรง:
| รายการ | ค่า |
|---|---|
| ราคา | $0.042 ต่อโทเค็นอินพุตหนึ่งล้านโทเค็น; โทเค็นเอาต์พุตไม่มีค่าใช้จ่าย |
| ขีดจำกัดอัตรา | 250,000 โทเค็นต่อวินาที และ 1,200 คำขอต่อนาที, ปรับเปลี่ยนแบบไดนามิกภายใต้โหลด |
| บริบท | 64k โทเค็นต่อคำขอ; 32k สำหรับสถานะบวกกับคำถามเดียวที่ยาวที่สุด |
| อินพุต | เฉพาะข้อความ: สตริง, ออบเจกต์ JSON, หรืออาร์เรย์ ไม่มีรูปภาพ, เสียง, หรือวิดีโอ |
| ภาษา | ภาษาอังกฤษให้ความแม่นยำสูงสุด; ภาษาอื่น ๆ ใช้งานได้แต่ไม่ดีเท่ากัน |
| ชื่อแทน | jev-latest คือค่าเริ่มต้นที่เสถียร; jev-preview ติดตามการเปิดตัวล่าสุด |
ด้วยราคาดังกล่าว ตั๋วสั้นๆ หนึ่งล้านใบมีค่าใช้จ่ายไม่ถึง 10 ดอลลาร์ TypeSafe ยังระบุด้วยว่า Jev ไม่ได้ถูกฝึกฝนด้วยคำขอหรือการตอบกลับของลูกค้า
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
| สถานะ | ความหมาย | วิธีแก้ไข |
|---|---|---|
| 401 Unauthorized | คีย์ API หายไปหรือไม่ถูกต้อง | ตรวจสอบเฮดเดอร์ Authorization: Bearer และตรวจสอบว่าตัวแปรสภาพแวดล้อมถูกตั้งค่าในเชลล์หรือสภาพแวดล้อมที่คุณกำลังรันอยู่ |
| 422 Unprocessable Entity | Request body ไม่ผ่านการตรวจสอบ | สาเหตุทั่วไป: choice ไม่มี criteria, score มีระดับน้อยกว่า 2 ระดับ, type สะกดผิด, หรือ questions ถูกส่งเป็นอาร์เรย์แทนที่จะเป็นแผนที่ |
| 429 Too Many Requests | เกินขีดจำกัดอัตรา | ชะลอการส่งคำขอด้วย jitter แล้วลองใหม่; รวมหลายคำถามเข้าเป็นคำขอเดียวเพื่อลดจำนวนคำขอ |
| 529 Overloaded | TypeSafe มีการโหลดเกินชั่วคราว | ลองใหม่ด้วย exponential backoff; คำขอปลอดภัยที่จะทำซ้ำ |
422 เป็นข้อผิดพลาดที่คุณจะพบบ่อยที่สุดในขณะที่พัฒนา; สคีมาปลายทางจากขั้นตอนที่ 6 จะดักจับส่วนใหญ่ก่อนที่คำขอจะออกจากเครื่องของคุณ
คำถามที่พบบ่อย (FAQ)
มี Free Tier สำหรับ Jev API หรือไม่? เอกสารสาธารณะระบุราคาต่อโทเค็นและไม่ได้อธิบายถึง Free Tier หรือเครดิตเริ่มต้น และขณะนี้การเข้าถึงยังอยู่ในรายการรอ ตรวจสอบคอนโซลเมื่อคุณได้รับคำเชิญเพื่อดูข้อเสนอปัจจุบัน และถือว่าตัวเลขใดๆ ที่คุณเห็นที่อื่นเป็นข้อมูลที่ไม่เป็นทางการ
ฉันสามารถรับหลายคำตอบจากการส่งคำขอเดียวได้หรือไม่? ได้ questions เป็นแผนที่ ดังนั้น noul, choice และ score ทั้งหมดสามารถทำงานกับสถานะเดียวในการเรียกใช้ครั้งเดียว ซึ่งถูกกว่าการส่งคำขอสามครั้งและทำให้คำตอบสอดคล้องกันเนื่องจากใช้ข้อมูลอินพุตเดียวกัน
สิ่งนี้แตกต่างจาก structured outputs บนโมเดลแชทอย่างไร? Structured outputs บังคับให้โมเดลภาษาปล่อย JSON ที่ถูกต้อง แต่ค่าภายในยังคงเป็นโทเค็นที่สร้างขึ้น และฟิลด์ "confidence" เป็นข้อความที่โมเดลเขียนเกี่ยวกับตัวเอง Jev คืนค่าความน่าจะเป็นที่วัดได้เป็นเอาต์พุตดั้งเดิม ซึ่งเป็นเหตุผลที่คุณสามารถยืนยัน noul > 0.9 และเชื่อถือการเปรียบเทียบได้
ฉันจำเป็นต้องใช้ TypeSafe SDK หากฉันอยู่บน Vercel หรือไม่? ไม่ Vercel AI SDK เปิดเผย Jev ผ่าน experimental_evaluate โดยใช้ typesafe-ai/jev เป็น ID โมเดล คุณจะตรวจสอบสิทธิ์ด้วยคีย์ AI Gateway ของคุณแทนคีย์ TypeSafe และคำตอบแบบบูลีนจะถูกส่งกลับมาเป็น probability
ขั้นตอนต่อไป
ตอนนี้คุณมีคีย์ API ของ Jev, คำขอที่ใช้งานได้ใน curl และ Python, และความเข้าใจที่ชัดเจนเกี่ยวกับ noul, choice, และ score แล้ว ใส่คำขอลงใน Apidog เพิ่มการยืนยันความน่าจะเป็น และบันทึกสถานการณ์ทดสอบเพื่อให้การแก้ไข prompt ได้รับการทดสอบเหมือนโค้ด ดาวน์โหลด Apidog เพื่อติดตาม
