OpenAI Decisions API là một endpoint POST /v1/decisions, chạy trên GPT-6 Luna, nhận văn bản hoặc hình ảnh cùng với danh sách câu hỏi và trả về các câu trả lời đã được định dạng thay vì văn xuôi: một predicate (xác suất), một choice (lựa chọn) với xác suất cho từng tùy chọn, hoặc một score (điểm) trên các cấp độ có thứ tự. Chi phí đầu vào là 0,10 đô la cho mỗi 1 triệu token mà không có phí đầu ra, đọc bộ nhớ đệm (cache-read) hoặc ghi bộ nhớ đệm (cache-write), và endpoint này đã ở giai đoạn beta công khai kể từ ngày 06-10-2026, với OpenAI cho biết GA (General Availability - khả dụng rộng rãi) dự kiến "trong vài tuần tới".
Bài đăng này sẽ đề cập đến những gì endpoint này trả về, chi phí của nó, vị trí của nó so với Structured Outputs và function calling, và cách kiểm tra nó. Để biết hướng dẫn chi tiết với curl, Python và JavaScript, hãy đọc cách sử dụng OpenAI Decisions API tiếp theo; nếu bạn đã sử dụng Responses API, bài so sánh Decisions và Responses sẽ cho thấy cùng một công việc được thực hiện theo cả hai cách. Xuyên suốt bài viết, chúng tôi sẽ sử dụng Apidog để lưu trữ khóa, lưu các yêu cầu và xác nhận trên mảng answers để một thay đổi trong hành vi của mô hình sẽ làm kiểm thử thất bại thay vì chuyển sai yêu cầu.
Cấu trúc của một yêu cầu và phản hồi Decisions
Ba trường yêu cầu, ba trường phản hồi. Không có id, không có văn bản được tạo, không có gì để phân tích cú pháp.
| Phần | Trường | Nội dung |
|---|---|---|
| Yêu cầu | model |
gpt-6-luna, mô hình duy nhất hiện có |
| Yêu cầu | input |
Một chuỗi, hoặc một mảng các tin nhắn người dùng có nội dung kết hợp các phần input_text và input_image |
| Yêu cầu | questions |
Một mảng các câu hỏi, mỗi câu hỏi có một type, instructions bắt buộc và một name tùy chọn |
| Yêu cầu | safety_identifier |
ID người dùng cuối tùy chọn, tối đa 128 ký tự |
| Phản hồi | model |
Trả lại gpt-6-luna |
| Phản hồi | answers |
Một mục cho mỗi câu hỏi, theo thứ tự bạn đã hỏi, với type và name |
| Phản hồi | usage |
input_tokens, input_tokens_details, output_tokens, output_tokens_details, total_tokens |
Lưu ý những gì còn thiếu: không có temperature, reasoning, stream, store, tools hoặc text.format. Đối với những điều đó, bạn sẽ muốn Responses API. Và output_tokens là 0 trong ví dụ tham chiếu của OpenAI, đó là lý do tại sao phần giá dưới đây không có dòng về đầu ra.
Ba loại câu hỏi
Mỗi câu hỏi có type riêng và bạn có thể kết hợp các loại câu hỏi trong một đầu vào. Đặt các câu hỏi độc lập vào cùng một yêu cầu; đối với các quyết định phụ thuộc vào câu trả lời trước đó, hướng dẫn của OpenAI khuyên nên gửi các yêu cầu riêng biệt.
predicate: xác suất có/không
Một predicate hỏi liệu một điều kiện có đúng hay không và trả về xác suất từ 0 đến 1 rằng điều đó là đúng.
curl https://api.openai.com/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "The box arrived crushed and the screen is cracked.",
"questions": [
{"type": "predicate", "name": "damaged",
"instructions": "Is the product described as damaged?"}
]
}'
Ví dụ tham chiếu của OpenAI cho định dạng này trả về:
{
"model": "gpt-6-luna",
"answers": [
{"type": "predicate", "name": "damaged", "probability": 0.95}
],
"usage": {
"input_tokens": 42,
"input_tokens_details": {"cached_tokens":0,"cache_write_tokens":0},
"output_tokens": 0,
"output_tokens_details": {"reasoning_tokens":0},
"total_tokens": 42
}
}
choice: một nhãn từ một tập hợp không có thứ tự
Một choice thêm một mảng choices gồm các đối tượng {value, description}: từ 2 đến 255 lựa chọn duy nhất, trong đó value là một chuỗi hoặc một giá trị boolean (true và "true" là khác nhau). OpenAI khuyến nghị một lựa chọn dự phòng như other khi các danh mục của bạn không bao gồm mọi đầu vào.
{
"model": "gpt-6-luna",
"input": "I was charged twice for my order.",
"questions": [
{"type": "choice", "name": "department",
"instructions": "Which team should handle this ticket?",
"choices": [
{"value":"billing"}, {"value":"technical"},
{"value":"shipping"}, {"value":"other"}
]}
]
}
Câu trả lời minh họa của hướng dẫn cho đầu vào này:
{"type": "choice", "name": "department", "choice": "billing",
"probabilities": [
{"value":"billing","probability":0.95},
{"value":"technical","probability":0.02},
{"value":"shipping","probability":0.01},
{"value":"other","probability":0.02}
],
"confidence": 0.93}
score: một vị trí trên thang đo có thứ tự
Một score thêm levels, một mảng {label, description} được sắp xếp từ thấp nhất đến cao nhất. Các chỉ số bắt đầu từ 0, và score trả về là giá trị trung bình có trọng số xác suất của các chỉ số đó, vì vậy nó có thể nằm giữa các cấp độ.
{
"model": "gpt-6-luna",
"input": "Export fails in Safari but works in Chrome.",
"questions": [
{"type": "score", "name": "severity",
"instructions": "How badly does this bug block the user?",
"levels": [
{"label":"Cosmetic"},
{"label":"Workaround available"},
{"label":"Fully blocked"}
]}
]
}
Trong ví dụ của hướng dẫn, các xác suất là 0.1, 0.7 và 0.2 trên ba cấp độ, cho score là 1.1 và confidence là 0.55. Hãy đọc 1.1 là "giữa cấp độ 1 và cấp độ 2, gần với 1". Quy tắc của hướng dẫn: choice cho các danh mục không có thứ tự như phòng ban; score cho các cấp độ có thứ tự như mức độ nghiêm trọng.
Một loại câu trả lời thứ tư, refusal (từ chối), có thể xuất hiện cho bất kỳ câu hỏi nào dưới dạng {"type":"refusal","name":...}. Các câu hỏi khác trong cùng một yêu cầu vẫn có thể nhận được câu trả lời, vì vậy hãy phân nhánh theo type trước khi đọc một trường.
Tốc độ, theo mô tả của OpenAI
OpenAI cho biết Decisions API nhanh hơn Responses API khoảng 10 lần; thông báo này nói rằng nó nhanh hơn tới 10 lần so với GPT-6 Luna thông qua Responses. OpenAI không công bố con số độ trễ tuyệt đối nào. Một nhà phát triển trên diễn đàn OpenAI đã báo cáo rằng các quyết định đầu vào hình ảnh trả về trong khoảng 0,8 giây trên kết nối chậm: một giai thoại, không phải một tiêu chuẩn. Hãy đo lường p95 của riêng bạn trước khi hứa hẹn bất cứ điều gì.
Giá: 0,10 đô la cho mỗi triệu token đầu vào, không có gì khác
Với gpt-6-luna, đầu vào có giá 0,10 đô la cho mỗi 1 triệu token. Bạn chỉ trả tiền cho token đầu vào: không có phí đọc bộ nhớ đệm (cache-read), ghi bộ nhớ đệm (cache-write) hoặc token đầu ra. Đối tượng usage mang các trường cached_tokens và cache_write_tokens, nhưng theo một phản hồi trên diễn đàn nhà phát triển của OpenAI, chưa có bộ nhớ đệm (caching) trên Decisions, vì vậy hãy mong đợi là 0.
Hai hệ số nhân được áp dụng. Đầu vào trên 272K token được tính phí gấp 2 lần, tức là 0,20 đô la cho mỗi 1 triệu token (được lấy từ hệ số nhân ngữ cảnh dài của trang giá). Xử lý khu vực thông qua các endpoint lưu trú dữ liệu ở Mỹ hoặc EU sẽ cộng thêm 10%. Không có cấp Batch, Flex hoặc Fast nào được ghi nhận cho /v1/decisions, vì vậy đừng lên kế hoạch dựa vào một mức giảm giá chỉ tồn tại trên Responses.
Đây là phép tính cho khối lượng công việc định tuyến hỗ trợ. Một yêu cầu có 500 token với ba câu hỏi trong một yêu cầu có giá 500 / 1.000.000 x 0,10 đô la = 0,00005 đô la. Một triệu yêu cầu như vậy có giá 50 đô la. Cùng một yêu cầu đó thông qua Responses API với nhãn JSON 40 token với giá 0,50 đô la cho mỗi 1 triệu token đầu ra sẽ cộng thêm 40 / 1.000.000 x 0,50 đô la = 0,00002 đô la cho mỗi yêu cầu ngoài chi phí đầu vào, trước các token suy luận, mà Luna tính phí như đầu ra trên Responses và Decisions thì hoàn toàn không tính phí. Cách nói thẳng thắn là "Decisions không tính phí token đầu ra", không phải là một tỷ lệ phần trăm. Để biết đầy đủ bảng giá của Luna và những gì bộ nhớ đệm nhắc nhở (prompt caching) thực hiện trên Responses, hãy xem GPT-6 Luna là gì.
Khi nào nên sử dụng Decisions, Structured Outputs, hoặc function calling
OpenAI tự mình vạch ra ranh giới: sử dụng Structured Outputs với Responses API khi bạn cần một đối tượng tuân theo JSON schema của riêng bạn, chẳng hạn như các trường được trích xuất hoặc một lời giải thích bằng văn bản, hoặc function calling khi bạn cần mô hình yêu cầu một lệnh gọi công cụ với các đối số. Decisions dùng để phân loại nội dung, định tuyến yêu cầu và ưu tiên công việc.
| Bạn cần | Sử dụng |
|---|---|
| Một nhãn, một xác suất, hoặc mức độ nghiêm trọng với độ tin cậy | Decisions API |
| Một đối tượng trong JSON schema của riêng bạn (các trường được trích xuất, một lời giải thích) | Structured Outputs trên Responses |
| Mô hình để chọn một công cụ và điền các đối số của nó | Function calling trên Responses |
| Streaming, trạng thái hội thoại, công cụ, bộ nhớ đệm (caching), hoặc Batch | Responses API |
Một enum của Structured Outputs có thể trả về một nhãn. Nó không thể trả về phân phối xác suất hoặc trường confidence trừ khi bạn yêu cầu mô hình viết một cái, và khi đó nó là văn bản được tạo ra, không phải là xác suất đo lường. Decisions cung cấp cho bạn các con số mà bạn có thể đặt ngưỡng. OpenAI khuyên bạn nên đặt các ngưỡng đó từ các ví dụ đã được gắn nhãn trong ứng dụng của riêng bạn, cân nhắc chi phí của false positive so với false negative, bởi vì không có số liệu chính xác hoặc hiệu chuẩn nào được công bố. Đang cân nhắc một nhà cung cấp quyết định kiểu khác? Bài so sánh Decisions vs Jev bao gồm giá, đầu vào và định dạng đầu ra cạnh nhau.
Hình ảnh và cảnh báo base64
input chấp nhận tin nhắn người dùng có nội dung kết hợp các phần input_text và input_image, với một detail tùy chọn là low, high, auto (mặc định) hoặc original. Hướng dẫn nói rằng hình ảnh phải là URL dữ liệu base64 nội tuyến; các URL được lưu trữ và file_id không được hỗ trợ. Tài liệu tham chiếu API cũng liệt kê các URL HTTP(S) có thể truy cập công khai, tối đa 128 hình ảnh mỗi yêu cầu. Hãy coi base64 là đường dẫn được ghi lại và kiểm tra URL được lưu trữ trước khi dựa vào nó.
Kiểm soát dữ liệu
Decisions API hỗ trợ Zero Data Retention và sử dụng HIPAA cho các khách hàng đủ điều kiện. Việc lưu trú dữ liệu và xử lý theo khu vực được hỗ trợ tại Hoa Kỳ và Châu Âu (EEA cộng với Thụy Sĩ) thông qua us.api.openai.com và eu.api.openai.com. Endpoint có thể truy cập được từ mọi khu vực API được hỗ trợ, mặc dù việc khả dụng trong một khu vực không có nghĩa là suy luận sẽ chạy ở đó. Nhật ký giám sát lạm dụng được giữ lại tối đa 30 ngày theo mặc định. Nếu bạn đang định tuyến tin nhắn của bệnh nhân, hãy đọc hướng dẫn tuân thủ HIPAA API của chúng tôi trước.
Khả dụng: hiện đang beta, sắp GA
Endpoint này đã ra mắt phiên bản beta công khai cho tất cả các nhà phát triển vào ngày 06-10-2026 và nằm trong mục “Beta APIs” trong tài liệu tham khảo. Hướng dẫn của OpenAI cho biết GA dự kiến "trong vài tuần tới"; không có ngày cụ thể. Các ví dụ SDK yêu cầu Python 3.26.0, JavaScript 7.30.0, Go 3.73.0, Ruby 0.101.0 hoặc Java 4.78.0 trở lên; lệnh gọi là client.decisions.create(...) trong Python và JavaScript. Một Playground tại platform.openai.com/decisions cho phép bạn thử các câu hỏi trước khi viết code. Không có giới hạn tỷ lệ (rate limits) cụ thể cho Decisions nào được công bố; hãy kiểm tra trang giới hạn của tổ chức bạn. Không có cấp Decisions miễn phí; để truy cập Luna miễn phí, hãy xem bài đăng về các tuyến đường Luna miễn phí của chúng tôi.
Kiểm tra các lệnh gọi Decisions trong Apidog
Các câu trả lời đã được định dạng rất dễ để xác nhận, đó là điểm mấu chốt. Ba bước sau đây bao gồm hầu hết các nhóm.
Lưu trữ khóa một lần. Đặt OPENAI_API_KEY vào một biến môi trường Apidog và tham chiếu {{OPENAI_API_KEY}} trong tiêu đề Authorization: Bearer, để khóa thực tế không bao giờ xuất hiện trong một yêu cầu được chia sẻ.
Lưu một yêu cầu cho mỗi loại câu hỏi, với các xác nhận JSONPath: trạng thái 200, $.answers[0].type bằng choice, $.answers[0].choice bằng billing, $.answers[0].confidence lớn hơn 0.8, $.answers[?(@.name=='damaged')].probability lớn hơn 0.9, và $.usage.output_tokens bằng 0, giúp phát hiện bất ngờ về hóa đơn trước khi bạn nhận được.
Chọn ngưỡng từ một tập hợp được gắn nhãn. Xây dựng một kịch bản kiểm thử trong Apidog chạy cùng một yêu cầu trên một tệp CSV chứa văn bản yêu cầu và phòng ban dự kiến, sau đó đặt ngưỡng tự động định tuyến (auto-route threshold) tại điểm mà chi phí false positive vượt qua chi phí của hàng đợi xem xét. Chạy nó trong CI với Apidog CLI để một thay đổi mô hình hoặc bí danh làm kiểm thử thất bại thay vì gây ra vấn đề cho khách hàng. Hướng dẫn cách làm bao gồm từng bước, bao gồm cả việc giả lập mảng answers để giao diện người dùng có thể được xây dựng trước khi bộ định tuyến hoàn thiện.
Câu hỏi thường gặp
Decisions API có phải là một mô hình mới không? Không. Đó là một endpoint, POST /v1/decisions, chạy trên GPT-6 Luna. Luna ra mắt vào 22-09-2026; endpoint này đã ra mắt phiên bản beta công khai vào 06-10-2026.
Chi phí của Decisions API là bao nhiêu? 0,10 đô la cho mỗi 1 triệu token đầu vào mà không có phí đầu ra, đọc bộ nhớ đệm (cache-read) hoặc ghi bộ nhớ đệm (cache-write). Đầu vào trên 272K token được tính phí gấp 2 lần, và xử lý khu vực sẽ cộng thêm 10%.
Nó có trả về JSON schema của riêng tôi không? Không. Nó trả về answers với các trường probability, choice hoặc score. Đối với schema của riêng bạn, hãy sử dụng Structured Outputs trên Responses API.
Nó chính xác đến mức nào? OpenAI không công bố số liệu chính xác hoặc hiệu chuẩn nào. Hãy đặt ngưỡng từ dữ liệu đã được gắn nhãn của riêng bạn; một kịch bản kiểm thử LLM dựa trên dữ liệu là cách thực tế.
Bắt đầu từ đâu
Chọn một quyết định định tuyến mà ứng dụng của bạn hiện đang thực hiện bằng regex hoặc một vòng lặp nhắc nhở và phân tích, viết nó thành một câu hỏi choice duy nhất với tùy chọn dự phòng other, và chạy nó trên 50 ví dụ đã được gắn nhãn. Nếu phân phối độ tin cậy phân tách rõ ràng, bạn có một ngưỡng và một kiểm thử. Nếu không, câu hỏi cần tiêu chí sắc bén hơn. Để chạy thử nghiệm đó với các yêu cầu đã lưu và xác nhận, hãy tải xuống Apidog và nhập lệnh curl ở trên.
