Gọi API ChatGPT bằng Python là gửi yêu cầu có xác thực tới API OpenAI, kèm model và tin nhắn, rồi đọc phản hồi bằng thư viện `openai` hoặc HTTP. Điểm bắt đầu có thể là một script nhận câu hỏi “Hãy viết lời chào khách hàng bằng tiếng Việt” và in câu trả lời ra terminal. Bài viết hướng dẫn bạn chuẩn bị môi trường Python, cấu hình API key và chạy yêu cầu đầu tiên bằng `requests`. Bạn sẽ biết kiểm tra phản hồi JSON, lấy nội dung trả lời và xem thông báo lỗi khi yêu cầu thất bại. Mốc 10 phút là mục tiêu thực hành khi bạn đã có tài khoản, API key và quyền truy cập model phù hợp; thời gian đăng ký hoặc xử lý thanh toán chưa nằm trong mốc này.
Tóm tắt nhanh
- Bắt đầu với một script Python chạy trong terminal, chưa cần làm giao diện chatbot.
- Yêu cầu chat cần xác thực và dữ liệu gồm `model`, `messages`; hãy kiểm tra cấu hình theo tài liệu nhà cung cấp.
- Hoàn thành một lượt gửi–nhận trước, sau đó mới thử câu hỏi tiếp theo có sử dụng lịch sử hội thoại.
Gọi API ChatGPT bằng Python khác dùng giao diện ChatGPT thế nào?
Trên giao diện ChatGPT, bạn nhập câu hỏi rồi đọc câu trả lời. Với Python, script chủ động gửi yêu cầu có xác thực tới API OpenAI, chỉ định `model`, gửi tin nhắn và đọc phản hồi bằng thư viện `openai` hoặc HTTP. Bạn có thể lấy nội dung trả về để ghi vào tệp, thay vì sao chép thủ công từ cửa sổ chat.
Giao diện, API, model và khóa khác nhau ở đâu?
| Thành phần | Vai trò trong cách sử dụng |
|---|---|
| Giao diện ChatGPT | Nơi bạn nhập tin nhắn và đọc câu trả lời trực tiếp. |
| API OpenAI | Nơi chương trình gửi yêu cầu và nhận dữ liệu phản hồi. |
| Model | Mô hình xử lý yêu cầu, được chọn qua trường `model`. |
| API key | Khóa bí mật dùng để xác thực yêu cầu API, không phải tên model. |
“OpenAI-compatible” cần kiểm tra đến đâu?
Một dịch vụ ghi “OpenAI-compatible” đang mô tả khả năng tương thích giao diện lập trình. Nhãn này không bảo đảm dịch vụ dùng model
của OpenAI hay hỗ trợ mọi tham số giống nhau. Trước khi đổi cấu hình, bạn cần đối chiếu `base_url`, tên `model`, cách xác thực và cấu trúc phản hồi trong tài liệu dịch vụ. Phạm vi bài là chạy script Python và đọc được câu trả lời từ API. Việc tạo trang web có ô nhập tin nhắn, nút gửi và vùng hiển thị hội thoại nằm ngoài phần thực hành này.
API chat Python dùng để hỏi đáp, viết nháp và tóm tắt ra sao?
| Ứng dụng | Mô tả | Đối tượng | Ghi chú |
|---|---|---|---|
| Cùng một đoạn tài liệu tiếng Việt, bạn có thể yêu cầu API trả lời câu hỏi, viết nháp email hoặc rút thành các ý chính. Khác biệt nằm ở chỉ dẫn trong `messages` và cách ứng dụng xử lý kết quả. | Thành phần | Vai trò | Điểm cần kiểm tra |
| Endpoint | Địa chỉ nhận yêu cầu chat | URL có khớp loại API đang dùng không | |
| Xác thực | Gửi khóa để xác nhận quyền truy cập | Header `Authorization` theo tài liệu nhà cung cấp | |
| `model` | Chọn mô hình xử lý | Tên model và quyền truy cập | |
| `messages` | Chứa chỉ dẫn, câu hỏi và tài liệu | Đúng cấu trúc `role`, `content` | |
| Phản hồi | Cung cấp nội dung để ứng dụng xử lý tiếp | Với Chat Completions không streaming, kiểm tra `choices[0].message.content` |
Ba cách giao việc bằng tiếng Việt Để hỏi đáp theo tài liệu, bạn có thể gửi quy chế nghỉ phép kèm yêu cầu: “Theo tài liệu này, nhân viên thử việc có
được nghỉ phép không? Trích đoạn làm căn cứ; nếu thiếu thông tin, nói rõ.” Câu trả lời vẫn cần đối chiếu với bản gốc. Với viết nháp, hãy chỉ rõ đầu ra: “Viết email mời họp bằng tiếng Việt, xưng em–anh/chị, giữ nguyên ngày giờ trong ghi chú.” Với tóm tắt, đổi yêu cầu thành: “Rút biên bản thành ba mục: quyết định, người phụ trách, hạn hoàn thành; mục thiếu ghi chưa nêu.”
Kiểm tra khả năng trước khi tích hợp Các tùy chọn không
được hỗ trợ đồng đều giữa model và endpoint. Kiểm tra `temperature` trước khi dùng để điều chỉnh độ biến thiên; `stream: true` cần bộ đọc từng phần thay vì chờ một JSON hoàn chỉnh. Nếu cần đầu ra theo schema, hãy xác minh hỗ trợ `response_format`: chỉ yêu cầu “trả JSON” trong prompt chưa bảo đảm đúng cấu trúc.
Từ môi trường ảo đến phản hồi đầu tiên bằng Python requests
| Bước | Mô tả | API / Node | Ghi chú |
|---|---|---|---|
| 1 | Chuẩn bị môi trường thực thi | Python CLI / venv | |
| 2 | Cài thư viện và cấu hình khóa | pip / biến môi trường | |
| 3 | Xác minh hợp đồng API | Tài liệu OpenAI | |
| 4 | Gửi yêu cầu đầu tiên | Python requests | |
| 5 | Kiểm tra và đọc kết quả | HTTP response / JSON | |
| 6 | Thử hội thoại nhiều lượt | Danh sách messages | Chạy trong terminal của thư mục dự án: “`bash |
2. Cài requests và đặt biến môi trường Sau khi kích hoạt, chạy `python -m pip install requests`. Đặt cấu hình trong cùng terminal; thay các giá trị mẫu bằng thông tin
của bạn. macOS/Linux:
export OPENAI_API_KEY="YOUR_API_KEY"
export OPENAI_MODEL="MODEL_ID"
PowerShell:
$env:OPENAI_API_KEY="YOUR_API_KEY"
$env:OPENAI_MODEL="MODEL_ID"
3. Đối chiếu tài liệu Chat Completions Trong tài liệu OpenAI, kiểm tra phương thức `POST`, URL ` header `Authorization: Bearer …` và body gồm `model`, `messages`. Chọn model mà tài khoản
được phép gọi và hỗ trợ Chat Completions; điền mã đó vào `OPENAI_MODEL`.
4. Tạo tệp và gửi yêu cầu Lưu thành `chat.py`. Hàm `ask()` dùng `json=` để gửi JSON và `timeout=(10, 60)` cho thời gian chờ kết nối, chờ đọc dữ liệu.
import os
import requests url = ""
headers = { "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}", "Content-Type": "application/json",
}
model = os.environ["OPENAI_MODEL"]
messages = [ {"role": "user", "content": "Ghi nhớ mã dự án là SEN-42. Hãy xác nhận."}
] def ask(history): response = requests.post( url, headers=headers, json={"model": model, "messages": history}, timeout=(10, 60), ) print("HTTP:", response.status_code) response.raise_for_status() data = response.json() return data["choices"][0]["message"]["content"] reply = ask(messages)
print("Lượt 1:", reply) messages.append({"role": "assistant", "content": reply})
messages.append({"role": "user", "content": "Mã dự án tôi vừa nói là gì?"})
print("Lượt 2:", ask(messages))
import os
import requests url = ""
headers = { "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}", "Content-Type": "application/json",
}
model = os.environ["OPENAI_MODEL"]
messages = [ {"role": "user", "content": "Ghi nhớ mã dự án là SEN-42. Hãy xác nhận."}
] def ask(history): response = requests.post( url, headers=headers, json={"model": model, "messages": history}, timeout=(10, 60), ) print("HTTP:", response.status_code) response.raise_for_status() data = response.json() return data["choices"][0]["message"]["content"] reply = ask(messages)
print("Lượt 1:", reply) messages.append({"role": "assistant", "content": reply})
messages.append({"role": "user", "content": "Mã dự án tôi vừa nói là gì?"})
print("Lượt 2:", ask(messages))5. Chạy và kiểm tra phản hồi Chạy `python chat.py`. Mã in status trước, gọi `raise_for_status()` để dừng khi HTTP báo lỗi, rồi mới đọc JSON và lấy `choices[0].message.content`. Chúng tôi chưa chạy thử đoạn mã này; đầu ra kỳ vọng là minh họa, trong đó lượt hai nhắc lại `SEN-42`.
6. Kiểm tra ngữ cảnh bằng lịch sử Trong mã, hai lệnh `messages.append()` giữ câu trả lời
của assistant và thêm câu hỏi mới trước lần POST tiếp theo. Bạn có thể đổi mã thành `TRE-19`, chạy lại và kiểm tra xem lượt hai có trả đúng mã mới hay không.
Chi phí, giới hạn ngữ cảnh và cách xử lý yêu cầu thất bại
Tiền API và ngân sách ngữ cảnh Gói ChatGPT Plus không bao gồm phí sử dụng API OpenAI. Chúng tôi chưa xác minh bảng giá hiện hành, nên không nêu đơn giá. Trước khi chạy script hàng loạt, bạn cần đối chiếu model với mục API Pricing
của OpenAI, gồm giá token đầu vào và đầu ra. Với `messages`, lịch sử gửi kèm cũng chiếm ngữ cảnh và làm tăng lượng token đầu vào. Cuộc chat chứa nguyên văn tài liệu giao hàng qua nhiều lượt có thể gửi lại cùng nội dung nhiều lần. Chỉ giữ phần còn cần; kiểm tra cửa sổ ngữ cảnh của model trước khi gửi tài liệu dài.
Đọc lỗi trước khi thử lại Dựa vào status và thông báo thực tế
của OpenAI để chọn cách xử lý:
| Tín hiệu | Kiểm tra và hành động |
|---|---|
| HTTP 401 | Kiểm tra API key và thông báo xác thực; sửa cấu hình trước khi gửi lại. |
| HTTP 429 | Đọc thông báo để phân biệt giới hạn tốc độ với vấn đề quota hoặc thanh toán. |
| `requests.exceptions.Timeout` | Client đã hết thời gian chờ; chưa đủ căn cứ kết luận server chưa xử lý. |
| HTTP 5xx | Có thể thử lại sau một khoảng chờ nếu thông báo cho thấy lỗi tạm thời. |
Hai tình huống tại Việt Nam: Trả lời khách và soạn nội dung bán hàng
Tình huống giả lập: Shop trả lời khách hỏi giao hàng Đầu vào: Bạn đưa vào `messages` chính sách mẫu
của shop: “Phí giao hàng được xác nhận
sau khi có địa chỉ; chưa có thời hạn giao cụ thể”. Khách hỏi: “Gửi về Đà Nẵng thì mai nhận được không?” Yêu cầu: Chỉ dùng chính sách đã cung cấp để viết bản nháp. Nếu thiếu địa chỉ, hỏi thêm; không tự điền phí vận chuyển hoặc hứa ngày nhận. Đầu ra minh họa: “Bạn cho shop xin địa chỉ nhận hàng cụ thể nhé. Shop cần địa chỉ để kiểm tra phí giao hàng; hiện chưa thể xác nhận bạn có nhận được vào ngày mai hay không.” Tiêu chí duyệt: Bạn kiểm tra câu trả lời có hỏi địa chỉ, giữ giọng lịch sự và tránh hứa “chắc chắn mai tới”. Nếu nhân viên chưa kiểm tra được lịch giao, bản nháp phải giữ nguyên sự chưa chắc chắn đó.
Tình huống giả lập: Marketer soạn bài bán hàng Đầu vào: Bạn cung cấp dữ liệu sản phẩm giả lập: “Túi vải canvas màu be, kích thước 35 × 40 cm, giá 129.000 đồng”. Không có thông tin về tải trọng hoặc khả năng chống nước. Yêu cầu: Viết bài đăng tiếng Việt, xưng “bạn”, kết bằng lời mời nhắn tin. Chỉ sử dụng dữ liệu đầu vào; không thêm công dụng, khuyến mãi hay nhận xét
của khách. Đầu ra minh họa: “Bạn đang tìm túi vải màu be? Mẫu túi canvas kích thước 35 × 40 cm có giá 129.000 đồng. Nhắn shop nếu bạn muốn hỏi thêm về sản phẩm nhé.” Tiêu chí duyệt: Đối chiếu giá, kích thước và chất liệu với dữ liệu gốc. Xóa những câu như “chống nước tốt” hoặc “đựng laptop an toàn” nếu xuất hiện; đồng thời kiểm tra cách xưng hô có phù hợp với trang bán hàng của bạn không.
Gọi endpoint chat RevidAPI bằng Python với cấu hình tách riêng
Khi chuyển script sang RevidAPI, bạn cần thay URL, khóa và model cùng nhau. Trước tiên, mở dashboard RevidAPI để kiểm tra khóa và quyền truy cập model; khóa OpenAI đang dùng trong script cũ không thay thế cho khóa của dịch vụ này.
Chốt cấu hình trước khi gửi Theo dữ liệu API trong brief, endpoint là `POST https://revidapi.com/v1/chat/completions`, xác thực bằng header `x-api-key`. Body nhận `model` và `messages`; `claude-sonnet-5` là model ID
được cung cấp làm mẫu, không phải model ChatGPT
của OpenAI. Bạn cần kiểm tra model còn khả dụng cho tài khoản trước khi chạy. Đặt các biến môi trường sau trong môi trường chạy script. Hai biến JSON chứa cấu trúc yêu cầu; khóa và model được nạp riêng trong mã: – `REVID_CHAT_ENDPOINT`: `https://revidapi.com/v1/chat/completions`
- `REVID_API_KEY`: khóa lấy từ dashboard.
- `REVID_MODEL`: model ID đã kiểm tra quyền truy cập.
- `REVID_HEADERS_JSON`: `{“Content-Type”:”application/json”}`
- `REVID_BODY_JSON`: `{“messages”:[{“role”:”user”,”content”:”Xin chào”}]}`
- `REVID_TIMEOUT_SECONDS`: `30`, ngưỡng chờ do bạn đặt, không phải giới hạn hãng công bố.
Gửi HTTP bằng cấu hình riêng Mẫu minh họa, chưa chạy thử này dùng thư viện `requests` đã cài ở phần thực hành:
import json
import os
import requests headers = json.loads(os.environ["REVID_HEADERS_JSON"])
headers["x-api-key"] = os.environ["REVID_API_KEY"]
body = json.loads(os.environ["REVID_BODY_JSON"])
body["model"] = os.environ["REVID_MODEL"] response = requests.post( os.environ["REVID_CHAT_ENDPOINT"], headers=headers, json=body, timeout=float(os.environ["REVID_TIMEOUT_SECONDS"]),
)
response.raise_for_status()
print(response.json())
import json
import os
import requests headers = json.loads(os.environ["REVID_HEADERS_JSON"])
headers["x-api-key"] = os.environ["REVID_API_KEY"]
body = json.loads(os.environ["REVID_BODY_JSON"])
body["model"] = os.environ["REVID_MODEL"] response = requests.post( os.environ["REVID_CHAT_ENDPOINT"], headers=headers, json=body, timeout=float(os.environ["REVID_TIMEOUT_SECONDS"]),
)
response.raise_for_status()
print(response.json())Brief cung cấp mẫu đọc nội dung qua `choices[0].message.content`. Với HTTP JSON, đường dẫn tương ứng là `data[“choices”][0][“message”][“content”]`; hãy đối chiếu JSON thực nhận trước khi đưa đường dẫn này vào ứng dụng. Chúng tôi chưa kiểm thử phản hồi trực tiếp. Tách cấu hình như trên cho phép đổi `REVID_MODEL` mà không sửa hàm gửi HTTP. Chỉ chuyển sang n8n khi cần nối nhiều bước, chẳng hạn nhận webhook, gọi chat rồi lưu bản nháp vào bảng dữ liệu; một lần gọi từ script chưa cần thêm công cụ.
Câu hỏi thường gặp khi gọi API ChatGPT bằng Python
Cần chuẩn bị gì để gọi API ChatGPT bằng Python?
Bạn cần Python, API key và quyền truy cập model; xem phần thiết lập môi trường để cấu hình biến môi trường.
Nên dùng Python requests hay thư viện openai?
Dùng `requests` để thực hành theo bài; chọn `openai` nếu muốn dùng SDK. Xem phần gửi yêu cầu đầu tiên để đối chiếu cấu hình.
Có thể gọi RevidAPI bằng Python không?
Có. Bạn có thể dùng `requests` gọi `POST https://revidapi.com/v1/chat/completions` với header `x-api-key`; xem phần tích hợp RevidAPI để cấu hình `model` và `messages`.
Làm sao giữ ngữ cảnh hội thoại khi gọi API?
Bạn gửi lại lịch sử cần thiết trong `messages`, gồm lượt hỏi và trả lời; xem bước thử hội thoại nhiều lượt.
Vì sao yêu cầu API bị lỗi 401 hoặc 429?
401 thường liên quan xác thực; 429 có thể do giới hạn tốc độ hoặc quota. Xem phần xử lý lỗi và thông báo trả về. Chạy một yêu cầu tối thiểu và kiểm tra mã HTTP cùng nội dung phản hồi trước khi mở rộng tích hợp.
Khám phá workflow miễn phí tại AI Tạo ảnh & Video và lấy API key tại API Marketplace RevidAPI.
Khám phá API Marketplace RevidAPI — lấy API key miễn phí · Nhóm Zalo hỗ trợ · revidapi@gmail.com