Jev — mô hình ra quyết định
MarkdownMô hình ra quyết định Jev của TypeSafe trả lời các câu hỏi có kiểu dữ liệu về văn bản hoặc JSON: chọn phương án, chấm điểm theo thang hoặc “có/không” kèm xác suất. Đây không phải mô hình trò chuyện hay tạo văn bản.
Hướng dẫn đầy đủ
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": "Cứu với! Các khoản chi trả của tôi đã thất bại suốt 3 ngày.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Nội dung này có thể hiện tính khẩn cấp không?"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "Cứu với! Các khoản chi trả của tôi đã thất bại suốt 3 ngày.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Nội dung này có thể hiện tính khẩn cấp không?"},
},
}
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: "Cứu với! Các khoản chi trả của tôi đã thất bại suốt 3 ngày.",
questions: {
is_urgent: { type: "noul", instructions: "Nội dung này có thể hiện tính khẩn cấp không?" },
},
}),
});
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 là mô hình ra quyết định thuộc lớp System One của TypeSafe. Mô hình không viết văn bản và không hội thoại: bạn truyền trạng thái (state) — văn bản hoặc JSON — cùng một tập câu hỏi, rồi nhận về các giá trị có kiểu dữ liệu kèm xác suất. Dựa vào đó, mã có thể phân nhánh, sắp xếp và định tuyến ngay mà không cần phân tích văn bản tự do.
Mọi câu hỏi trong cùng một yêu cầu được đánh giá song song, độc lập với nhau, trên cùng một state. Theo TypeSafe, thêm câu hỏi gần như không làm thay đổi thời gian phản hồi và các câu hỏi không ảnh hưởng lẫn nhau.
| Mục | Tóm tắt |
|---|---|
| Mô hình | jev-latest — bí danh của phiên bản Jev ổn định mới nhất; thẻ trong danh mục |
| Phương thức | POST /v1/systemone. Đây không phải mô hình trò chuyện: các định dạng OpenAI, Anthropic và Gemini không phù hợp với Jev. Phản hồi được gửi toàn bộ dưới dạng một JSON |
| Đầu vào được chấp nhận | Chỉ văn bản: chuỗi, đối tượng JSON hoặc mảng văn bản. Hãy chuyển ảnh, âm thanh và video thành văn bản trước |
| Ngữ cảnh | 64K token cho một yêu cầu — state và tất cả câu hỏi cộng lại; state cùng câu hỏi dài nhất — tối đa 32K |
| Ngôn ngữ | Theo TypeSafe, mô hình chính xác nhất khi dùng tiếng Anh; mô hình chấp nhận ngôn ngữ khác nhưng độ chính xác thấp hơn — hãy kiểm tra trên dữ liệu của bạn |
| Giá | Đầu vào $0.084 cho 1 triệu token, đầu ra miễn phí |
Yêu cầu
Xác thực
- Authorizationheaderbắt buộc
Khóa Ailoot có dạng
Bearer sk-….
Phần thân yêu cầu
- modelstringbắt buộc
jev-latest. - statestring | object | arraybắt buộc
Nội dung cần đánh giá: chuỗi văn bản hoặc JSON — yêu cầu của khách hàng, bản ghi cơ sở dữ liệu, trao đổi tin nhắn hoặc trạng thái hiện tại của ứng dụng. Đối tượng có tên trường rõ ràng thường thuận tiện hơn một chuỗi.
- questionsobjectbắt buộc
Các câu hỏi. Bạn tự chọn khóa; phản hồi được trả về dưới cùng các khóa đó. Khóa không ảnh hưởng đến câu trả lời — bản thân câu hỏi được đặt trong
instructions. - questions.*.typestringbắt buộc
noul,choicehoặcscore— xem bên dưới. - questions.*.instructionsstring | object | arraybắt buộc
Bản thân câu hỏi. Câu hỏi dài kèm dữ liệu có thể được truyền dưới dạng đối tượng: câu hỏi trong một trường, dữ liệu trong các trường khác; tham chiếu đến trường bằng tên đặt trong dấu backtick.
- questions.*.criteriaobject | array
Các phương án trả lời, khác nhau theo từng kiểu: mô tả “có” và “không” với noul (không bắt buộc), từ điển phương án với choice, danh sách mức độ có thứ tự với score.
Các kiểu câu hỏi
| Kiểu | Câu hỏi đặt ra | Giá trị trả về |
|---|---|---|
noul | Khẳng định có đúng không: có hoặc không | noul — xác suất “có” từ 0 đến 1 |
choice | Phương án nào trong số các phương án đã cho phù hợp | choice, probabilities, confidence |
score | Vị trí của state trên thang mức độ của bạn | score, legend, probabilities, confidence |
Có thể kết hợp các kiểu trong cùng một yêu cầu.
noul — có hoặc không
Trường criteria không bắt buộc: trong trường này, có thể mô tả ý nghĩa của “có” (true) và “không” (false). Phản hồi noul — số từ 0 (không) đến 1 (có).
"is_urgent": {
"type": "noul",
"instructions": "Nội dung này có thể hiện tính khẩn cấp không?",
"criteria": {
"true": "Nêu rõ tính cấp bách về thời gian",
"false": "Không thể hiện tính khẩn cấp"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — chọn phương án
criteria — từ điển “phương án → mô tả”; nếu không cần mô tả, hãy đặt null. Tối đa 255 phương án. Trong phản hồi, choice — phương án có xác suất cao nhất, probabilities — xác suất của từng phương án (tổng bằng 1), confidence — độ tin cậy từ 0 đến 1.
"department": {
"type": "choice",
"instructions": "Nhóm nào nên xử lý việc này?",
"criteria": {
"billing": "Thanh toán, lập hóa đơn, hoàn tiền",
"technical": "Lỗi, gián đoạn dịch vụ, tích hợp",
"sales": "Giá, nâng cấp, khách hàng mới"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — chấm điểm theo thang
criteria — các mức từ thấp đến cao, không quá 10 (TypeSafe khuyên ít nhất hai mức). Trong phản hồi, score — giá trị được tính trọng số theo xác suất của các mức (có thể nằm giữa các mức), legend — số thứ tự của mức và mô tả mức đó, probabilities và confidence. Theo TypeSafe, score phù hợp để so sánh với ngưỡng, nhưng không phù hợp để xác định con số chính xác giữa các mức.
"frustration": {
"type": "score",
"instructions": "Khách hàng bực bội đến mức nào?",
"criteria": ["Bình tĩnh", "Bực bội", "Rất tức giận"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "Bình tĩnh", "1": "Bực bội", "2": "Rất tức giận" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}Phản hồi
- modelstring
Phiên bản mô hình đã trả lời. Bí danh jev-latest sẽ chuyển sang các phiên bản mới theo thời gian: nếu bạn đã chọn ngưỡng
confidencecho một phiên bản cụ thể, hãy theo dõi trường này. - answersobject
Mỗi câu hỏi có một câu trả lời, dưới cùng khóa tương ứng. Mỗi câu trả lời đều có
type, với choice và score còn cóconfidence. - usageobject
input_tokensvàoutput_tokens. Chỉ tính phí token đầu vào.
Nhiều câu hỏi trong một yêu cầu
Đặt tất cả câu hỏi về cùng một state trong một yêu cầu: các câu hỏi được đánh giá song song, còn state chỉ được gửi một lần. Theo TypeSafe, trong ví dụ của họ với 13 câu hỏi, một yêu cầu chung có chi phí thấp hơn 12,2 lần và nhanh hơn 10 lần so với 13 yêu cầu riêng gửi lần lượt, với cùng các câu trả lời.
Nên chia một nhận định phức tạp thành các câu hỏi đơn giản rồi kết hợp câu trả lời trong mã: chẳng hạn, thay vì “đánh giá đề xuất”, hãy đánh giá riêng thị trường, tính khả thi và sự khác biệt so với đối thủ. Khi đó, trọng số được thay đổi trong mã, thay vì trong nội dung câu hỏi.
{
"model": "jev-latest",
"state": "Cứu với! Các khoản chi trả của tôi đã thất bại suốt 3 ngày.",
"questions": {
"department": {
"type": "choice",
"instructions": "Nhóm nào nên xử lý việc này?",
"criteria": {
"billing": "Thanh toán, lập hóa đơn, hoàn tiền",
"technical": "Lỗi, gián đoạn dịch vụ, tích hợp",
"sales": "Giá, nâng cấp, khách hàng mới"
}
},
"frustration": {
"type": "score",
"instructions": "Khách hàng bực bội đến mức nào?",
"criteria": ["Bình tĩnh", "Bực bội", "Rất tức giận"]
},
"is_urgent": {
"type": "noul",
"instructions": "Nội dung này có thể hiện tính khẩn cấp không?"
}
}
}Khi nào phù hợp
- Định tuyến. Chuyển phản ánh đến đúng bộ phận, còn yêu cầu đến đúng thành phần xử lý: mã đơn giản, mô hình lớn hoặc con người.
- Sắp xếp và ưu tiên. Mức độ khẩn cấp, sắc thái, rủi ro — theo thang điểm, với các ngưỡng đặt trong mã.
- Kiểm duyệt và kiểm tra. Kiểm tra xem tin nhắn có vi phạm quy tắc, nguồn có xác nhận trích dẫn hay tài liệu có câu trả lời cho câu hỏi hay không — trước khi văn bản được chuyển sang bước tiếp theo.
- Chấm điểm và xếp hạng. Đánh giá tài liệu, ứng viên hoặc các đoạn tìm được theo bộ tiêu chí của bạn, rồi quyết định bước tiếp theo trong mã.
- Thay cho cách yêu cầu “trả về JSON” thiếu ổn định. Lời gọi được thiết kế để trả về các giá trị có kiểu dữ liệu, thay vì văn bản cần phân tích.
Khi nào không phù hợp
- Trò chuyện, trả lời người dùng, tạo văn bản hoặc mã. Jev không viết văn bản — việc đó đã có các mô hình văn bản.
- Mô hình cho Claude Code, Cursor và các tác nhân khác. Không thể thay mô hình của tác nhân bằng jev-latest: tác nhân cần một mô hình có thể viết văn bản và gọi công cụ. Bạn có thể gọi Jev từ mã mà tác nhân viết cho bạn.
- Phép tính số học, đếm, so sánh ngày. Theo TypeSafe, thực hiện các việc này trong mã sẽ đáng tin cậy hơn; chỉ nên hỏi mô hình về phần ngữ nghĩa — chẳng hạn, trích xuất các thành phần của ngày bằng choice.
- Hình ảnh, âm thanh và video. Mô hình chỉ nhận văn bản — hãy chuyển các dữ liệu đó thành văn bản trước.
Giá
Chỉ tính phí token đầu vào — trường usage.input_tokens của phản hồi: $0.084 cho 1 triệu. Token đầu ra miễn phí.
Yêu cầu trong ví dụ trên trang này (296 token đầu vào) có giá dưới $0.0001.
Trước yêu cầu, Ailoot giữ trước một khoản trong số dư và sau phản hồi chỉ trừ tiền một lần theo mức sử dụng thực tế — cách hoạt động.
Giới hạn
| Mục | Giới hạn |
|---|---|
| Toàn bộ yêu cầu: state và tất cả câu hỏi | 64K token |
| state cùng với câu hỏi dài nhất | 32K token |
| Số phương án trong một choice | tối đa 255 |
| Số mức trong một score | từ 2 đến 10 |
| Đầu vào | chỉ văn bản: chuỗi, đối tượng JSON hoặc mảng văn bản |
Giới hạn của mô hình theo dữ liệu TypeSafe. Giới hạn của khóa và số dư của bạn được áp dụng như với mọi mô hình Ailoot: Lỗi và giới hạn.
Lỗi
Lỗi được trả về theo định dạng chung của Ailoot API: mã, nội dung dễ hiểu và Request ID. Các lỗi thường gặp nhất với phương thức này:
| Mã | Khi nào xảy ra | Cách xử lý |
|---|---|---|
400 invalid_request | Nội dung yêu cầu không vượt qua bước kiểm tra: thiếu state, model hoặc questions, type không xác định, choice có hơn 255 phương án hoặc score có hơn 10 mức | Sửa yêu cầu theo nội dung lỗi: nếu không sửa, yêu cầu vẫn sẽ không vượt qua bước kiểm tra |
400 context_length_exceeded | Tổng độ dài của state và các câu hỏi vượt giới hạn mô hình | Lọc state trong mã, chỉ giữ thông tin cần cho các câu hỏi |
401 invalid_api_key | Thiếu khóa hoặc khóa không hợp lệ | Gửi khóa trong tiêu đề Authorization |
402 insufficient_balance | Số dư khả dụng không đủ cho khoản giữ trước | Nạp thêm số dư |
404 model_not_found, unsupported_endpoint | ID có lỗi hoặc mô hình được gọi bằng phương thức không phù hợp, chẳng hạn qua /v1/chat/completions | Chỉ gọi jev-latest qua POST /v1/systemone |
429 rate_limit_exceeded | Quá nhiều yêu cầu | Chờ số giây ghi trong tiêu đề Retry-After rồi thử lại |
503 model_overloaded, model_unavailable | Mô hình tạm thời quá tải hoặc không khả dụng | Nếu X-Should-Retry: true — thử lại sau số giây trong Retry-After; nếu false — trước tiên kiểm tra Request ID trong lịch sử |
504 model_timeout | Mô hình không phản hồi kịp thời | Không gửi lại yêu cầu trước khi kiểm tra Request ID trong lịch sử |
Danh sách đầy đủ các mã nằm trên trang Lỗi và giới hạn.