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

Sử dụng GPT-3.5 và GPT-4 qua OpenAI API trong Python

Trong hướng dẫn này, bạn sẽ học cách làm việc với gói OpenAI Python để lập trình trò chuyện với ChatGPT.
Đã cập nhật 5 thg 10, 2026  · 14 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

ChatGPT là một mô hình ngôn ngữ lớn tiên tiến để tạo văn bản. Nó đã thay đổi cách chúng ta viết hầu như mọi loại nội dung, từ những hướng dẫn như bài này, đến mô tả sản phẩm tự động, kết quả của công cụ tìm kiếm Bing, và hàng chục trường hợp sử dụng dữ liệu như mô tả trong cheat sheet ChatGPT cho Khoa học Dữ liệu.

Với mục đích tương tác, giao diện web của ChatGPT là lý tưởng. Tuy nhiên, OpenAI (công ty đứng sau ChatGPT) cũng có một giao diện lập trình ứng dụng (API) cho phép bạn tương tác với ChatGPT và các mô hình khác của họ bằng mã.

Trong hướng dẫn này, bạn sẽ học cách làm việc với gói Python openai để lập trình trò chuyện với ChatGPT.

Lưu ý rằng OpenAI tính phí khi sử dụng GPT API. (Đôi khi người dùng mới được cấp tín dụng miễn phí, nhưng ai được cấp và ưu đãi kéo dài bao lâu thì không minh bạch.) Chi phí là $0,002 / 1000 token, trong đó 1000 token tương đương khoảng 750 từ. Chạy toàn bộ ví dụ trong hướng dẫn này một lần sẽ tốn ít hơn 2 xu Mỹ (nhưng nếu bạn chạy lại, mỗi lần đều bị tính phí).

Khi nào nên dùng API thay vì giao diện web?

Ứng dụng web của ChatGPT là một giao diện tuyệt vời cho các mô hình GPT. Tuy nhiên, nếu bạn muốn đưa AI vào một pipeline dữ liệu hoặc phần mềm, API sẽ phù hợp hơn. Một số trường hợp sử dụng khả dĩ cho người làm dữ liệu gồm:

  • Lấy dữ liệu từ cơ sở dữ liệu hoặc API khác, rồi yêu cầu GPT tóm tắt hoặc tạo báo cáo
  • Tích hợp chức năng GPT vào dashboard để tự động cung cấp phần tóm tắt văn bản về kết quả
  • Cung cấp giao diện ngôn ngữ tự nhiên cho data mart của bạn
  • Thực hiện nghiên cứu bằng cách lấy bài báo qua gói scholarly (PyPI, Conda), rồi nhờ GPT tóm tắt kết quả

Thiết lập Tài khoản Nhà phát triển OpenAI

Để dùng API, bạn cần tạo tài khoản nhà phát triển với OpenAI. Bạn sẽ cần sẵn sàng địa chỉ email, số điện thoại và thông tin thẻ ghi nợ hoặc thẻ tín dụng.

Thực hiện các bước sau:

  1. Truy cập trang đăng ký API.
  2. Tạo tài khoản (bạn sẽ cần cung cấp địa chỉ email và số điện thoại).
  3. Đi tới trang API keys.
  4. Tạo một secret key mới.
  5. Lưu lại khóa này. (Nếu làm mất, hãy xóa khóa và tạo khóa mới.)
  6. Đi tới trang Phương thức thanh toán.
  7. Nhấp "Add payment method" và điền thông tin thẻ của bạn.

Lưu trữ Thông tin xác thực Tài khoản một cách An toàn

Secret key cần được giữ bí mật! Nếu không, người khác có thể dùng nó để truy cập API và bạn sẽ phải trả tiền. Các bước sau mô tả cách lưu khóa an toàn trong DataLab, sổ tay dữ liệu có hỗ trợ AI của DataCamp. Nếu bạn dùng nền tảng khác, hãy xem tài liệu của nền tảng đó. Bạn cũng có thể hỏi ChatGPT để được tư vấn. Gợi ý nhắc lệnh như sau:

> Bạn là chuyên gia bảo mật CNTT. Bạn đang nói chuyện với một nhà khoa học dữ liệu. Hãy giải thích các thực hành tốt nhất để lưu trữ an toàn khóa riêng dùng cho truy cập API.

  1. Trong workbook DataLab của bạn, nhấp "Environment"
  2. Nhấp dấu cộng cạnh "Environment"
  3. Trong ô "Name", nhập "OPENAI". Trong ô "Value", dán secret key của bạn
  4. Đặt tên cho bộ biến môi trường (thực ra có thể là bất cứ tên gì)
  5. Nhấp "Create", và kết nối integration mới

Thiết lập Python

Để dùng GPT qua API, bạn cần import các gói Python os và openai.

Nếu bạn dùng giải pháp Jupyter Notebook (như DataLab), việc import một số hàm từ IPython.display cũng hữu ích.

Một ví dụ khác cũng dùng gói yfinance để lấy giá cổ phiếu.

# Import the os package
import os

# Import the openai package
import openai

# From the IPython.display package, import display and Markdown
from IPython.display import display, Markdown

# Import yfinance as yf
import yfinance as yf

Nhiệm vụ thiết lập còn lại là đặt biến môi trường bạn vừa tạo vào nơi mà gói openai có thể thấy.

# Set openai.api_key to the OPENAI environment variable
openai.api_key = os.environ["OPENAI"]

Mẫu mã gọi GPT qua API

Mẫu mã để gọi OpenAI API và nhận phản hồi chat như sau:

response = openai.ChatCompletion.create(
              model="MODEL_NAME",
              messages=[{"role": "system", "content": 'SPECIFY HOW THE AI ASSISTANT SHOULD BEHAVE'},
                        {"role": "user", "content": 'SPECIFY WANT YOU WANT THE AI ASSISTANT TO SAY'}
              ])

Có vài điểm cần làm rõ ở đây.

Tên mô hình GPT trên OpenAI API

Tên mô hình được liệt kê trong trang Tổng quan Mô hình của tài liệu dành cho nhà phát triển. Trong hướng dẫn này, bạn sẽ dùng gpt-3.5-turbo, là mô hình mới nhất mà ChatGPT sử dụng và có quyền truy cập API công khai. (Khi gpt-4 được phát hành rộng rãi, bạn sẽ muốn chuyển sang dùng nó.)

Các loại thông điệp GPT trong OpenAI API

Có ba loại thông điệp được mô tả trong tài liệu Giới thiệu về Chat:

  • Thông điệp system mô tả hành vi của trợ lý AI. Một thông điệp system hữu ích cho các trường hợp khoa học dữ liệu là "Bạn là một trợ lý hữu ích, hiểu biết về khoa học dữ liệu."
  • Thông điệp user mô tả bạn muốn trợ lý AI nói gì. Chúng ta sẽ đề cập các ví dụ về thông điệp user xuyên suốt hướng dẫn này
  • Thông điệp assistant mô tả phản hồi trước đó trong cuộc trò chuyện. Chúng ta sẽ đề cập cách tạo cuộc hội thoại tương tác ở các tác vụ sau

Thông điệp đầu tiên nên là system. Các thông điệp tiếp theo nên luân phiên giữa user và assistant.

Cuộc trò chuyện đầu tiên: Tạo một tập dữ liệu

Tạo tập dữ liệu mẫu hữu ích để kiểm thử mã của bạn với các kịch bản dữ liệu khác nhau hoặc để minh họa mã cho người khác. Để nhận phản hồi hữu ích từ GPT, bạn cần chính xác và chỉ rõ chi tiết tập dữ liệu của mình, gồm:

  • số hàng và cột
  • tên các cột
  • mô tả mỗi cột chứa gì
  • định dạng đầu ra của tập dữ liệu

Dưới đây là ví dụ thông điệp user để tạo một tập dữ liệu.

Create a small dataset about total sales over the last year. 
The format of the dataset should be a data frame with 12 rows and 2 columns. 
The columns should be called "month" and "total_sales_usd". 
The "month" column should contain the shortened forms of month names 
from "Jan" to "Dec". The "total_sales_usd" column should 
contain random numeric values taken from a normal distribution 
with mean 100000 and standard deviation 5000. Provide Python code to 
generate the dataset, then provide the output in the format of a markdown table.

Hãy đưa thông điệp này vào mẫu mã phía trên.

# Define the system message
system_msg = 'You are a helpful assistant who understands data science.'

# Define the user message
user_msg = 'Create a small dataset about total sales over the last year. The format of the dataset should be a data frame with 12 rows and 2 columns. The columns should be called "month" and "total_sales_usd". The "month" column should contain the shortened forms of month names from "Jan" to "Dec". The "total_sales_usd" column should contain random numeric values taken from a normal distribution with mean 100000 and standard deviation 5000. Provide Python code to generate the dataset, then provide the output in the format of a markdown table.'

# Create a dataset using GPT
response = openai.ChatCompletion.create(model="gpt-3.5-turbo",
                                        messages=[{"role": "system", "content": system_msg},
                                         {"role": "user", "content": user_msg}])

Kiểm tra phản hồi từ GPT có ổn không

Gọi API mang tính "rủi ro" vì có thể xảy ra vấn đề ngoài sổ tay của bạn, như lỗi kết nối internet, hoặc máy chủ gửi dữ liệu gặp sự cố, hoặc bạn hết tín dụng API. Bạn nên kiểm tra phản hồi nhận được có ổn không.

Các mô hình GPT trả về mã trạng thái với một trong bốn giá trị, được mô tả trong phần Định dạng phản hồi của tài liệu Chat.

  • stop: API đã trả về đầy đủ đầu ra của mô hình
  • length: Đầu ra mô hình không đầy đủ do tham số max_tokens hoặc giới hạn token
  • content_filter: Nội dung bị lược bỏ do bộ lọc nội dung gắn cờ
  • null: Phản hồi API vẫn đang xử lý hoặc chưa hoàn tất

GPT API gửi dữ liệu tới Python ở định dạng JSON, nên biến response chứa các danh sách và từ điển lồng nhau rất sâu. Làm việc với nó hơi phiền!

Với biến phản hồi tên response, mã trạng thái được lưu ở vị trí sau.

response["choices"][0]["finish_reason"]

Trích xuất thông điệp của trợ lý AI

Ẩn sâu trong biến response là phần văn bản mà chúng ta yêu cầu GPT tạo. May mắn là nó luôn ở cùng một vị trí.

response["choices"][0]["message"]["content"]

Nội dung phản hồi có thể in ra như thường lệ với print(content), nhưng đó là nội dung Markdown, mà Jupyter notebooks có thể render qua display(Markdown(content))

Here's the Python code to generate the dataset:

import numpy as np
import pandas as pd
# Set random seed for reproducibility
np.random.seed(42)
# Generate random sales data
sales_data = np.random.normal(loc=100000, scale=5000, size=12)
# Create month abbreviation list
month_abbr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# Create dataframe
sales_df = pd.DataFrame({'month': month_abbr, 'total_sales_usd': sales_data})
# Print dataframe
print(sales_df)

And here's the output in markdown format:

| month | total_sales_usd |

|-------|----------------|

| Jan | 98728.961189 |

| Feb | 106931.030292 |

| Mar | 101599.514152 |

| Apr | 97644.534384 |

| May | 103013.191014 |

| Jun | 102781.514665 |

| Jul | 100157.741173 |

| Aug | 104849.281004 |

| Sep | 100007.081991 |

| Oct | 94080.272682 |

| Nov | 96240.993328 |

| Dec | 104719.371461 |

Dùng hàm tiện ích để gọi GPT

Bạn cần viết khá nhiều mã lặp lại chỉ để làm ba việc đơn giản này. Có một hàm bọc để ẩn đi phần nhàm chán là hữu ích. Như vậy, chúng ta có thể tập trung vào các trường hợp sử dụng khoa học dữ liệu.

Hy vọng OpenAI sẽ cải thiện giao diện gói Python của họ để những việc như thế này được tích hợp sẵn. Trong lúc chờ đợi, cứ thoải mái dùng đoạn này trong mã của bạn.

Hàm nhận hai đối số.

  • system: Chuỗi chứa thông điệp system.
  • user_assistant: Mảng chuỗi luân phiên thông điệp user rồi đến assistant.

Giá trị trả về là nội dung được tạo.

def chat(system, user_assistant):
  assert isinstance(system, str), "`system` should be a string"
  assert isinstance(user_assistant, list), "`user_assistant` should be a list"
  system_msg = [{"role": "system", "content": system}]
  user_assistant_msgs = [
      {"role": "assistant", "content": user_assistant[i]} if i % 2 else {"role": "user", "content": user_assistant[i]}
      for i in range(len(user_assistant))]

  msgs = system_msg + user_assistant_msgs
  response = openai.ChatCompletion.create(model="gpt-3.5-turbo",
                                          messages=msgs)
  status_code = response["choices"][0]["finish_reason"]
  assert status_code == "stop", f"The status code was {status_code}."
  return response["choices"][0]["message"]["content"]

Ví dụ sử dụng hàm này là

response_fn_test = chat("You are a machine learning expert.",["Explain what a neural network is."])

display(Markdown(response_fn_test))
A neural network is a type of machine learning model that is inspired by the architecture of the human brain. It consists of layers of interconnected processing units, called neurons, that work together to process and analyze data.

Each neuron receives input from other neurons or from external sources, processes that input using a mathematical function, and then produces an output that is passed on to other neurons in the network.

The structure and behavior of a neural network can be adjusted by changing the weights and biases of the connections between neurons. During the training process, the network learns to recognize patterns and make predictions based on the input it receives.

Neural networks are often used for tasks such as image classification, speech recognition, and natural language processing, and have been shown to be highly effective at solving complex problems that are difficult to solve with traditional rule-based programming methods.

Tái sử dụng phản hồi từ trợ lý AI

Trong nhiều tình huống, bạn sẽ muốn tạo một cuộc trò chuyện dài hơn với AI. Tức là, bạn gửi một prompt cho GPT, nhận phản hồi, rồi gửi prompt khác để tiếp tục chat. Khi đó, bạn cần đưa phản hồi trước đó của GPT vào lần gọi API thứ hai để GPT có đầy đủ ngữ cảnh. Điều này sẽ cải thiện độ chính xác của phản hồi và tăng tính nhất quán xuyên suốt cuộc trò chuyện.

Để tái sử dụng thông điệp của GPT, bạn trích xuất nó từ response, rồi truyền vào một lần gọi chat mới.

Ví dụ: Phân tích tập dữ liệu mẫu

Hãy thử tính trung bình của cột doanh số trong tập dữ liệu đã tạo trước đó. Lưu ý rằng vì lần đầu chúng ta không dùng hàm chat(), nên phải dùng đoạn truy cập lồng dài hơn để lấy văn bản phản hồi trước đó. Nếu bạn dùng chat(), mã sẽ đơn giản hơn.

# Assign the content from the response in Task 1 to assistant_msg
assistant_msg = response["choices"][0]["message"]["content"]

# Define a new user message
user_msg2 = 'Using the dataset you just created, write code to calculate the mean of the `total_sales_usd` column. Also include the result of the calculation.'

# Create an array of user and assistant messages
user_assistant_msgs = [user_msg, assistant_msg, user_msg2]

# Get GPT to perform the request
response_calc = chat(system_msg, user_assistant_msgs)

# Display the generated content
display(Markdown(response_calc))
Sure! Here's the code to calculate the mean of the `total_sales_usd` column: 

```python 
mean_sales = sales_df['total_sales_usd'].mean() 
print("Mean sales: $", round(mean_sales, 2)) 
``` 

And here's the output of this code: 

``` 
Mean sales: $ 100077.57 
``` 

Therefore, the mean of total sales over the last year is about $100,077.57. 

Dùng GPT trong một Pipeline

Một ưu điểm lớn của việc dùng API thay vì giao diện web là bạn có thể kết hợp GPT với các API khác. Lấy dữ liệu từ một hoặc nhiều nguồn, rồi áp dụng AI vào đó là một quy trình mạnh mẽ.

Áp dụng GPT cho dữ liệu thời tiết

Ở đây, chúng ta sẽ lấy dự báo thời tiết với gói weather2 (PyPI) và dùng GPT để nghĩ ra ý tưởng hoạt động.

# Import the weather2 package
import weather

# Get the forecast for Miami
location = "Miami"
forecast = weather.forecast(location)

# Pull out forecast data for midday tomorrow
fcast = forecast.tomorrow["12:00"]

# Create a prompt
user_msg_weather = f"In {location} at midday tomorrow, the temperature is forecast to be {fcast.temp}, the wind speed is forecast to be {fcast.wind.speed} m/s, and the amount of precipitation is forecast to be {fcast.precip}. Make a list of suitable leisure activities."

# Call GPT
response_activities = chat("You are a travel guide.", [user_msg_weather])

display(Markdown(response_activities))
With mild temperatures and calm winds, Miami is the perfect place for leisure activities. Here are some suggestions:

1. Visit Miami's beaches and soak up some sun or take a dip in the ocean!

2. Explore Miami's art scene with a visit to the Perez Art Museum Miami or the Wynwood Walls.

3. Take a stroll along the famous Ocean Drive and enjoy the colorful Art Deco architecture.

4. Head to Little Havana to experience the Cuban culture and delicious cuisine.

5. Enjoy a scenic walk or bike ride through one of Miami's many parks, such as Bayfront Park or South Pointe Park.

6. Visit the Miami Seaquarium and see some incredible marine life up close.

7. Take a boat tour to see the stunning Miami skyline from the water.

8. Shopping enthusiasts can explore the many high-end boutiques and outdoor shopping malls, such as Lincoln Road Mall.

9. Foodies can venture to one of the many food festivals happening throughout the year.

10. Finally, there are plenty of nightclubs and live music venues to keep the night going.

Tuyệt! Một phần trong tôi ước gì ngày mai đang ở Miami!

Nâng tầm thêm nữa

Bạn có thể tìm hiểu thêm về việc sử dụng GPT trong khóa học Giới thiệu về ChatGPT. (Một khóa học đầy đủ về làm việc với OpenAI API sẽ sớm ra mắt!)

Để tham khảo lại những gì bạn vừa học, hãy tải bản sao Cheat Sheet OpenAI API trong Python hoặc xem bản ghi buổi đào tạo trực tiếp Bắt đầu với OpenAI API và ChatGPT.

Nếu bạn quan tâm đến chuyển giọng nói thành văn bản, hãy đọc hướng dẫn Chuyển giọng nói thành văn bản với OpenAI Whisper API.

Chủ đề
Trí tuệ Nhân tạo
Python

Khóa học Python hàng đầu

Khóa học

Nhập môn Python

4 giờ
7.1M
Nắm vững phân tích dữ liệu với Python chỉ trong 4 giờ. Khóa học online này giúp bạn làm quen với giao diện Python và các thư viện phổ biến.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm