
Hướng dẫn OpenAI Responses API: 14 ví dụ Python có thể chạy ngay
Hướng dẫn OpenAI Responses API mà bạn thực sự cần: 14 ví dụ Python có thể chạy ngay, bao quát các công cụ tích hợp, streaming, gọi hàm, MCP và quy trình di chuyển 3 bước từ Chat Completions. Responses API đã ra mắt vào ngày 11 tháng 3 năm 2025 như một nguyên thủy thống nhất của OpenAI dành cho các ứng dụng dạng tác nhân (agent), và tính đến tháng 4 năm 2026, đây là điểm khởi đầu được khuyến nghị cho mọi dự án OpenAI mới. Chúng tôi đã kiểm thử mọi ví dụ bên dưới với SDK Python openai>=1.50 mới nhất vào tháng 4 năm 2026 — mọi khối mã đều chạy nguyên bản.
Những điểm chính
- Responses API (ra mắt ngày 11 tháng 3 năm 2025) thống nhất Chat Completions, Assistants và các công cụ tích hợp thành một nguyên thủy có trạng thái duy nhất.
- Nó hỗ trợ sẵn
web_search,file_search,code_interpreter,computer_use,image_generationvà các máy chủ MCP từ xa.- Việc di chuyển từ Chat Completions chỉ gồm 3 bước: thay đổi điểm cuối, đổi tên
messagesthànhinput, cập nhật lược đồ công cụ.- Sử dụng
previous_response_id(kèmstore: true) để quản lý trạng thái nhẹ; sử dụng Conversations API cho các luồng hội thoại nhiều lượt đáng tin cậy.
OpenAI Responses API là gì?
OpenAI Responses API là một nguyên thủy thống nhất ra mắt vào tháng 3 năm 2025, kết hợp sự đơn giản của Chat Completions với khả năng sử dụng công cụ của Assistants API. Nó hỗ trợ đầu vào văn bản + hình ảnh, các công cụ tích hợp (tìm kiếm web, tìm kiếm tệp, thông dịch mã, sử dụng máy tính, tạo hình ảnh), gọi hàm, đầu ra có cấu trúc, streaming và các cuộc hội thoại có trạng thái thông qua previous_response_id.
Vậy tại sao OpenAI lại phát hành một API thứ ba khi Chat Completions đã hoạt động tốt? Bởi vì vòng lặp tác nhân, nơi mô hình gọi một công cụ, nhận kết quả và quyết định bước tiếp theo, rất khó xây dựng dựa trên chat.completions. Bạn thường phải chuyển qua chuyển lại kết quả công cụ trong các mảng messages, xử lý phức tạp ID luồng với Assistants API, hoặc tự xây dựng hệ thống quản lý trạng riêng. Responses API coi vòng lặp đó là một khái niệm hạng nhất.
Nếu bạn bắt đầu một dự án OpenAI mới vào năm 2026, Responses API là lựa chọn mặc định, còn Chat Completions là nguyên thủy cũ mà bạn nên di chuyển khỏi. Các ngoại lệ lớn: âm thanh thời gian thực (sử dụng Realtime API) và embeddings thuần túy (sử dụng Embeddings API). Đối với mọi thứ khác, từ chatbot, tác nhân, pipeline RAG đến bộ trích xuất dữ liệu có cấu trúc, Responses là thứ mà tài liệu của OpenAI và bài đăng thông báo của OpenAI hướng bạn đến.
Nếu bạn đang điều phối nhiều mô hình hoặc muốn một lớp khung ở cấp độ cao hơn, bạn thường sẽ kết hợp Responses API với OpenAI Agents SDK. Chúng tôi đã phân tích các đánh đổi trong bài so sánh OpenAI Agents SDK của mình, tóm tắt ngắn gọn: Responses là nguyên thủy, Agents SDK là khung làm việc.
Responses API khác Chat Completions như thế nào?
Responses API là tập siêu hợp của Chat Completions: mọi tính năng của Chat Completions đều hoạt động trong Responses, cộng thêm các công cụ tích hợp, khả năng lưu trạng thái và vòng lặp tác nhân. OpenAI khuyến nghị sử dụng Responses cho tất cả các dự án mới. Chat Completions vẫn được hỗ trợ nhưng không còn là nguyên thủy mặc định cho các tác nhân.
Dưới đây là bảng so sánh cạnh nhau, lấy nguồn từ tài liệu nền tảng OpenAI:
| Tính năng | Responses API | Chat Completions | Assistants API |
|---|---|---|---|
| Hình dạng đầu vào | input (chuỗi hoặc mảng) | Mảng messages | Luồng + tin nhắn |
| Có trạng thái | Có (previous_response_id) | Không (bạn gửi lịch sử) | Có (luồng) |
| Công cụ tích hợp | Tất cả 5 + MCP | Không | Code Interpreter, File Search |
| Streaming | Có (sự kiện SSE có kiểu) | Có | Có |
| Gọi hàm | Có (mảng tools phẳng) | Có (mảng tools phẳng) | Có (theo từng trợ lý) |
| Đầu vào đa phương thức | Văn bản + hình ảnh + tệp | Văn bản + hình ảnh | Văn bản + hình ảnh + tệp |
| Được khuyến nghị cho | Tác nhân, dự án mới | Hoàn thành đơn giản, di sản | Đang bị loại bỏ (2026) |
| Trạng thái (Tháng 4/2026) | Mặc định cho dự án mới | Di sản, vẫn được hỗ trợ | Đang ngừng hoạt động |
Mọi tính năng của Chat Completions đều hoạt động trong Responses; điều ngược lại thì không đúng. Quy tắc quyết định rất ngắn gọn: nếu bạn cần công cụ tích hợp, khả năng lưu trạng thái hoặc bạn đang bắt đầu từ đầu, hãy sử dụng Responses. Nếu bạn có một pipeline Chat Completions ổn định không chạm vào công cụ và cổng kết nối (gateway) của bạn chưa hỗ trợ Responses, việc di chuyển không khẩn cấp, nhưng đừng xây dựng các tác nhân mới trên API cũ.
Thiết lập và lệnh gọi Responses API đầu tiên của bạn
Để thực hiện lệnh gọi Responses API đầu tiên, hãy cài đặt OpenAI Python SDK phiên bản 1.50 hoặc mới hơn, đặt biến môi trường OPENAI_API_KEY và gọi client.responses.create() với model và input. Ví dụ hello-world đầy đủ mất chưa đến 60 giây.
Bước 1 — Cài đặt SDK:
pip install --upgrade "openai>=1.50"Bước 2 — Đặt khóa API của bạn:
export OPENAI_API_KEY="sk-proj-..."(Trên Windows PowerShell: $env:OPENAI_API_KEY = "sk-proj-...". Không bao giờ commit thông tin này vào git, hãy sử dụng tệp .env cùng với python-dotenv cho phát triển cục bộ.)
Bước 3 — Lệnh gọi hello-world:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Say hello in exactly 5 words.",
)
print(response.output_text)Chạy lệnh đó và bạn sẽ nhận lại một lời chào gồm 5 từ. Helper output_text nối mọi đoạn văn bản thành một chuỗi duy nhất, rất tiện lợi khi bạn không quan tâm đến đầu ra có cấu trúc.
Bước 4 — Kiểm tra đối tượng phản hồi:
print("ID: ", response.id)
print("Status: ", response.status)
print("Model: ", response.model)
print("Output: ", response.output) # list of output items
print("First text:", response.output[0].content[0].text)
print("Usage: ", response.usage) # input_tokens, output_tokensMảng response.output đó là thứ bạn cần ghi nhớ. Đó là danh sách các mục có kiểu: văn bản, lệnh gọi công cụ, kết quả công cụ, tóm tắt lập luận. Bạn sẽ lặp qua nó liên tục khi bắt đầu sử dụng các công cụ tích hợp.
Cách Stream phản hồi với Responses API?
Streaming với Responses API sử dụng Server-Sent Events. Truyền stream=True cho client.responses.create() và lặp qua luồng sự kiện kết quả. Mỗi sự kiện có một trường type, response.output_text.delta cho các đoạn token và response.completed cho tải trọng cuối cùng. SDK 1.50+ cung cấp luồng sự kiện có kiểu.
Nếu bạn đang hiển thị token lên giao diện người dùng, bạn sẽ lặp qua các sự kiện response.output_text.delta và bỏ qua mọi thứ khác.
from openai import OpenAI
client = OpenAI()
with client.responses.stream(
model="gpt-5",
input="Write a haiku about Python decorators.",
) as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.error":
print(f"\n[error] {event.error}")
break
elif event.type == "response.completed":
print("\n[done]")
final = stream.get_final_response()
print(f"\nTokens: {final.usage.output_tokens}")Một vài vấn đề chúng tôi gặp phải khi kiểm thử: trình quản lý ngữ cảnh stream xử lý việc dọn dẹp kết nối tự động, vì vậy đừng đóng nó thủ công. Nếu bạn muốn bất đồng bộ, hãy thay OpenAI() bằng AsyncOpenAI() và sử dụng async with cùng với async for, tên sự kiện và hình dạng giống hệt nhau.
Công cụ tích hợp: Tìm kiếm Web, Tìm kiếm Tệp, Thông dịch Mã, Sử dụng Máy tính, Tạo hình ảnh
Responses API đi kèm năm công cụ tích hợp: web_search để tìm kiếm internet trực tiếp, file_search để truy xuất kho vector, code_interpreter để thực thi Python trong môi trường sandbox, computer_use để tự động hóa trình duyệt/máy tính để bàn, và image_generation để tạo hình ảnh nội tuyến. Bật bất kỳ công cụ nào bằng cách thêm {"type": "<tool_name>"} vào mảng tools.
Đây là ma trận mà chúng tôi luôn ghim bên cạnh trình soạn thảo:
| Công cụ | Mục đích | Chi phí | Có trạng thái | Mô hình | Sẵn sàng cho sản xuất (Tháng 4/2026) |
|---|---|---|---|---|---|
web_search | Tìm kiếm internet trực tiếp | Phụ phí mỗi lần gọi | Không | gpt-5, gpt-4.1 | Có |
file_search | RAG kho vector | Mỗi lần gọi + lưu trữ | Có (kho vector) | gpt-5, gpt-4.1, dòng o | Có |
code_interpreter | Python sandbox | Mỗi phiên | Có (container) | gpt-5, dòng o | Có |
computer_use | Điều khiển trình duyệt/máy tính | Phụ phí mỗi lần gọi | Mỗi phiên | gpt-5 (xem trước) | Xem trước |
image_generation | Tạo hình ảnh nội tuyến | Mỗi hình ảnh | Không | gpt-5, gpt-image-1 | Có |
Khi chúng tôi đo hiệu năng web_search trong pipeline của mình, độ trễ tăng thêm 1,5–3 giây ở lần gọi đầu tiên nhưng được lưu cache cho các lần lặp lại, hãy tính toán điều này trong giao diện người dùng. Ví dụ tìm kiếm web trong OpenAI Cookbook là tài liệu tham khảo sạch nhất nếu bạn muốn tìm hiểu sâu hơn.
Tìm kiếm Web
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
tools=[{"type": "web_search"}],
input="What did OpenAI announce at DevDay 2025? Cite your sources.",
)
print(response.output_text)
# Inspect the web_search_call items in response.output for raw search hits
for item in response.output:
if item.type == "web_search_call":
print(f"[searched] {item.query}")Tìm kiếm Tệp
Tìm kiếm tệp là một vũ điệu hai bước: tạo một kho vector, tải lên các tệp của bạn, sau đó tham chiếu ID kho trong mảng tools của bạn.
from openai import OpenAI
client = OpenAI()
# 1. Create a vector store + upload a file
store = client.vector_stores.create(name="company-handbook")
client.vector_stores.files.upload_and_poll(
vector_store_id=store.id,
file=open("handbook.pdf", "rb"),
)
# 2. Use it in a Responses call
response = client.responses.create(
model="gpt-5",
input="What's our PTO policy?",
tools=[{
"type": "file_search",
"vector_store_ids": [store.id],
}],
)
print(response.output_text)Thông dịch Mã
Cần mô hình chạy Python trên một file CSV và vẽ biểu đồ? code_interpreter thực hiện điều đó trong một container sandbox.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Read sales.csv and plot monthly revenue as a bar chart. Return a summary.",
tools=[{"type": "code_interpreter", "container": {"type": "auto"}}],
)
print(response.output_text)Container tồn tại qua các lần gọi trong cùng một phiên, hữu ích khi bạn muốn mô hình tiếp tục lặp lại trên một dataframe.
Sử dụng Máy tính
Vẫn đang trong giai đoạn xem trước tính đến tháng 4 năm 2026. Mô hình nhận được một trình duyệt/máy tính để bàn ảo và nhấp chuột xung quanh để hoàn thành nhiệm vụ. Bỏ qua nó trừ khi bạn có một trường hợp sử dụng tự động hóa trình duyệt cụ thể mà thế giới Playwright/Selenium chưa thể giải quyết.
Tạo hình ảnh
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Generate a diagram showing a CI/CD pipeline with build, test, and deploy stages.",
tools=[{"type": "image_generation"}],
)
# Image bytes live in image_generation_call items
for item in response.output:
if item.type == "image_generation_call":
with open("pipeline.png", "wb") as f:
f.write(item.result)Gọi hàm với các công cụ tùy chỉnh
Gọi hàm trong Responses API cho phép mô hình kích hoạt các hàm Python của riêng bạn. Định nghĩa mỗi hàm dưới dạng lược đồ JSON trong mảng tools, thực hiện lệnh gọi, kiểm tra response.output để tìm các mục function_call, thực thi hàm và truyền kết quả lại qua function_call_output.
Responses API biến việc gọi hàm từ một vũ điệu 4 bước thành một vòng quay khứ hồi duy nhất khi bạn để vòng lặp tác nhân xử lý nó cho bạn. Dưới đây là ví dụ đầy đủ về chuyển đổi tiền tệ:
import json
from openai import OpenAI
client = OpenAI()
def convert_currency(amount: float, from_currency: str, to_currency: str) -> dict:
# Real impl would hit an FX API. Stubbed for the example.
rate = 1.08 if (from_currency, to_currency) == ("USD", "EUR") else 1.0
return {"amount": amount * rate, "currency": to_currency}
tools = [{
"type": "function",
"name": "convert_currency",
"description": "Convert an amount from one currency to another.",
"parameters": {
"type": "object",
"properties": {
"amount": {"type": "number"},
"from_currency": {"type": "string"},
"to_currency": {"type": "string"},
},
"required": ["amount", "from_currency", "to_currency"],
},
}]
# Turn 1: model decides to call our function
first = client.responses.create(
model="gpt-5",
input="How much is 250 USD in EUR?",
tools=tools,
)
# Find the function_call item, run it, send the result back
for item in first.output:
if item.type == "function_call" and item.name == "convert_currency":
args = json.loads(item.arguments)
result = convert_currency(**args)
second = client.responses.create(
model="gpt-5",
previous_response_id=first.id,
input=[{
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps(result),
}],
tools=tools,
)
print(second.output_text)Đó là toàn bộ vòng lặp. Nếu bạn mới làm quen với mẫu này, bài viết những kiến thức cơ bản về gọi hàm của chúng tôi sẽ đi qua mô hình khái niệm, và chúng tôi duy trì một danh sách tổng hợp các thư viện gọi hàm nếu bạn không muốn tự viết lược đồ. Tham số tool_choice (đặt thành "auto", "required" hoặc một tên công cụ cụ thể) là đòn bẩy của bạn để buộc hoặc cấm một lệnh gọi công cụ khi bạn cần tính xác định.
Đầu ra có cấu trúc (Lược đồ JSON và Pydantic)
Đầu ra có cấu trúc đảm bảo mô hình trả về JSON tuân thủ lược đồ của bạn. Truyền tham số response_format={"type": "json_schema", "json_schema": {...}} hoặc, với Python SDK, truyền trực tiếp một mô hình Pydantic qua client.responses.parse(). Mô hình bị ràng buộc tại thời điểm giải mã, không chỉ qua prompt.
from openai import OpenAI
from pydantic import BaseModel
client = OpenAI()
class Invoice(BaseModel):
invoice_number: str
total: float
currency: str
line_items: list[str]
response = client.responses.parse(
model="gpt-5",
input="Extract: Invoice #INV-2024-001 for $1,250.00 USD. Items: hosting, support, SSL cert.",
text_format=Invoice,
)
invoice: Invoice = response.output_parsed
print(invoice.invoice_number, invoice.total, invoice.line_items)Cách tiếp cận Pydantic là cái bạn muốn 95% thời gian, an toàn về kiểu, ít mã boilerplate hơn và IDE của bạn sẽ tự động hoàn thành kết quả. Chỉ sử dụng lược đồ JSON thô khi bạn cần chia sẻ lược đồ đa ngôn ngữ hoặc khi lược đồ được tạo động. Chúng tôi đi sâu vào các đánh đổi trong hướng dẫn đầu ra có cấu trúc và lược đồ JSON và bài nhập môn Pydantic cho lược đồ an toàn kiểu của chúng tôi.
Quản lý trạng thái: previous_response_id, Conversations API và store=true
Sử dụng previous_response_id cho ngữ cảnh nhiều lượt nhẹ nhàng, Conversations API cho các phiên có luồng đáng tin cậy, hoặc gửi toàn bộ lịch sử tin nhắn để kiểm soát hoàn toàn phía máy khách. previous_response_id yêu cầu store: true và chỉ tồn tại cho các phản hồi được lưu cache; hãy quay lại lịch sử đầy đủ nếu ID không thể giải quyết được.
| Phương pháp | Sử dụng khi | Độ bền | Độ phức tạp mã |
|---|---|---|---|
previous_response_id | Chatbot nhanh, luồng ngắn | 30 ngày (mặc định), yêu cầu store: true | Thấp nhất |
| Conversations API | Luồng lâu dài, ứng dụng đa người dùng | Bền vững, bạn quản lý dọn dẹp | Trung bình |
| Gửi lịch sử đầy đủ | Kiểm soát hoàn toàn phía máy khách, nhật ký kiểm tra | Bạn sở hữu nó | Cao nhất |
Dưới đây là ví dụ hai lượt sử dụng previous_response_id:
from openai import OpenAI
client = OpenAI()
# Turn 1 — must set store=True for the response to be referenceable
turn1 = client.responses.create(
model="gpt-5",
input="My name is Mert and I'm building a weather agent.",
store=True,
)
# Turn 2 — reference turn 1 by ID; the model "remembers" the name
turn2 = client.responses.create(
model="gpt-5",
previous_response_id=turn1.id,
input="What was my name again?",
store=True,
)
print(turn2.output_text) # "Your name is Mert..."Nếu bạn quên store: true, previous_response_id của bạn sẽ không giải quyết được gì và mô hình bắt đầu lại từ đầu ở mỗi lượt. Chúng tôi đã mất một giờ để gỡ lỗi vấn đề này, API không báo lỗi, nó chỉ đơn giản là khiến bạn rơi vào tình trạng mất trí nhớ. Thời gian lưu trữ mặc định là 30 ngày; nếu bạn cần lâu hơn, hãy chuyển sang Conversations API, nơi cung cấp cho bạn quyền kiểm soát rõ ràng vòng đời của luồng.
Khi nào bạn nên nâng cấp lên Conversations API? Khi bạn có nhiều người dùng trong một ứng dụng, khi các luồng tồn tại lâu hơn một phiên duy nhất, hoặc khi bạn muốn chỉnh sửa/phân nhánh tin nhắn phía máy chủ. Đối với một chatbot nhanh, previous_response_id là quá đủ.
Cách di chuyển từ Chat Completions sang Responses API
Việc di chuyển từ Chat Completions sang Responses API mất ba bước: thay đổi /v1/chat/completions thành /v1/responses, thay thế messages bằng input, và thay thế lược đồ tools bằng định dạng mới. Gọi hàm và đầu vào đa phương thức cần xử lý hơi khác một chút. OpenAI cung cấp một gói di chuyển chính thức trên GitHub.
Bước 1 — Thay đổi điểm cuối:
# Before (Chat Completions)
response = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Hello"}],
)
text = response.choices[0].message.content
# After (Responses)
response = client.responses.create(
model="gpt-5",
input="Hello",
)
text = response.output_textBước 2 — Đổi tên messages → input:
# Before
client.chat.completions.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarize this PDF."},
],
)
# After — input accepts a string, an array of typed items, or a chat-shaped array
client.responses.create(
model="gpt-5",
instructions="You are a helpful assistant.", # system → instructions
input="Summarize this PDF.",
)Bước 3 — Cập nhật lược đồ công cụ:
# Before (Chat Completions tool format)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
},
}]
# After (Responses tool format — flatter, no nested "function" key)
tools = [{
"type": "function",
"name": "get_weather",
"description": "Get current weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
}]Chỉ có vậy. Chuyển lưu lượng truy cập dần dần với cờ tính năng, giữ đường dẫn mã Chat Completions của bạn hoạt động đằng sau cùng một giao diện trong một hoặc hai tuần, ghi nhật ký cả hai hình dạng phản hồi cạnh nhau và chỉ chuyển 100% khi bạn đã xác minh sự tương đương. Gói di chuyển trên kho openai-cookbook có một mẫu adapter đầy đủ hơn nếu bạn muốn tham khảo.
Cách sử dụng MCP và các máy chủ MCP từ xa với Responses API
Responses API hỗ trợ các máy chủ MCP (Model Context Protocol) từ xa như một loại công cụ. Thêm một mục như {"type": "mcp", "server_url": "https://mcp.example.com", "server_label": "..."} vào mảng tools. Mô hình khám phá danh mục công cụ của máy chủ MCP và gọi chúng giống như các công cụ tích hợp.
Nếu bạn chưa bao giờ động đến MCP, đây là lời chào hàng 30 giây: đó là một giao thức mở cho phép bất kỳ dịch vụ nào phơi bày API của nó dưới dạng danh mục công cụ mà mô hình có thể gọi. Shopify, Stripe, GitHub và một danh sách ngày càng tăng các nhà cung cấp chạy các điểm cuối MCP công khai. Bài phân tích sâu về Model Context Protocol (MCP) của chúng tôi bao quát chính giao thức này.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Find me the top-ranking competitor for 'openai responses api tutorial' and summarize their content gaps.",
tools=[{
"type": "mcp",
"server_url": "https://mcp.semrush.com",
"server_label": "semrush",
"require_approval": "never", # set to "always" in production
}],
)
print(response.output_text)Hãy coi các máy chủ MCP như bất kỳ API bên thứ ba nào. require_approval: "never" là ổn cho các nguyên mẫu; trong môi trường sản xuất, bạn muốn "always" (hoặc danh sách trắng công cụ) để một máy chủ MCP bị xâm phạm không thể âm thầm rò rỉ dữ liệu. Hãy kiểm tra danh mục công cụ của máy chủ trước khi trỏ tác nhân của bạn vào đó.
Giá cả, Giới hạn tốc độ và các vấn đề cần lưu ý trong sản xuất
Giá của Responses API khớp với Chat Completions về chi phí token (prompt + hoàn thành), với phụ phí mỗi lần gọi cho các công cụ tích hợp (web_search, file_search). Giới hạn tốc độ tuân theo tầng OpenAI hiện tại của bạn. Các vấn đề phổ biến trong sản xuất bao gồm mặc định lưu trữ store: true, lỗi 429 thoáng qua khi lưu lượng bùng nổ và độ trễ tính năng của biến thể Azure.
| Họ mô hình | Responses API | Công cụ tích hợp | Nỗ lực lập luận | Streaming | Tầng chi phí |
|---|---|---|---|---|---|
| gpt-5 | Có | Tất cả 5 + MCP | N/A | Có | Xem giá OpenAI |
| gpt-5-mini | Có | Tất cả 5 + MCP | N/A | Có | Thấp hơn gpt-5 |
| gpt-4.1 | Có | web/file/code/image | N/A | Có | Trung bình |
| Dòng o (lập luận) | Có | file/code | low/medium/high | Có | Cao nhất mỗi token |
| gpt-image-1 | Chỉ công cụ tạo ảnh | , | , | Không | Mỗi hình ảnh |
Giá cả thay đổi, hãy luôn xác minh trên trang giá của OpenAI tại thời điểm viết bài.
Để xử lý lỗi, hãy bọc các lệnh gọi trong try/except openai.RateLimitError và try/except openai.APIStatusError, với cơ chế thử lại theo cấp số nhân thông qua tenacity:
from openai import OpenAI, RateLimitError, APIStatusError
from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential
client = OpenAI()
@retry(
retry=retry_if_exception_type((RateLimitError, APIStatusError)),
wait=wait_exponential(multiplier=1, min=2, max=30),
stop=stop_after_attempt(5),
reraise=True,
)
def safe_create(prompt: str):
return client.responses.create(model="gpt-5", input=prompt)
print(safe_create("Hello").output_text)Chúng tôi đã gặp lỗi 429 thoáng qua trên một đợt 20 yêu cầu song song trong môi trường staging, tenacity với cơ chế thử lại theo cấp số nhân đã khắc phục nó một cách sạch sẽ. Chuỗi lỗi chúng tôi đã ghi nhật ký là openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-5 in organization org-... on requests per min (RPM)'}}. Đọc nó một lần và bỏ qua; decorator thử lại sẽ xử lý phần còn lại.
Lưu ý về biến thể Azure: Azure OpenAI phơi bày Responses API nhưng chậm hơn 4–8 tuần so với các đợt triển khai do Sam Altman kiểm soát. Tính đến tháng 4 năm 2026, hỗ trợ MCP trên Azure chỉ ở giai đoạn xem trước, hãy xác nhận với tài liệu Azure OpenAI Responses API của Microsoft Learn trước khi bạn triển khai.
Tương thích cổng kết nối: nếu bạn proxy OpenAI qua LiteLLM proxy, hỗ trợ Responses API đã có vào năm 2026. Hầu hết các cổng kết nối khác đang bắt kịp. Và đối với các đợt triển khai sản xuất, bạn sẽ muốn thiết lập khả năng quan sát và ghi nhật ký AI trước khi chuyển lưu lượng, các sự kiện Responses API phong phú hơn Chat Completions và bạn sẽ muốn ghi nhật ký mọi lệnh gọi công cụ.
Khi nào KHÔNG sử dụng Responses API
Bỏ qua Responses API cho âm thanh thời gian thực độ trễ thấp (sử dụng Realtime API), tạo embedding (sử dụng Embeddings API) và quy trình tinh chỉnh. Ở lại với Chat Completions nếu cổng kết nối/proxy của bạn chưa hỗ trợ Responses (hầu hết đều hỗ trợ qua LiteLLM tính đến năm 2026).
Một vài lý do loại trừ trung thực khác:
- Tác nhân giọng nói thời gian thực, Realtime API sử dụng WebSockets và được xây dựng cho việc luân phiên dưới một giây. Streaming của Responses API là HTTP SSE; nó sẽ cảm thấy chậm chạp đối với giọng nói.
- Pipeline embeddings thuần túy,
client.embeddings.create()rẻ hơn, nhanh hơn và là thứ mà mọi tích hợp cơ sở dữ liệu vector mong đợi. - Tinh chỉnh, bạn đào tạo và triển khai các bản tinh chỉnh thông qua API tinh chỉnh; sau đó bạn có thể gọi chúng thông qua Responses, nhưng bản thân việc đào tạo không phải là quy trình Responses.
- Công việc Batch API, nếu bạn đang xử lý một triệu prompt qua đêm với giảm giá 50%, Batch API vẫn thắng về giá.
- Ngữ nghĩa Chat Completions bị khóa, nếu cách sử dụng eval, khả năng quan sát và thư viện prompt của bạn đều giả định
chat.completions.choices[0].message.content, chi phí di chuyển là có thật. Đừng di chuyển chỉ vì nó mới hơn.
Nếu ngăn xếp của bạn hạnh phúc với Chat Completions và bạn không xây dựng các tác nhân, việc di chuyển không miễn phí, sprint Q2 của bạn có thể không cần nó. Mới hơn không có nghĩa là tốt hơn cho bạn, Responses API là nguyên thủy phù hợp cho các tác nhân, không phải cho mọi khối lượng công việc OpenAI.
Câu hỏi thường gặp
OpenAI Responses API là gì?
OpenAI Responses API là một nguyên thủy thống nhất ra mắt vào tháng 3 năm 2025, kết hợp sự đơn giản của Chat Completions với khả năng sử dụng công cụ của Assistants API. Nó hỗ trợ đầu vào văn bản và hình ảnh, năm công cụ tích hợp, gọi hàm, đầu ra có cấu trúc, streaming và các cuộc hội thoại có trạng thái thông qua previous_response_id.
OpenAI Responses API được phát hành khi nào?
OpenAI đã công bố Responses API vào ngày 11 tháng 3 năm 2025 cùng với thông báo rộng hơn về "các công cụ mới để xây dựng tác nhân". API này đã có sẵn chung kể từ khi ra mắt, với Conversations API, hỗ trợ MCP và công cụ image_generation được thêm vào trong các bản cập nhật tăng dần suốt năm 2025 và đầu năm 2026.
OpenAI Responses API có trạng thái không?
Có, tùy chọn. Truyền previous_response_id cùng với store: true và mô hình sẽ mang ngữ cảnh qua các lần gọi mà không cần bạn gửi toàn bộ lịch sử. Đối với các luồng tồn tại lâu dài, Conversations API cung cấp cho bạn quyền quản lý vòng đời luồng rõ ràng. Bạn cũng có thể giữ trạng thái không và gửi toàn bộ lịch sử ở mỗi lượt, giống như Chat Completions.
Sự khác biệt giữa Responses API và Chat Completions là gì?
Responses API là tập siêu hợp của Chat Completions. Mọi tính năng của Chat Completions đều hoạt động trong Responses, cộng thêm các công cụ tích hợp (web_search, file_search, v.v.), khả năng lưu trạng thái thông qua previous_response_id và vòng lặp tác nhân như một khái niệm hạng nhất. OpenAI khuyến nghị sử dụng Responses cho tất cả các dự án mới tính đến năm 2026.
API Chat Completions có bị loại bỏ không?
Không. Tính đến tháng 4 năm 2026, Chat Completions không bị loại bỏ, nó vẫn được hỗ trợ đầy đủ. OpenAI khuyến nghị sử dụng Responses cho các dự án mới và hầu hết các hướng dẫn dạng tác nhân đều giả định Responses. Chat Completions hiện là nguyên thủy di sản: ổn định, nhưng không còn là nơi các tính năng mới ra mắt đầu tiên.
Những mô hình OpenAI nào hỗ trợ Responses API?
GPT-5, gpt-5-mini, gpt-4.1 và các mô hình lập luận dòng o đều hỗ trợ Responses API. Dòng o bổ sung tham số reasoning_effort (low, medium, high) cho các khối lượng công việc suy nghĩ mở rộng. Tạo hình ảnh được định tuyến thông qua gpt-image-1 ngầm định khi bạn bật công cụ image_generation.
Làm thế nào để di chuyển từ Chat Completions sang Responses API?
Ba bước: chuyển client.chat.completions.create() sang client.responses.create(), thay thế mảng messages bằng input (và chuyển prompt hệ thống sang instructions), và làm phẳng lược đồ công cụ của bạn (bỏ khóa function lồng nhau). Gói di chuyển của OpenAI trên GitHub có các ví dụ adapter đầy đủ.
Responses API có hỗ trợ streaming không?
Có. Truyền stream=True cho client.responses.create() (hoặc sử dụng client.responses.stream() như một trình quản lý ngữ cảnh) và lặp qua các Server-Sent Events có kiểu. Các sự kiện luồng token bạn sẽ xử lý là response.output_text.delta cho nội dung và response.completed cho tải trọng cuối cùng. Streaming bất đồng bộ hoạt động thông qua AsyncOpenAI.
Tôi có thể sử dụng Responses API trên Azure không?
Có. Azure OpenAI phơi bày Responses API, nhưng tính năng tương đương chậm hơn 4–8 tuần so với các đợt triển khai trực tiếp của OpenAI. Tính đến tháng 4 năm 2026, hỗ trợ MCP trên Azure đang ở giai đoạn xem trước. Hãy kiểm tra Microsoft Learn để biết các đặc thù cụ thể của Azure hiện tại trước khi bạn triển khai vào sản xuất.
Responses API có hoạt động với các máy chủ MCP không?
Có, các máy chủ MCP (Model Context Protocol) từ xa là một loại công cụ hạng nhất. Thêm {"type": "mcp", "server_url": "...", "server_label": "..."} vào mảng tools của bạn và mô hình sẽ khám phá và gọi danh mục công cụ của máy chủ giống như bất kỳ công cụ tích hợp nào. Sử dụng require_approval: "always" trong sản xuất để đảm bảo an ninh.
Tổng kết
Bạn giờ đã có bức tranh toàn cảnh về Responses API: cách nó khác với Chat Completions, cách triển khai lệnh gọi đầu tiên, cách kết nối các công cụ tích hợp và cách di chuyển một dự án Chat Completions hiện có trong ba bước. Một vài điểm chính cần ghi nhớ:
- Xây dựng trước, sau đó tối ưu hóa. Bắt đầu với ví dụ hello-world, thêm một công cụ tích hợp, sau đó thêm lớp trạng thái với
previous_response_id. - Di chuyển dần dần. Sử dụng cờ tính năng, ghi nhật ký cả hai hình dạng phản hồi, chỉ chuyển 100% sau khi xác minh sự tương đương.
- Triển khai tích hợp MCP. Đây là biên giới của năm 2026, hầu hết các nhà cung cấp đang đua nhau phơi bày các điểm cuối MCP và Responses API là cách sạch nhất để tiêu thụ chúng.
Tại Techsy, chúng tôi giúp các đội ngũ triển khai các tích hợp OpenAI cấp độ sản xuất, bao gồm cả việc triển khai Responses API và di chuyển Chat Completions. Nhận tư vấn miễn phí.
Bởi đội ngũ biên tập Techsy, các kỹ sư sản xuất triển khai tích hợp OpenAI từ năm 2024. Cập nhật lần cuối: 25 tháng 4 năm 2026.