Chuyển đến nội dung chính

API O3 của OpenAI: Hướng dẫn từng bước kèm ví dụ

Tìm hiểu cách sử dụng API OpenAI O3 để giải quyết bài toán phức tạp nhiều bước với đầu vào hình ảnh và văn bản, đồng thời quản lý chi phí suy luận.
· 8 phút đọc

Khám phá cùng AI

Mô hình o3 của OpenAI có khả năng giải quyết các vấn đề phức tạp nhiều bước, kết hợp đầu vào trực quan và văn bản, và sử dụng các công cụ như Python, tìm kiếm, hoặc kiểm tra hình ảnh để nâng cao câu trả lời.

Trong hướng dẫn này, tôi sẽ giải thích từng bước cách sử dụng o3 qua API, điều gì khiến o3 khác với các mô hình tổng quát như GPT-4o, và cách quản lý chi phí suy luận hiệu quả.

Chúng tôi luôn cập nhật cho độc giả những tin mới nhất về AI qua The Median, bản tin miễn phí mỗi thứ Sáu tóm lược các câu chuyện chính trong tuần. Đăng ký để nắm bắt thông tin chỉ trong vài phút mỗi tuần:

Khi nào bạn nên dùng O3?

Mô hình o3 của OpenAI được thiết kế cho các tác vụ nâng cao, phức tạp đòi hỏi khả năng suy luận sâu và tính tự chủ cao. Nó đặc biệt hiệu quả trong việc giải quyết vấn đề phức tạp ở các lĩnh vực như phát triển phần mềm, toán học, nghiên cứu khoa học và diễn giải dữ liệu trực quan.

Khả năng tác tử của mô hình cho phép nó tự động sử dụng các công cụ như tìm kiếm web, Python và tạo ảnh, khiến nó lý tưởng cho các tác vụ đòi hỏi phân tích nhiều bước và ra quyết định linh hoạt.

Bạn nên cân nhắc dùng mô hình o3 qua API khi dự án của bạn bao gồm các tác vụ suy luận đa phương thức phức tạp, được hưởng lợi từ mức độ tự chủ cao và kỹ năng phân tích nâng cao của nó.

Hãy xem so sánh nhanh giữa o3, o4-mini và GPT-4o:

o3 so với o4-mini so với gpt-4o

Nguồn: OpenAI

Giá thành cũng là yếu tố quan trọng cần cân nhắc khi sử dụng API:

giá o3 so với o4 mini và gpt-4o

Nguồn: OpenAI

API OpenAI O3: Cách kết nối với API của OpenAI

Trước khi bắt đầu dùng khả năng suy luận nâng cao của o3, bạn cần thiết lập quyền truy cập API của OpenAI. Ở phần này, tôi sẽ hướng dẫn bạn:

  • Thiết lập khóa API một cách an toàn
  • Thực hiện cuộc gọi API đầu tiên tới mô hình o3
  • Nêu bật các khác biệt quan trọng khi thiết lập cho mô hình suy luận

Bước 1: Lấy thông tin xác thực API

Để truy cập API OpenAI, bạn cần một khóa API hợp lệ, có thể lấy từ trang OpenAI API Keys, và đảm bảo đã bật thanh toán.

Lưu ý: Để dùng o3, trước tiên bạn phải xác minh tổ chức OpenAI của mình tại đây. Quá trình xác minh có thể mất tới 15 phút để kích hoạt.

Bước 2: Import thư viện openai

Chúng ta bắt đầu bằng cách cài đặt và nâng cấp thư viện openai để truy cập mô hình O3 qua API. Chạy lệnh sau:

pip install --upgrade openai

Sau khi cài đặt, chúng ta import lớp OpenAI từ thư viện openai:

from openai import OpenAI

Bước 3: Khởi tạo đối tượng client

Để tương tác với API của OpenAI, chúng ta xác thực bằng cách đặt khóa API bí mật, cho phép gửi yêu cầu đã được ủy quyền tới các mô hình như o3.

client = OpenAI(api_key=YOUR_API_KEY)

Bước 4: Gọi API

Sau khi hoàn tất thiết lập, hãy thực hiện cuộc gọi API đầu tiên tới o3 và xem cách nó xử lý một tác vụ suy luận nhiều bước đơn giản qua Responses API.

Ví dụ 1: Prompt đơn giản, không dùng công cụ

Hãy tìm hiểu cuộc gọi API o3 với một ví dụ prompt đơn giản.

response = client.responses.create(
    model="o3",
    input=[{"role": "user", "content": "What’s the difference between inductive and deductive reasoning?"}]
)
print(response.output_text)

Ví dụ này gửi một câu hỏi ngôn ngữ tự nhiên trực tiếp tới mô hình o3 mà không sử dụng bất kỳ công cụ hay tham số suy luận đặc biệt nào.

  • model="o3" cho API biết sử dụng mô hình suy luận o3.
  • input=[{"role": "user", "content": "..."}] định nghĩa một tin nhắn của người dùng yêu cầu giải thích khái niệm.
  • O3 mặc định nội bộ sử dụng chuỗi suy luận ở mức nỗ lực trung bình trước khi tạo đầu ra cuối.

đầu ra o3 qua API

Đây là các token sẽ được tính vào chi phí cuối cùng:

  • Token đầu vào: Prompt
  • Token suy luận: chuỗi suy nghĩ nội bộ của o3
  • Token đầu ra: Kết quả cuối

Ví dụ 2: Giải bài toán mã và toán học

Trong ví dụ này, chúng ta yêu cầu o3 vừa viết mã vừa giải thích phần toán đằng sau việc giải phương trình bậc hai. Đây là nhiệm vụ gồm hai phần, không chỉ viết code mà còn giải thích toán học chi tiết.

prompt = "Write a Python function that solves quadratic equations and also explain the math behind it."
response = client.responses.create(
    model="o3",
    reasoning={"effort": "high"},
    input=[{"role": "user", "content": prompt}]
)
print(response.output_text)

Tác vụ này yêu cầu suy luận toán học nhiều bước: đầu tiên giải công thức bậc hai, sau đó giải thích cách suy ra. Tham số reasoning={"effort": "high"} buộc o3 "suy nghĩ kỹ hơn", tạo chuỗi suy luận lớn hơn. Điều này phù hợp cho các tác vụ cần chiều sâu kỹ thuật hoặc lời giải nhiều giai đoạn.

Lưu ý về chi phí: Mức nỗ lực suy luận cao hơn đồng nghĩa với nhiều token suy luận hơn, dẫn đến chi phí đầu ra cao hơn.

đầu ra o3 qua API

đầu ra api o3

Giải bài toán Code + Toán

đầu ra api o3

Ví dụ 3: Nhiệm vụ refactor mã

Trong ví dụ này, chúng ta đưa vào O3 một nhiệm vụ refactor mã kèm một loạt hướng dẫn.

prompt = """
Instructions:
- Given the React component below, change it so that nonfiction books have red
  text. 
- Return only the code in your reply
- Do not include any additional formatting, such as markdown code blocks
- For formatting, use four space tabs, and do not allow any lines of code to 
  exceed 80 columns
const books = [
  { title: 'Dune', category: 'fiction', id: 1 },
  { title: 'Frankenstein', category: 'fiction', id: 2 },
  { title: 'Moneyball', category: 'nonfiction', id: 3 },
];
export default function BookList() {
  const listItems = books.map(book =>
    <li>
      {book.title}
    </li>
  );
  return (
    <ul>{listItems}</ul>
  );
}
"""
response = client.responses.create(
    model="o3",
    reasoning={"effort": "medium", "summary": "detailed"},
    input=[
        {
            "role": "user",
            "content": prompt,
        }
    ]
)
print(response.output_text)

Trong đoạn mã trên, chúng ta chuyển cho O3 một nhiệm vụ chỉnh sửa mã rất có cấu trúc với các quy tắc định dạng chi tiết.

  • Tham số reasoning={"effort": "medium"} yêu cầu mô hình suy luận cẩn trọng nhưng hiệu quả.
  • Tham số summary="detailed" yêu cầu bản tóm tắt nội bộ đầy đủ về quá trình suy nghĩ của mô hình. O3 sẽ suy luận nội bộ và tùy chọn trả về dấu vết đã tóm tắt nếu bạn kiểm tra trường summary sau đó.

Mẹo: Có một vài thiết lập tóm tắt có sẵn mà bạn có thể dùng, như "concise", "detailed" hoặc "auto".

đầu ra api o3 Nhiệm vụ Refactoring Code

Ví dụ 4: Suy luận thị giác

Hãy dùng bức ảnh hội nghị này và yêu cầu o3 tạo lịch trình dựa trên mối quan tâm của chúng ta.

Suy luận thị giác (ảnh đầu vào)

Bước 4.1: Hàm trợ giúp

Hãy bắt đầu bằng cách import các thư viện cần thiết và viết một hàm trợ giúp:

import base64, mimetypes, pathlib
def to_data_url(path: str) -> str:
    mime = mimetypes.guess_type(path)[0] or "application/octet-stream"
    data = pathlib.Path(path).read_bytes()
    b64  = base64.b64encode(data).decode()
    return f"data:{mime};base64,{b64}"

Hàm to_data_url() chuyển đổi tệp ảnh cục bộ thành data URL được mã hóa base64, điều này cần thiết vì API của OpenAI mong đợi đầu vào hình ảnh ở dạng URL thay vì tệp thô.

Hàm to_data_url thực hiện những việc sau:

  • Đọc tệp ảnh (đường dẫn) từ máy của bạn.
  • Suy ra loại tệp (ví dụ, image/png).
  • Sau đó mã hóa nội dung nhị phân thành chuỗi base64.
  • Cuối cùng trả về một data URL

Bước 4.2: Gửi cả văn bản và hình ảnh tới O3

Sau khi mã hóa hình ảnh, chúng ta truyền cả văn bản và thông tin ảnh đã mã hóa cho O3.

prompt = (
    "Create a schedule using this blurry conference photo. "
    "Ensure 10-minute gaps between talks and include all talks related to LLMs."
)
image_path   = "IMAGE_PATH"
image_url    = to_data_url(image_path)        
response = client.chat.completions.create(
    model="o3",                                  
    messages=[
        {
            "role": "user",
            "content": [
                { "type": "text",      "text": prompt },
                { "type": "image_url", "image_url": { "url": image_url } }
            ],
        }
    ],
)
print(response.choices[0].message.content)

Cách hoạt động như sau:

  • Chúng ta bắt đầu bằng cách gọi client.chat.completions.create(), trong đó nội dung đầu vào là một danh sách bao gồm cả:
    • hướng dẫn văn bản (yêu cầu lập lịch của người dùng),
    • và dữ liệu hình ảnh (ảnh hội nghị).
    • Mô hình o3 xử lý đồng thời cả hai đầu vào trong chuỗi suy nghĩ nội bộ.
  • Cuối cùng, chúng ta in response.choices[0].message.content, chứa lịch trình mà mô hình tạo ra sau khi suy luận dựa trên hướng dẫn văn bản và dữ liệu trực quan.

Những lưu ý quan trọng về chi phí:

  • Đầu vào hình ảnh được tính như token đầu vào.
  • Mô hình sử dụng kiểm tra hình ảnh bên trong vòng lặp suy luận.
  • Nếu chuỗi suy luận dài, chúng ta nên quản lý chi phí cẩn thận với tham số max_completion_tokens, sẽ được đề cập ở phần tiếp theo.

Hãy xem kết quả:

o3 api Suy luận thị giác (Đầu ra)

o3 api Suy luận thị giác (Đầu ra)

Quản lý chi phí với token suy luận

O3 sử dụng token suy luận ngoài các token đầu vào/đầu ra thông thường, nghĩa là số token nhiều hơn so với chỉ đầu vào/đầu ra, do đó chi phí đầu ra cao hơn. Dựa trên ví dụ trước, hãy phân tích cách token suy luận ảnh hưởng đến chi phí.

print(response.usage)
CompletionUsage(completion_tokens=3029,prompt_tokens=1007, total_tokens=4036, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=2112, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0))

Nếu bạn muốn kiểm soát chi phí, hãy áp dụng tham số max_completion_tokens để giới hạn tổng mức sử dụng:

limit_token_response = client.chat.completions.create(
    model="o3",                                  
    messages=[
        {
            "role": "user",
            "content": [
                { "type": "text",      "text": prompt },
                { "type": "image_url", "image_url": { "url": image_url } }
            ],
        }
    ],
    max_completion_tokens=3000,
)
print(limit_token_response.usage)
CompletionUsage(completion_tokens=2746, prompt_tokens=1007, total_tokens=3753, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=2112, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0))

Từ kết quả trên, có thể thấy việc đặt giá trị max_completion_tokens rất quan trọng trong việc điều khiển hành vi của mô hình. Bằng cách giới hạn số token tối đa được tạo ra, chúng ta ngăn o3 sinh đầu ra quá dài không cần thiết hoặc tiêu tốn quá nhiều token suy luận, giúp tối ưu chi phí API tổng thể. Điều này đặc biệt quan trọng với các tác vụ phức tạp, nơi suy luận nội bộ có thể chiếm ưu thế về token mà không mang lại đầu ra tương xứng cho người dùng.

Quan trọng: Khi dùng o3 cho các tác vụ thị giác phức tạp, luôn đặt max_completion_tokens ở mức cao một cách thận trọng. Nếu giới hạn token quá thấp, mô hình có thể dùng hết token cho suy luận nội bộ và không trả về đầu ra hiển thị.

Thực hành nhắc lệnh (prompt) tốt nhất với O3

Mô hình O3 hoạt động khác so với các mô hình tổng quát như GPT-4o hoặc Claude 3.5 Sonnet, bởi o3 tiến hành chuỗi suy nghĩ sâu bên trong. Nó hoạt động tốt nhất với các prompt thẳng trọng tâm theo mục tiêu; tức là, mô tả quá chi tiết các bước có thể làm giảm hiệu suất.

Dưới đây là một số thực hành tốt nhất do OpenAI khuyến nghị khi nhắc lệnh cho o3:

  • Giữ prompt ngắn gọn, rõ ràng: O3 phát huy tốt với chỉ dẫn trực tiếp mà không cần giải thích rườm rà.
  • Tránh nhắc lệnh kiểu chain-of-thought: Không cần yêu cầu O3 "nghĩ từng bước"—nó đã suy luận nội bộ.
  • Dùng dấu phân tách để rõ ràng: Dùng dấu nháy ba, thẻ XML, hoặc các ký hiệu phân tách khác để tổ chức các phần đầu vào.
  • Hạn chế ngữ cảnh thừa: Nếu dùng retrieval-augmented generation (RAG), chỉ đưa vào thông tin liên quan nhất để tránh làm mô hình quá tải.

Kết luận

Xuyên suốt bài viết, chúng ta đã học cách kết nối với mô hình O3 của OpenAI qua API, quản lý chi phí token suy luận và xây dựng prompt hiệu quả theo thực hành tốt nhất. Nếu dự án của bạn đòi hỏi khả năng suy luận nâng cao như toán nhiều bước, refactor mã hoặc hiểu thị giác, O3 là lựa chọn phù hợp.

Để tìm hiểu thêm về làm việc với API, tôi gợi ý các blog sau:

Aashi Dutt

Tác giả

Aashi Dutt

Tôi là Chuyên gia Google Developers trong lĩnh vực ML (Gen AI), Chuyên gia Kaggle 3x và Đại sứ Women Techmakers với hơn 3 năm kinh nghiệm trong ngành công nghệ. Tôi đồng sáng lập một startup công nghệ y tế vào năm 2020 và hiện đang theo học thạc sĩ khoa học máy tính tại Georgia Tech, chuyên sâu về học máy.

Chủ đề

Liên quan