Chuyển đến nội dung chính
Hướng dẫn AI

Hướng dẫn sử dụng ChatGPT2API: Xây dựng API tạo và chỉnh sửa hình ảnh tương thích với OpenAI

Bài viết này giới thiệu các tính năng cốt lõi của ChatGPT2API, cách triển khai bằng Docker và phát triển cục bộ, đồng thời minh họa qua các ví dụ curl về tạo hình ảnh, chỉnh sửa hình ảnh, bình luận neo và chỉnh sửa nét bút chú thích. Ngoài ra, bài viết còn hướng dẫn cấu hình backend lưu trữ, proxy và nhóm tài khoản.

Hướng dẫn sử dụng ChatGPT2API: Xây dựng API tạo và chỉnh sửa hình ảnh tương thích với OpenAI

Giới thiệu dự án và lưu ý khi sử dụng

ChatGPT2API là một dự án nghiên cứu ngược và đóng gói các khả năng liên quan đến trang web chính thức của ChatGPT, cung cấp API và proxy tương thích với OpenAI cho các tình huống tạo ảnh, chỉnh sửa ảnh và chỉnh sửa ảnh ghép nhiều hình. Dự án cũng tích hợp một xưởng vẽ trực tuyến, quản lý nhóm tài khoản, nhiều phương thức nhập tài khoản và khả năng tự lưu trữ, triển khai bằng Docker.

Lưu ý quan trọng: README của dự án nêu rõ rằng dự án chỉ dành cho mục đích học tập cá nhân, nghiên cứu kỹ thuật và trao đổi kỹ thuật phi thương mại. Không sử dụng cho mục đích thương mại, thao tác hàng loạt, lạm dụng tự động hóa, gọi API quy mô lớn hoặc bất kỳ hành vi nào vi phạm điều khoản dịch vụ của OpenAI và pháp luật địa phương. Khi kiểm thử, cũng không nên sử dụng tài khoản quan trọng, tài khoản thường dùng hoặc tài khoản có giá trị cao.

Dự án liên quan đến việc nghiên cứu ngược các API của trang web chính thức, vì vậy trong quá trình sử dụng có thể phát sinh rủi ro tài khoản bị hạn chế, cấm tạm thời hoặc cấm vĩnh viễn. Hãy chắc chắn rằng bạn hiểu và chấp nhận các rủi ro liên quan trước khi sử dụng.

Giao diện xưởng vẽ hình ảnh ChatGPT2API

Tính năng chính

API tương thích với OpenAI

  • Tương thích với API tạo ảnh POST /v1/images/generations.
  • Tương thích với API chỉnh sửa ảnh POST /v1/images/edits.
  • Cung cấp các API tương thích POST /v1/chat/completions và POST /v1/responses dành cho các tác vụ hình ảnh.
  • Cung cấp danh sách các mô hình hình ảnh và mô hình liên quan thông qua GET /v1/models.
  • Hỗ trợ sử dụng tham số n để trả về nhiều kết quả tạo ảnh; giới hạn hiện tại của backend là từ 1 đến 4 ảnh.
  • Hỗ trợ tạo tệp PPT và PSD có thể chỉnh sửa.

Vẽ và chỉnh sửa trực tuyến

Xưởng vẽ tích hợp hỗ trợ tạo ảnh từ văn bản, chỉnh sửa bằng ảnh tham chiếu và chỉnh sửa ảnh ghép nhiều hình. Có thể chọn gpt-image-2, codex-gpt-image-2, auto cùng các bí danh mô hình GPT được liệt kê trong README. Frontend cũng cung cấp lịch sử phiên làm việc với ảnh, lưu cục bộ, xóa và xóa toàn bộ, bộ nhớ đệm URL ảnh phía máy chủ, theo dõi tiến trình tạo, tải lười và ghi nhớ vị trí cuộn.

Quản lý nhóm tài khoản

Nhóm tài khoản có thể làm mới không đồng bộ email, loại tài khoản, hạn mức và thời gian khôi phục; đồng thời luân phiên các tài khoản khả dụng để thực hiện việc tạo và chỉnh sửa ảnh. Khi gặp lỗi liên quan đến Token hết hiệu lực, hệ thống có thể tự động loại bỏ Token không hợp lệ. Đối với tài khoản bị giới hạn tốc độ, hệ thống cũng hỗ trợ kiểm tra định kỳ, đăng nhập lại bằng mật khẩu và tự động khôi phục.

Dự án hỗ trợ proxy HTTP, HTTPS, SOCKS5, SOCKS5H, cũng như môi trường chạy proxy ổn định kết hợp WARP, Privoxy và FlareSolverr. Các phương thức nhập tài khoản gồm CPA JSON cục bộ, máy chủ CPA từ xa, máy chủ sub2api và access_token.

Giao diện quản lý nhóm tài khoản ChatGPT2API

Triển khai nhanh bằng Docker

1. Lấy dự án và khởi động dịch vụ

Khuyến nghị sử dụng Docker Compose để khởi động toàn bộ dịch vụ trước. Thực thi các lệnh sau để sao chép dự án và chạy ở chế độ nền:

git clone https://github.com/iamdurant/chatgpt2api-personal.git chatgpt2api
cd chatgpt2api
docker compose pull
docker compose up -d

Trước khi khởi động, cần thiết lập auth-key trong config.json. Bạn cũng có thể sử dụng biến môi trường CHATGPT2API_AUTH_KEY trong docker-compose.yml để ghi đè cấu hình này.

Theo mặc định, địa chỉ bảng điều khiển Web là http://localhost:3000, địa chỉ cơ sở API là http://localhost:3000/v1, và dữ liệu được lưu trong ./data thuộc thư mục dự án. Một số ví dụ curl trong README sử dụng localhost:8000; khi gọi thực tế, hãy điều chỉnh cổng theo ánh xạ cổng Compose của bạn.

2. Truy cập bảng điều khiển Web

Sau khi dịch vụ khởi động, mở http://localhost:3000 trong trình duyệt. Khi sử dụng lần đầu, trước tiên hãy hoàn tất các cấu hình cần thiết như khóa ủy quyền, tài khoản và proxy, sau đó kiểm tra chức năng tạo hoặc chỉnh sửa ảnh thông qua xưởng vẽ.

3. Cập nhật dịch vụ

Khi cập nhật image về sau, có thể thực thi:

docker compose pull
docker compose up -d

Bật proxy ổn định WARP và FlareSolverr

Nếu các yêu cầu hình ảnh thường xuyên bị Cloudflare chặn, bạn có thể sử dụng phương án triển khai WARP, Privoxy và FlareSolverr đi kèm dự án:

cp .env.example .env
docker compose -f docker-compose.warp.yml pull
docker compose -f docker-compose.warp.yml up -d

Cấu hình Compose này sẽ khởi động các dịch vụ sau:

  • warp-proxy: cung cấp đầu ra WARP SOCKS5.
  • privoxy: chuyển đổi WARP SOCKS5 thành proxy HTTP.
  • flaresolverr: làm mới Cloudflare clearance.
  • init-config: ghi cấu hình mặc định proxy_runtime theo cách có thể lặp lại an toàn.
  • app: chạy dịch vụ chính ChatGPT2API.

Theo mặc định, chỉ các yêu cầu đến OpenAI hoặc ChatGPT ở phía upstream mới sử dụng proxy ổn định; các luồng hỗ trợ như email tài khoản và CPA sẽ không bị bắt buộc chuyển qua proxy. Thứ tự ưu tiên proxy là: proxy được cấu hình riêng cho tài khoản, môi trường chạy proxy ổn định, proxy chỉ định rõ ràng, proxy toàn cục phiên bản cũ. Bạn có thể điều chỉnh cổng và tham số runtime trong .env, đồng thời kiểm tra proxy và clearance trên trang cài đặt后台.

Môi trường phát triển cục bộ

Khởi động backend

README của dự án sử dụng uv để quản lý các dependency Python. Thực thi các lệnh sau để khởi động backend:

git clone https://github.com/iamdurant/chatgpt2api-personal.git chatgpt2api
cd chatgpt2api
uv sync
uv run main.py

Khởi động frontend

Sau khi vào thư mục Web, sử dụng Bun để cài đặt dependency và khởi động máy chủ phát triển:

cd chatgpt2api/web
bun install
bun run dev

Cấu hình backend lưu trữ

Dự án chọn phương thức lưu trữ thông qua biến môi trường STORAGE_BACKEND:

  • json: tệp JSON cục bộ, là phương thức mặc định.
  • sqlite: cơ sở dữ liệu SQLite cục bộ.
  • postgres: PostgreSQL bên ngoài, cần thiết lập DATABASE_URL.
  • git: kho Git riêng tư, cần thiết lập GIT_REPO_URL và GIT_TOKEN.

Ví dụ, khi sử dụng PostgreSQL, có thể thêm các biến sau vào môi trường Compose:

environment:
  - STORAGE_BACKEND=postgres
  - DATABASE_URL=postgresql://user:password@host:5432/dbname

Gọi API tạo ảnh

Tất cả API AI đều cần kèm theo header yêu cầu ủy quyền sau:

Authorization: Bearer <auth-key>

Trước tiên gọi API danh sách mô hình để xem các mô hình hiện đang được cung cấp:

curl http://localhost:8000/v1/models \
  -H "Authorization: Bearer <auth-key>"

Để tạo ảnh từ văn bản, sử dụng POST /v1/images/generations. Ví dụ dưới đây sẽ tạo một chú mèo đang lơ lửng trong không gian:

curl http://localhost:8000/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <auth-key>" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Một chú mèo đang lơ lửng trong không gian",
    "n": 1,
    "response_format": "b64_json"
  }'

model phải sử dụng một giá trị khả dụng được trả về bởi /v1/models; README khuyến nghị dùng gpt-image-2 để tạo ảnh. Có thể thiết lập số lượng ảnh tạo bằng n, nhưng backend hiện giới hạn từ 1 đến 4; ví dụ response_format sử dụng b64_json.

Gọi API chỉnh sửa ảnh

Tải ảnh cục bộ qua multipart

API chỉnh sửa ảnh hỗ trợ tải tệp cục bộ lên và mô tả nội dung cần thay đổi bằng prompt:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -F "model=gpt-image-2" \
  -F "prompt=Chuyển ảnh này sang phong cách cảnh đêm cyberpunk" \
  -F "n=1" \
  -F "image=@./input.png"

Chỉnh sửa qua URL ảnh

Cũng có thể truyền URL ảnh theo định dạng JSON:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Chuyển ảnh này sang phong cách cảnh đêm cyberpunk",
    "images": [
      {"image_url": "https://example.com/input.png"}
    ]
  }'

Chỉnh sửa khu vực được chỉ định bằng neo bình luận

Thông qua mảng comments, có thể mô phỏng cách chỉnh sửa ảnh bằng bình luận trên phiên bản Web. x và y hỗ trợ giá trị chuẩn hóa từ 0 đến 1, chuỗi phần trăm hoặc giá trị từ 0 đến 100:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Giữ nguyên mọi phần còn lại",
    "images": [
      {"image_url": "https://example.com/input.png"}
    ],
    "comments": [
      {"x": "27.5%", "y": "70%", "text": "Thay ấm trà sứ men xanh bằng ấm trà sứ trắng viền vàng"},
      {"x": 0.36, "y": 0.315, "text": "Cài thêm một trâm vàng lên búi tóc"}
    ]
  }'

Khi yêu cầu có comments, có thể bỏ qua prompt. Mỗi bình luận cũng có thể sử dụng image_index để chỉ định ảnh đầu vào tương ứng, mặc định là 0.

Chỉnh sửa bằng nét vẽ đánh dấu

Dự án cũng hỗ trợ bút đánh dấu trên phiên bản web. Khi sử dụng markup_strokes, points là đường gấp khúc tọa độ chuẩn hóa, color mặc định là #FF3B30, còn width là tỷ lệ độ rộng nét so với cạnh ngắn của ảnh:

curl http://localhost:8000/v1/images/edits \
  -H "Authorization: Bearer <auth-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Thay biển hiệu neon trong vòng tròn bằng màu xanh lá",
    "images": [
      {"image_url": "https://example.com/input.png"}
    ],
    "markup_strokes": [
      {
        "points": [[0.62, 0.18], [0.78, 0.22], [0.75, 0.42], [0.6, 0.38], [0.62, 0.18]],
        "color": "#FF3B30",
        "width": 0.01
      }
    ]
  }'

Nếu đã có PNG nét vẽ trong suốt cùng tỷ lệ với ảnh gốc, bạn cũng có thể tải tệp markup lên bằng multipart. Dự án sẽ căn chỉnh và ghép nét vẽ với ảnh đầu vào trước khi thực hiện chỉnh sửa.

Sử dụng giao diện tương thích Chat Completions và Responses

Chat Completions

POST /v1/chat/completions cung cấp khả năng tương thích cho các trường hợp văn bản, tìm kiếm trên web và hình ảnh, nhưng README đặc biệt lưu ý rằng đây không phải tác nhân trò chuyện đa năng hoàn chỉnh. Ví dụ tạo ảnh:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <auth-key>" \
  -d '{
    "model": "gpt-image-2",
    "messages": [
      {
        "role": "user",
        "content": "Tạo một chú mèo cyberpunk trên đường phố Tokyo trong đêm mưa"
      }
    ],
    "n": 1
  }'

Trường messages của giao diện này có thể chứa nội dung yêu cầu văn bản, tìm kiếm và hình ảnh; tools hỗ trợ các công cụ tìm kiếm trên web được liệt kê trong README, còn stream trong các trường hợp văn bản, tìm kiếm và hình ảnh vẫn đang ở trạng thái thử nghiệm.

Responses API

POST /v1/responses hỗ trợ logic tương thích cho lệnh gọi công cụ tạo ảnh và tìm kiếm trên web, đồng thời cũng không phải proxy Responses API đa năng hoàn chỉnh:

curl http://localhost:8000/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <auth-key>" \
  -d '{
    "model": "gpt-5",
    "input": "Tạo một hình ảnh đường chân trời thành phố mang phong cách tương lai",
    "tools": [
      {
        "type": "image_generation"
      }
    ]
  }'

Trong đó, tools hỗ trợ image_generation, web_search, web_search_preview và web_search_preview_2025_03_11. Phản hồi dạng luồng đã được triển khai nhưng vẫn đang trong giai đoạn thử nghiệm.

Gợi ý sử dụng nâng cao

  1. Xác minh quyền truy cập và danh sách mô hình trước: Sau khi triển khai, trước tiên hãy gọi /v1/models để xác nhận auth-key và cấu hình cổng chính xác, rồi mới thực hiện yêu cầu hình ảnh.
  2. Lựa chọn backend lưu trữ hợp lý: Khi thử nghiệm cá nhân, có thể sử dụng JSON hoặc SQLite mặc định; chỉ cấu hình PostgreSQL khi cần cơ sở dữ liệu bên ngoài và bảo vệ chuỗi kết nối cẩn thận.
  3. Xử lý việc Cloudflare chặn truy cập: Khi độ ổn định của yêu cầu đến máy chủ upstream kém, ưu tiên cấu hình proxy ổn định theo phương án WARP Compose do dự án cung cấp, sau đó kiểm tra proxy và clearance trong giao diện quản trị.
  4. Kiểm soát rủi ro của nhóm tài khoản: Thường xuyên dọn dẹp Token không còn hiệu lực, sử dụng chức năng tìm kiếm, lọc và làm mới hàng loạt để duy trì trạng thái tài khoản, tránh thực hiện các thao tác hàng loạt hoặc lạm dụng bị README cấm.
  5. Phân biệt bí danh mô hình: codex-gpt-image-2 được dùng cho trường hợp vẽ ảnh bằng Codex và chỉ khả dụng với gói Plus, Team, Pro; mô hình khả dụng cụ thể phải căn cứ vào kết quả trả về từ /v1/models.
  6. Lưu ý ranh giới giao diện: Chat Completions và Responses chủ yếu hướng đến các trường hợp văn bản, tìm kiếm và hình ảnh được nêu trong README, không nên sử dụng chúng như proxy đa năng hoàn chỉnh.

Tóm tắt

ChatGPT2API đóng gói các khả năng hình ảnh liên quan đến phiên bản web ChatGPT thành giao diện theo phong cách OpenAI, đồng thời cung cấp workspace trực tuyến, tính năng nâng cao cho chỉnh sửa ảnh, nhóm tài khoản, runtime proxy và nhiều phương thức triển khai. Bạn có thể bắt đầu bằng cách triển khai cơ bản với Docker, sau đó cấu hình backend lưu trữ, proxy ổn định và nhập tài khoản theo nhu cầu, cuối cùng kết nối quy trình tạo và chỉnh sửa ảnh thông qua /v1/images/generations và /v1/images/edits. Khi sử dụng, hãy tuân thủ tuyên bố miễn trừ trách nhiệm của dự án, điều khoản dịch vụ của máy chủ upstream và luật pháp địa phương.