Hiểu phản hồi JSON
Phản hồi đơn lẻ thành công chứa data và meta. Ví dụ tập dữ liệu sau đây là phản hồi thực được ghi lại ngày 1 tháng 10 năm 2026 bằng khóa API; chỉ số dư tài khoản đã được thay thế. Ví dụ không thể hiện độ chính xác đã đo của sản phẩm, và một yêu cầu trực tiếp có thể trả về kết quả khác. Yêu cầu dùng khóa API trả về access.mode: api_key và null ở các trường hạn mức chỉ dành cho dùng thử; yêu cầu dùng thử theo IP trả về ip_trial cùng giới hạn dùng thử và thời điểm đặt lại.
{
"data": {
"input": {
"type": "name",
"value": "Tuấn",
"country": "VN"
},
"name": "tuấn",
"gender": "male",
"country": "VN",
"confidence": 0.9915730337078652,
"confidence_kind": "observed_frequency",
"sample_count": 356,
"source": "dataset",
"result_status": "identified",
"reason": null,
"country_source": "dataset",
"match": {
"name": "tuấn",
"method": "normalized",
"scope": "country",
"country": "VN"
}
},
"meta": {
"request_id": "6630814b-b7c8-4e85-860d-dacee06d0d8c",
"duration_ms": 11,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}Trường phản hồi dự đoán
| Trường | Kiểu | Có thể là null | Ví dụ | Mô tả |
|---|---|---|---|---|
data.input | object | Không | {"type":"name","value":"Tuấn","country":"VN"} | Loại đầu vào, giá trị và quốc gia. forceToGenderize được đưa vào khi là true. |
data.name | string | Có | "tuấn" | Tên riêng đã khớp hoặc trích xuất được; null khi không có. |
data.gender | string | Có | "male" | male, female hoặc JSON null. Đây là suy luận, không phải danh tính cá nhân đã xác minh. |
data.result_status | string | Không | "identified" | identified khi có giới tính được trả về; nếu không thì unknown. |
data.reason | string | Có | null | null với kết quả identified. Lý do cho unknown: not_found, no_name_candidate, ambiguous hoặc insufficient_evidence. |
data.confidence | number | Có | 0.95 | Giá trị từ 0 đến 1 hoặc null. Khi gender là null, độ tin cậy cũng là null. |
data.confidence_kind | string | Có | "observed_frequency" | observed_frequency: số lượng của nhóm chiếm ưu thế trong tập dữ liệu chia cho tổng số. model_reported: điểm do AI đưa ra, không phải xác suất đã hiệu chỉnh. Là null khi không có. |
data.sample_count | integer | Có | 1200 | Cỡ mẫu trong tập dữ liệu hoặc null. AI không tự tạo ra số lượng mẫu. |
data.source | string | Không | "dataset" | dataset, ai hoặc none. |
data.country | string | Có | "VN" | Mối liên hệ quốc gia từ dataset hoặc ai_association, hoặc null. Không xác định quốc tịch, nơi cư trú hay dân tộc. |
data.country_source | string | Có | "dataset" | Nguồn của mối liên hệ quốc gia: dataset, ai_association hoặc null. |
data.match | object | Không | {"name":"tuấn","method":"normalized","scope":"country","country":"VN"} | Tên khớp trong tập dữ liệu, phương thức (normalized, token, substring hoặc model_inference), phạm vi country hoặc global và quốc gia đã khớp. Bằng chứng không có sẽ là null. |
Các trường đầu vào được trả về
| Trường | Kiểu | Có thể là null | Ví dụ | Mô tả |
|---|---|---|---|---|
data.input.type | string | Không | "name" | Loại đầu vào: name, email hoặc username. |
data.input.value | string | Không | "Tuấn" | Giá trị đã gửi để dự đoán. |
data.input.country | string | Có | "VN" | Ngữ cảnh quốc gia đã gửi; null nếu bỏ qua. |
data.input.forceToGenderize | boolean | Không | true | Chỉ có khi bật chế độ biệt danh; nếu không thì bị bỏ qua. |
Các trường so khớp tập dữ liệu
| Trường | Kiểu | Có thể là null | Ví dụ | Mô tả |
|---|---|---|---|---|
data.match.name | string | Có | "tuấn" | Ứng viên được chọn trong tập dữ liệu; null khi không có dòng tập dữ liệu nào được chọn. |
data.match.method | string | Có | "normalized" | normalized, token, substring hoặc model_inference; null khi không có. |
data.match.scope | string | Có | "country" | country hoặc global khi tra cứu tập dữ liệu; null với AI hoặc khi thiếu bằng chứng. |
data.match.country | string | Có | "VN" | Quốc gia của dòng tập dữ liệu được chọn; null với dòng toàn cầu hoặc với AI. |
Siêu dữ liệu về truy cập, tính phí và yêu cầu
| Trường | Kiểu | Có thể là null | Ví dụ | Mô tả |
|---|---|---|---|---|
meta.request_id | string | Không | "550e8400-e29b-41d4-a716-446655440000" | Mã định danh duy nhất của lần gửi HTTP này; cũng được gửi trong X-Request-ID. |
meta.duration_ms | integer | Không | 42 | Thời gian xử lý yêu cầu tính bằng mili giây. |
meta.access.mode | string | Không | "api_key" | api_key, ip_trial hoặc unauthenticated. Khi dùng tài khoản trả phí, hãy kiểm tra giá trị là api_key. |
meta.access.reason | string | Có | null | Lý do chuyển sang dùng thử: api_key_missing, api_key_invalid hoặc api_key_not_found; trường hợp khác là null. |
meta.usage.charged_credits | integer | Có | 1 | Số tín dụng thực tính. Bằng 0 trước khi tính phí hoặc sau khi hoàn trả toàn bộ đã được xác nhận; null khi việc tính phí chưa được xác nhận. |
meta.usage.remaining_credits | integer | Có | 99 | Số dư khi thao tác hoàn tất. Có thể âm; null khi không có thông tin hoặc việc tính phí chưa được xác nhận. |
meta.usage.billing_status | string | Không | "confirmed" | not_charged, confirmed hoặc unconfirmed. Kiểm tra trường này trước khi thử lại một dự đoán thất bại. |
meta.usage.resets_at | string | Có | "2026-09-27T12:00:00.000Z" | Thời điểm đặt lại dùng thử theo IP, theo UTC (ISO 8601); null với tài khoản dùng khóa API hoặc khi chưa biết. |
meta.usage.limit | integer | Có | 10 | Hạn mức dùng thử theo IP; null với tài khoản dùng khóa API. |
meta.usage.period_seconds | integer | Có | 86400 | Chu kỳ dùng thử theo IP tính bằng giây; null với tài khoản dùng khóa API. |
Kết quả không xác định thành công
HTTP 200 nghĩa là thao tác đã hoàn tất; mã này không bảo đảm có giới tính. Giữ nguyên JSON null thay vì chuyển thành male, female, chuỗi rỗng hoặc độ tin cậy bằng 0. Kiểm tra data.result_status và data.reason tách biệt với lỗi HTTP.
Ví dụ thực chỉ dùng tập dữ liệu này, được ghi lại ngày 1 tháng 10 năm 2026, trả về source: none và reason: not_found và vẫn tốn 1 tín dụng. Một dòng tập dữ liệu có số lượng bằng nhau có thể trả về reason: ambiguous mà vẫn giữ sample_count. Kết quả AI không xác định dùng source: ai và reason: insufficient_evidence.
{
"data": {
"input": {
"type": "name",
"value": "zzzxxyy",
"country": null
},
"name": null,
"gender": null,
"country": null,
"confidence": null,
"confidence_kind": null,
"sample_count": null,
"source": "none",
"result_status": "unknown",
"reason": "not_found",
"country_source": null,
"match": {
"name": null,
"method": null,
"scope": null,
"country": null
}
},
"meta": {
"request_id": "54fdcd4e-f8bc-4224-918f-3a5732e08b9c",
"duration_ms": 10,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}Diễn giải độ tin cậy và bằng chứng so khớp
Độ tin cậy 0.9 nằm trên thang từ 0 đến 1. Với observed_frequency, giá trị này là số lượng của nhóm chiếm ưu thế chia cho tổng số của dòng tập dữ liệu được chọn; đây không phải độ chính xác toàn trình đã đo của sản phẩm. Điểm model_reported do AI cung cấp và không được hiệu chỉnh theo tần suất của tập dữ liệu.
Hãy chọn mọi ngưỡng của ứng dụng dựa trên dữ liệu đánh giá của riêng bạn và confidence_kind. Không xếp hạng trực tiếp điểm của tập dữ liệu và của AI như thể chúng đo cùng một thứ. Với AI, match.name, match.scope và match.country là null vì không có dòng tập dữ liệu nào được chọn; match.method là model_inference.
Với họ tên đầy đủ, kết quả tập dữ liệu có thể đến từ một thành phần thay vì toàn bộ chuỗi. data.input giữ nguyên giá trị đã gửi; data.name mô tả tên được trả về, còn data.match mô tả ứng viên và phạm vi tra cứu.
Quyết định bước tiếp theo cho ứng dụng của bạn
Trước tiên, hãy xử lý lỗi của yêu cầu và của từng mục, sau đó kiểm tra result_status. Với một dự đoán đơn lẻ, hãy đọc data; với một lô, hãy áp dụng cùng quyết định cho data của từng mục thành công. Giữ nguyên kết quả không xác định trong ứng dụng thay vì ép gán nhãn male hoặc female.
| Kết quả | Ý nghĩa | Cách xử lý đề xuất |
|---|---|---|
| identified; gender: male hoặc female | Suy luận đã đưa ra giới tính, kèm bằng chứng từ tập dữ liệu hoặc AI. | Áp dụng chính sách đã được đánh giá cho confidence_kind đó; lưu lại source và bằng chứng so khớp. |
| unknown; reason: not_found | Không có bản ghi nào trong tập dữ liệu khớp với các ứng viên đã phân tích. | Giữ gender là null. Một yêu cầu mới được gửi có chủ đích với tùy chọn AI khác là một thao tác mới và bị tính phí. |
| unknown; reason: no_name_candidate | Quá trình phân tích cho tập dữ liệu không tìm được ứng viên tên nào có thể dùng. | Giữ null; kiểm tra loại đầu vào và giá trị trước khi chọn bất kỳ suy luận bổ sung nào. |
| unknown; reason: ambiguous | Dòng tập dữ liệu được chọn có số lượng nam và nữ bằng nhau; sample_count vẫn có thể xuất hiện. | Không tự phân định kết quả hòa và không chuyển độ tin cậy null thành 0. |
| unknown; reason: insufficient_evidence | AI đã hoàn tất nhưng không có đủ bằng chứng để trả về giới tính. | Coi đây là kết quả không xác định đã hoàn tất, không phải lỗi của nhà cung cấp hay trường hợp cần tự động thử lại. |
| Problem Details hoặc error của một mục | Quá trình xử lý thất bại, chẳng hạn do ai_upstream_error hoặc prediction_timeout. | Lưu mã lỗi và request ID, kiểm tra việc tính phí và làm theo hướng dẫn thử lại. |
Chọn ngưỡng dựa trên đánh giá của chính bạn
Không có ngưỡng độ tin cậy chung nào khiến một dự đoán trở nên chính xác. Hãy đánh giá riêng observed_frequency và model_reported trên các ví dụ đại diện cho trường hợp sử dụng của bạn và được gắn nhãn độc lập. Tần suất trong tập dữ liệu và điểm do AI tự báo cáo là hai tín hiệu khác nhau, kể cả khi cả hai tình cờ đều là 0.9. Hãy đo tần suất chính sách của bạn đưa ra câu trả lời và tần suất các dự đoán được trả lời đó là đúng; với mọi trường hợp còn lại, hãy giữ kết quả không xác định hoặc chuyển sang xem xét.
Ví dụ, nếu result_status là identified nhưng confidence_kind là model_reported, hãy áp dụng chính sách AI đã được bạn đánh giá thay vì ngưỡng của tập dữ liệu. Nếu đã dùng forceToGenderize, name: null đi kèm gender khác null là hợp lệ: một bí danh có thể được suy luận mà không cần trích xuất tên thật. Hãy kiểm tra gender và result_status, không chỉ riêng name, để biết suy luận có đưa ra câu trả lời hay không. Đây vẫn là một ước tính, không phải xác minh danh tính của một người.