tài liệu
API

Jev — mô hình ra quyết định

Markdown

Mô 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 đủ
POSThttps://api.ailoot.ai/v1/systemone
Jev — mô hình ra quyết định
curl 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?"
      }
    }
  }' 
200 OK
{
  "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ụcTóm tắt
Mô hìnhjev-latest — bí danh của phiên bản Jev ổn định mới nhất; thẻ trong danh mục
Phương thứcPOST /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ậnChỉ 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ảnh64K 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, choice hoặc score — 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ểuCâu hỏi đặt raGiá trị trả về
noulKhẳng định có đúng không: có hoặc khôngnoul — xác suất “có” từ 0 đến 1
choicePhương án nào trong số các phương án đã cho phù hợpchoice, probabilities, confidence
scoreVị trí của state trên thang mức độ của bạnscore, 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"
  }
}

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"
  }
}

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"]
}

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 confidence cho 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_tokens và 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ụcGiới hạn
Toàn bộ yêu cầu: state và tất cả câu hỏi64K token
state cùng với câu hỏi dài nhất32K token
Số phương án trong một choicetối đa 255
Số mức trong một scoretừ 2 đến 10
Đầu vàochỉ 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 raCách xử lý
400 invalid_requestNộ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ứcSử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_exceededTổng độ dài của state và các câu hỏi vượt giới hạn mô hìnhLọc state trong mã, chỉ giữ thông tin cần cho các câu hỏi
401 invalid_api_keyThiếu khóa hoặc khóa không hợp lệGửi khóa trong tiêu đề Authorization
402 insufficient_balanceSố dư khả dụng không đủ cho khoản giữ trướcNạp thêm số dư
404 model_not_found, unsupported_endpointID 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/completionsChỉ gọi jev-latest qua POST /v1/systemone
429 rate_limit_exceededQuá nhiều yêu cầuChờ số giây ghi trong tiêu đề Retry-After rồi thử lại
503 model_overloaded, model_unavailableMô hình tạm thời quá tải hoặc không khả dụngNế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_timeoutMô hình không phản hồi kịp thờiKhô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.

Còn câu hỏi? Hãy gửi Request ID và mô tả — chúng tôi sẽ giúp tìm hiểu.Liên hệ hỗ trợ