Khóa học
OpenAI’s Responses API là gì?
Responses API là API mới nhất và tiên tiến nhất của OpenAI. Nó kết hợp điểm mạnh của Chat Completions và Assistants vào một giao diện hợp nhất, gọn nhẹ. Ra mắt vào tháng 3 năm 2025, API này vẫn giữ các khả năng quen thuộc đồng thời cung cấp một cách tiếp cận tích hợp hơn để xây dựng ứng dụng AI.
Điểm đổi mới cốt lõi là cách API đơn giản hóa phát triển bằng cách tự động xử lý logic điều phối và tích hợp nguyên bản các công cụ tích hợp sẵn của OpenAI cho tìm kiếm web và tìm kiếm tệp mà không cần triển khai tùy chỉnh.
Trong hướng dẫn này, chúng ta sẽ đi qua cách sử dụng Responses API trong dự án của bạn. Bạn sẽ thấy cách nó xử lý tạo văn bản, làm việc với hình ảnh và trả về phản hồi dạng streaming. Chúng ta sẽ xem xét các công cụ tích hợp sẵn giúp việc phát triển nhanh hơn và dễ dàng hơn trước đây, cho thấy cách chúng phối hợp trong khung của API.
Kết thúc hướng dẫn, bạn sẽ hiểu khi nào nên dùng Responses API thay vì các lựa chọn khác của OpenAI và cách kiến thức này giúp bạn xây dựng ứng dụng hiệu quả hơn với ít mã và công sức hơn. Nếu bạn mới với OpenAI API, hãy xem khóa học nhập môn Làm việc với OpenAI API để bắt đầu hành trình phát triển ứng dụng vận hành bằng AI.
Bắt đầu với Responses API
Responses API mang đến một giao diện gọn gàng và thân thiện hơn để tương tác với các mô hình của OpenAI, kết hợp những gì trước đây cần cú pháp dài dòng và phức tạp thành một giải pháp tinh gọn.
Trước khi đi vào các trường hợp sử dụng cụ thể, hãy thiết lập môi trường và hiểu cú pháp cơ bản.
from openai import OpenAI
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Initialize the client
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
Bước khởi tạo này tạo một đối tượng client để xử lý mọi yêu cầu API của bạn. Gói dotenv giúp quản lý khóa API an toàn qua biến môi trường thay vì hardcode trong mã — một thực hành tốt giúp mã của bạn dễ di chuyển và an toàn hơn trên các môi trường khác nhau.
Tạo nội dung với Responses API
Cách sử dụng đơn giản nhất của Responses API là tạo nội dung văn bản. Hãy xem một tình huống thực tế: giả sử bạn đang xây dựng nền tảng thương mại điện tử và cần tự động tạo mô tả sản phẩm hấp dẫn từ các thông tin cơ bản.
Trước đây, việc này đòi hỏi kỹ thuật nhắc (prompt engineering) cẩn thận và nhiều vòng lặp. Với Responses API, bạn có thể tạo một hàm đơn giản xử lý gọn gàng như sau:
def generate_product_description(product_name, features, target_audience):
response = client.responses.create(
model="gpt-4o",
instructions="You are a professional copywriter specialized in creating concise, compelling product descriptions. Focus on benefits rather than just features.",
input=f"""
Create a product description for {product_name}.
Key features:
- {features[0]}
- {features[1]}
- {features[2]}
Target audience: {target_audience}
Keep it under 150 words.
""",
temperature=0.7,
max_output_tokens=200
)
return response.output_text
# Example usage
headphones_desc = generate_product_description(
"NoiseGuard Pro Headphones",
["Active noise cancellation", "40-hour battery life", "Memory foam ear cushions"],
"Business travelers and remote workers"
)
print(headphones_desc)
Kết quả:
Experience unparalleled focus and comfort with NoiseGuard Pro Headphones—your perfect travel and work companion.
Designed for business travelers and remote workers, these headphones feature cutting-edge active noise cancellation to block out distractions, allowing you to concentrate on what truly matters.
With an impressive 40-hour battery life, you can enjoy uninterrupted productivity or relaxation on even the longest journeys.
The luxurious memory foam ear cushions ensure a snug, comfortable fit for all-day wear, reducing fatigue and enhancing your listening experience.
Elevate your work and travel with NoiseGuard Pro—where clarity meets comfort.
Chỉ với vài dòng mã, chúng ta đã tạo được nội dung marketing chất lượng mà bình thường cần một copywriter chuyên nghiệp. Hàm này cũng có thể tái sử dụng — chỉ cần thay tham số là bạn có thể tạo mô tả cho mọi sản phẩm trong danh mục.
Ví dụ này minh họa các mẫu sử dụng chính khi làm việc với Responses API:
- Tham số
instructionsđóng vai trò như system prompt, xác định hành vi và ngữ cảnh của AI. - Tham số
temperature(0-2) kiểm soát độ ngẫu nhiên — giá trị thấp cho đầu ra quyết định hơn, giá trị cao tăng tính sáng tạo. - Tham số
max_output_tokensgiới hạn độ dài phản hồi, giúp kiểm soát chi phí và đảm bảo súc tích. - Đối tượng phản hồi chứa văn bản sinh ra trong thuộc tính
output_text.
Phân tích hình ảnh cho các ứng dụng thực tiễn
Nhiều ứng dụng thực tế cần xử lý cả văn bản lẫn hình ảnh. Ví dụ, nền tảng thương mại điện tử cần phân tích ảnh sản phẩm, hệ thống kiểm duyệt nội dung cần rà soát tệp tải lên, và ứng dụng mạng xã hội cần hiểu nội dung trực quan.
Responses API vượt trội ở các tác vụ đa phương thức như phân tích hình ảnh mà không cần endpoint riêng hay mã tích hợp phức tạp:
def analyze_product_image(image_url):
response = client.responses.create(
model="gpt-4o",
instructions="You are a product photography expert and e-commerce consultant.",
input=[
{"role": "user", "content": "Analyze this product image and provide the following details:\n1. Product category\n2. Key visible features\n3. Potential quality issues\n4. Suggested improvements for the product photography"},
{
"role": "user",
"content": [
{
"type": "input_image",
"image_url": image_url
}
],
},
],
temperature=0.2
)
return response.output_text
# Example with a sports team image
analysis = analyze_product_image("https://upload.wikimedia.org/wikipedia/commons/a/a5/Barcelona_fc_lamina_elgrafico.jpg")
print(analysis)
Kết quả:
1. **Product Category**: Sports team memorabilia or vintage sports photography.
2. **Key Visible Features**:
- The image features a group of individuals in sports uniforms, likely a football (soccer) team.
- The uniforms have distinct vertical stripes in red and blue.
- A football is visible in the foreground.
- The setting appears to be an outdoor field, possibly a stadium.
...
Hàm này có thể tích hợp vào nền tảng thương mại điện tử để tự động phân tích ảnh sản phẩm khi người bán tải lên. Hệ thống có thể phản hồi ngay về chất lượng ảnh và đề xuất cải thiện, cuối cùng giúp tỷ lệ chuyển đổi tốt hơn nhờ danh sách sản phẩm chất lượng cao — tất cả không cần rà soát thủ công.
Khi làm việc với hình ảnh, bạn nên truyền một mảng đối tượng tin nhắn vào tham số input thay vì chuỗi, mỗi đối tượng có role và content.
Nội dung hình ảnh được chỉ định dưới dạng đối tượng với type: input_image và image_url. Bạn có thể kết hợp văn bản và hình ảnh trong cùng một yêu cầu, cho phép tương tác đa phương thức phong phú.
Triển khai streaming cho ứng dụng phản hồi nhanh
Người dùng kỳ vọng phản hồi tức thì. Chờ vài giây cho phản hồi AI có thể làm giảm tương tác — đó là lý do streaming rất quan trọng để tạo trải nghiệm người dùng mượt mà, đặc biệt trong ứng dụng chat hoặc thời gian thực.
Hãy tưởng tượng bạn đang xây dựng công cụ phân tích phản hồi khách hàng cho đội sản phẩm. Thay vì bắt họ đợi phân tích hoàn chỉnh, bạn có thể stream kết quả khi chúng được tạo:
def analyze_customer_feedback(feedback_text):
print("Analyzing customer feedback in real-time:")
stream = client.responses.create(
model="gpt-4o",
instructions="Extract key sentiments, product issues, and actionable insights from this feedback.",
input=feedback_text,
stream=True,
temperature=0.3,
max_output_tokens=500
)
full_response = ""
print("\nAnalysis results:")
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="")
full_response += event.delta
elif event.type == "response.error":
print(f"\nError occurred: {event.error}")
return full_response
# Example with a complex customer review
feedback = """
I've been using the SmartHome Hub for about 3 months now. The voice recognition is fantastic
and the integration with my existing devices was mostly seamless. However, the app crashes
at least once a day, and the night mode feature often gets stuck until I restart the system.
Customer support was helpful but couldn't fully resolve the app stability issues.
"""
analysis_result = analyze_customer_feedback(feedback)
Trong ứng dụng thực tế, bạn sẽ thay các lệnh print bằng cập nhật UI, cho phép người dùng thấy phân tích hình thành theo thời gian thực — giống như cách ứng dụng chat hiện đại hiển thị AI "đang suy nghĩ" khi tạo phản hồi. Điều này tạo trải nghiệm hấp dẫn hơn và cho người dùng phản hồi tức thời rằng yêu cầu của họ đang được xử lý.
Cách triển khai streaming hoạt động như sau:
- Đặt
stream=Truetrong phương thức create - Xử lý phản hồi như một iterable gồm các sự kiện với kiểu cụ thể
- Xử lý riêng các loại sự kiện:
response.output_text.deltacho các mảnh nội dung,response.errorcho lỗi
Giờ khi đã bao quát chức năng cơ bản của Responses API, hãy khám phá các công cụ tích hợp sẵn giúp tăng cường khả năng của nó.
Các công cụ tích hợp sẵn của OpenAI Responses API
Responses API tích hợp một số công cụ mở rộng khả năng vượt ra ngoài tạo văn bản cơ bản. Các công cụ này cho phép nhà phát triển tạo ứng dụng mạnh mẽ hơn mà không cần mã tích hợp phức tạp hay nhiều lần gọi API.
Tìm kiếm web: truy cập thông tin thời gian thực
Công cụ tìm kiếm web cho phép Responses API truy xuất thông tin hiện thời từ internet, khắc phục hạn chế của LLM bị ràng buộc vào dữ liệu huấn luyện.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4o",
tools=[{"type": "web_search_preview"}],
input="What are some news related to the stock market?",
)
print(response.output_text)
Kết quả:
Recent developments in the stock market have been significantly influenced by escalating trade tensions between the United States and China. On April 5, 2025, President Donald Trump announced an additional 34% tariff on Chinese goods, raising total tariffs to 54% this year. In response, China imposed reciprocal 34% tariffs on U.S. products and introduced export restrictions on certain rare earth elements. These actions led to a sharp global market selloff, with the S&P 500 falling 9% for the week, marking the steepest decline since the pandemic. (reuters.com)
…..
## Escalating US-China Trade Tensions Impact Global Markets:
- [China says 'market has spoken' after US tariffs spark selloff](https://www.reuters.com/world/china/china-says-market-has-spoken-after-us-tariffs-spark-selloff-2025-04-05/?utm_source=openai)
- [Trump touts "economic revolution" as economists warn of recession](https://www.axios.com/2025/04/05/trump-tariffs-stock-market-recession?utm_source=openai)
- [Believe it or not, there were some winners in the stock market this week](https://apnews.com/article/ce81e9ae6fb463dc763dfaa464778343?utm_source=openai)
Khi được bật, công cụ tìm kiếm web thực hiện nhiều thao tác, từ phân tích truy vấn đến tổng hợp thông tin từ nhiều nguồn kèm trích dẫn phù hợp. Khả năng này mở ra các ứng dụng giàu thông tin như công cụ phân tích tài chính cung cấp insight thị trường, nền tảng tổng hợp tin tức kết hợp nhiều nguồn, hoặc tài nguyên giáo dục bổ sung nội dung cốt lõi bằng nghiên cứu cập nhật.
Lợi ích then chốt là khả năng cung cấp thông tin kịp thời mà không cần xây dựng và duy trì tích hợp tìm kiếm tùy chỉnh hay hệ thống thu thập dữ liệu web. Công cụ xử lý quy trình tìm kiếm và trình bày kết quả kèm trích dẫn để đảm bảo minh bạch nguồn thông tin.
Tìm kiếm tệp: trích xuất thông tin từ tài liệu
Trong khi tìm kiếm web đưa tri thức bên ngoài vào ứng dụng của bạn, công cụ tìm kiếm tệp tập trung mở khóa thông tin từ tài liệu. Công cụ này cho phép API tìm kiếm và trích xuất thông tin từ các tài liệu đã được tải lên OpenAI.
Công cụ tìm kiếm tệp cho phép một số khả năng quan trọng:
- Tìm kiếm trên nhiều định dạng tệp (PDF, Word, bản trình chiếu, v.v.).
- Tìm thông tin cụ thể trong tài liệu dựa trên truy vấn ngôn ngữ tự nhiên.
- Trích xuất và tổng hợp thông tin từ nhiều tài liệu đồng thời.
- Cung cấp trích dẫn đến các phần cụ thể của tài liệu nguồn.
- Hỗ trợ truy vấn phức tạp tham chiếu thông tin xuyên suốt nhiều tệp.
Khả năng này rất phù hợp cho các trường hợp phân tích tài liệu như trích xuất thông tin từ hợp đồng pháp lý, phân tích bài báo nghiên cứu, hoặc xây dựng cơ sở tri thức từ tài liệu kỹ thuật. Công cụ có thể xác định các phần liên quan trong nhiều tài liệu và tổng hợp thông tin để trả lời các truy vấn cụ thể.
Việc triển khai yêu cầu tải tệp lên endpoint files của OpenAI trước, sau đó truyền ID tệp vào Responses API khi truy vấn. Điều này tạo quy trình tinh gọn cho ứng dụng cần tham chiếu thông tin cụ thể trong tài liệu mà không bắt người dùng tự tìm thủ công.
Computer use: khả năng tương tác giao diện
Dựa trên nền tảng hiểu văn bản và tài liệu, công cụ computer use mở rộng khả năng AI vào lĩnh vực tương tác giao diện. Đây là bước tiến đáng kể, bắc cầu giữa hiểu ngôn ngữ và thao tác giao diện người dùng.
Công cụ computer use có thể thực hiện nhiều thao tác giao diện:
- Điều hướng website và ứng dụng web tự động.
- Điền biểu mẫu với thông tin phù hợp.
- Trích xuất dữ liệu từ trang web và ứng dụng.
- Thực thi quy trình nhiều bước trên các màn hình khác nhau.
- Tương tác với các thành phần như nút bấm, danh sách thả, trường văn bản.
- Hiểu ngữ cảnh và mục đích của các thành phần giao diện khác nhau.
Ứng dụng tiềm năng gồm tự động hóa quy trình cho tác vụ lặp lại, trợ lý hướng dẫn cho quy trình phức tạp, và cải thiện khả năng tiếp cận cho người dùng gặp khó khăn với giao diện truyền thống. Công cụ có thể dùng để tự động điền biểu mẫu, điều hướng website phức tạp, hoặc kiểm thử giao diện người dùng.
Công nghệ hoạt động bằng cách cho phép AI nhìn và tương tác với phần tử trên màn hình, hiểu ngữ cảnh, và thực thi hành động dựa trên hướng dẫn ngôn ngữ tự nhiên. Điều này tạo ra khả năng tự động hóa và hỗ trợ mà nếu không sẽ cần phát triển mã đặc thù cho từng giao diện.
Các khả năng công cụ bổ sung
Hệ sinh thái công cụ trong Responses API tiếp tục phát triển, OpenAI thường xuyên bổ sung khả năng mới. Tài liệu công cụ toàn diện bao quát chi tiết triển khai cho tất cả công cụ hiện có, trong khi bài viết về công cụ mới để xây dựng agent cung cấp bối cảnh chiến lược về cách các công cụ này đang tiến hóa.
Các công cụ tích hợp sẵn mang lại khả năng mạnh mẽ ngay từ đầu, nhưng nhiều ứng dụng cần kết nối tới dịch vụ chuyên biệt hoặc hệ thống sở hữu. Đây là lúc function calling trở nên thiết yếu, cho phép bạn mở rộng Responses API với công cụ tùy chỉnh và dịch vụ bên ngoài — trọng tâm của phần tiếp theo.
Function Calling trong Responses API
Mặc dù công cụ tích hợp sẵn rất mạnh, nhiều ứng dụng cần kết nối tới dịch vụ chuyên dụng hoặc hệ thống sở hữu. Function calling cho phép bạn mở rộng Responses API với công cụ tùy chỉnh của riêng bạn, giúp mô hình quyết định khi nào và cách gọi hàm dựa trên đầu vào người dùng.
Function calling tạo cầu nối giữa khả năng hiểu ngôn ngữ của AI và hệ thống bên ngoài của bạn — dù đó là truy xuất tỷ giá, tính khoảng cách, hay kiểm tra lịch hẹn trống. Mẫu này theo quy trình rõ ràng:
- Bạn định nghĩa các hàm AI có thể dùng, chỉ rõ tham số và kiểu dữ liệu.
- AI quyết định khi nào gọi các hàm này dựa trên truy vấn người dùng.
- Mã của bạn thực thi hàm với tham số do AI cung cấp.
- Bạn trả kết quả về cho AI để AI đưa vào phản hồi.
Tạo công cụ chuyển đổi tiền tệ
Hãy triển khai một hàm chuyển đổi tiền tệ đơn giản làm ví dụ:
# Dictionary of exchange rates (relative to USD)
exchange_rates = {
"USD": 1.0,
"EUR": 0.93,
"GBP": 0.79,
"JPY": 153.2,
"CAD": 1.37,
"AUD": 1.52
}
def convert_currency(amount, from_currency, to_currency):
"""Convert an amount from one currency to another."""
# Normalize currency codes to uppercase
from_currency = from_currency.upper()
to_currency = to_currency.upper()
# Check if currencies are supported
if from_currency not in exchange_rates:
return {"error": f"Currency not supported: {from_currency}"}
if to_currency not in exchange_rates:
return {"error": f"Currency not supported: {to_currency}"}
# Convert to USD first, then to target currency
amount_in_usd = amount / exchange_rates[from_currency]
converted_amount = amount_in_usd * exchange_rates[to_currency]
return {
"original_amount": amount,
"from_currency": from_currency,
"to_currency": to_currency,
"converted_amount": round(converted_amount, 2)
}
Hàm này nhận ba tham số: số tiền cần đổi, đơn vị tiền nguồn và đơn vị tiền đích. Nó thực hiện chuyển đổi đơn giản bằng tỷ giá được định nghĩa sẵn và trả về kết quả có cấu trúc với chi tiết chuyển đổi.
Định nghĩa hàm cho Responses API
Giờ chúng ta cần cho mô hình biết về hàm để nó có thể quyết định khi nào gọi:
from openai import OpenAI
import json
client = OpenAI()
tools = [
{
"type": "function",
"name": "convert_currency",
"description": "Convert an amount from one currency to another using current exchange rates",
"parameters": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The amount of money to convert"
},
"from_currency": {
"type": "string",
"description": "The currency code to convert from (e.g., USD, EUR, GBP)"
},
"to_currency": {
"type": "string",
"description": "The currency code to convert to (e.g., USD, EUR, GBP)"
}
},
"required": ["amount", "from_currency", "to_currency"],
"additionalProperties": False
},
"strict": True
}
]
Định nghĩa này nêu rõ:
- Tên hàm
convert_currencykhớp với hàm Python của chúng ta. - Mô tả giải thích khi nào nên dùng hàm.
- Ba tham số bắt buộc với kiểu dữ liệu và mô tả.
- Cờ
strict: trueđể đảm bảo mô hình tuân thủ chính xác đặc tả tham số.
Xử lý truy vấn người dùng
Hãy mô phỏng hội thoại khi người dùng hỏi về chuyển đổi tiền tệ:
input_messages = [
{"role": "user", "content": "How much is 100 euros in Japanese yen?"}
]
response = client.responses.create(
model="gpt-4o",
input=input_messages,
tools=tools,
)
Khi thấy câu hỏi về chuyển đổi tiền tệ, mô hình nhận ra cần dùng hàm của chúng ta. Nó tự động xác định rằng:
- Số tiền là 100
- Tiền nguồn là euro (EUR)
- Tiền đích là yên Nhật (JPY)
Xử lý lệnh gọi hàm
Giờ hãy trích xuất chi tiết lệnh gọi và thực thi hàm:
tool_call = response.output[0]
print(f"Function called: {tool_call.name}")
print(f"Arguments: {tool_call.arguments}")
args = json.loads(tool_call.arguments)
# Execute the function with the parameters determined by the model
conversion_result = convert_currency(**args)
print(f"Function results: {conversion_result}")
Mô hình đã chuyển truy vấn ngôn ngữ tự nhiên thành tham số có cấu trúc. Hàm của chúng ta thực hiện phép tính dựa trên các tham số này và trả về số tiền đã đổi.
Trả kết quả hàm về cho mô hình
Cuối cùng, ta gửi kết quả lại cho mô hình để nó tạo phản hồi thân thiện với người dùng:
input_messages.append(tool_call) # append model's function call message
input_messages.append(
{ # append result message
"type": "function_call_output",
"call_id": tool_call.call_id,
"output": json.dumps(conversion_result)
}
)
response_2 = client.responses.create(
model="gpt-4o",
input=input_messages,
tools=tools,
)
print(response_2.output_text)
Kết quả:
100 euros is equal to 16,473.12 Japanese yen based on current exchange rates.
Mô hình đã lấy dữ liệu chuyển đổi thô và chuyển thành phản hồi tự nhiên, dễ đọc. Nó diễn giải đúng kết quả số và trình bày theo định dạng tiền tệ phù hợp.
Tổng hợp mọi thứ
Trong ứng dụng thực, bạn sẽ muốn đóng gói toàn bộ quy trình vào một giao diện duy nhất xử lý luồng hội thoại liền mạch. Dưới đây là cách tạo một trợ lý hoàn chỉnh quản lý toàn bộ quy trình function calling:
def currency_assistant(user_message, conversation_history=None):
"""A complete assistant that handles currency conversion queries."""
if conversation_history is None:
conversation_history = []
# Add the user's new message to the conversation
conversation_history.append({"role": "user", "content": user_message})
# Define available tools (our currency conversion function)
tools = [{
"type": "function",
"name": "convert_currency",
"description": "Convert an amount from one currency to another using current exchange rates",
"parameters": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The amount of money to convert"
},
"from_currency": {
"type": "string",
"description": "The currency code to convert from (e.g., USD, EUR, GBP)"
},
"to_currency": {
"type": "string",
"description": "The currency code to convert to (e.g., USD, EUR, GBP)"
}
},
"required": ["amount", "from_currency", "to_currency"],
"additionalProperties": False
},
"strict": True
}]
# Get initial response from the model
response = client.responses.create(
model="gpt-4o",
input=conversation_history,
tools=tools,
)
# Check if the model wants to call a function
if response.output and isinstance(response.output, list) and response.output[0].type == "function_call":
tool_call = response.output[0]
# Process the function call
args = json.loads(tool_call.arguments)
result = convert_currency(**args)
# Add the function call and its result to the conversation
conversation_history.append(tool_call)
conversation_history.append({
"type": "function_call_output",
"call_id": tool_call.call_id,
"output": json.dumps(result)
})
# Get the final response with the function results incorporated
final_response = client.responses.create(
model="gpt-4o",
input=conversation_history,
tools=tools,
)
return final_response.output_text, conversation_history
else:
# If no function call was needed, return the direct response
return response.output_text, conversation_history
# Example usage
response, conversation = currency_assistant("How much is 50 British pounds in Australian dollars?")
print("Assistant:", response)
# Continue the conversation
response, conversation = currency_assistant("And what if I wanted to convert 200 Canadian dollars instead?", conversation)
print("Assistant:", response)
Cách triển khai này:
- Duy trì lịch sử hội thoại để cung cấp ngữ cảnh cho câu hỏi tiếp theo.
- Xử lý toàn bộ quy trình function calling trong một giao diện duy nhất.
- Xác định khi nào cần gọi hàm và khi nào mô hình có thể phản hồi trực tiếp.
- Hỗ trợ hội thoại nhiều lượt nơi ngữ cảnh trước đó có ý nghĩa.
Với cách tiếp cận này, bạn có thể tạo trải nghiệm hội thoại liền mạch nơi người dùng tương tác tự nhiên mà không biết đến quy trình function calling phức tạp phía sau. Trợ lý xử lý chuyển đổi giữa hiểu ngôn ngữ tự nhiên, lời gọi hàm có cấu trúc và sinh ngôn ngữ tự nhiên.
Xây dựng ứng dụng phức tạp hơn có thể bao gồm:
- Hỗ trợ nhiều hàm, mỗi hàm cho một loại truy vấn khác nhau.
- Quản lý xác thực và phân quyền cho thao tác nhạy cảm.
- Triển khai xử lý lỗi và khôi phục tinh vi hơn.
- Thêm ghi nhật ký và giám sát việc sử dụng hàm và hiệu năng.
- Tạo giao diện hỗ trợ văn bản, giọng nói, hoặc đa phương thức.
Function calling giúp Responses API kết nối đầu vào ngôn ngữ tự nhiên với dịch vụ và dữ liệu của bạn. Điều này tạo cầu nối giữa yêu cầu người dùng và hệ thống nghiệp vụ, cho phép người dùng yêu cầu bằng ngôn ngữ đời thường trong khi ứng dụng của bạn xử lý chi tiết kỹ thuật ở hậu trường.
Ngoài function calling, một khả năng mạnh mẽ khác của Responses API là sinh đầu ra có cấu trúc. Tính năng này bổ trợ function calling bằng cách cung cấp cách nhận phản hồi theo định dạng cụ thể phù hợp nhu cầu ứng dụng của bạn.
Structured Outputs với Responses API
Khi xây dựng ứng dụng AI, bạn thường cần phản hồi theo định dạng cụ thể để dễ tích hợp với hệ thống. Responses API hỗ trợ structured outputs cho phép bạn nhận dữ liệu ở định dạng nhất quán, được xác định rõ thay vì văn bản tự do. Tính năng này đặc biệt hữu ích khi bạn cần:
- Trích xuất thông tin cụ thể từ văn bản phi cấu trúc.
- Biến đầu vào người dùng thành dữ liệu có cấu trúc.
- Đảm bảo định dạng phản hồi nhất quán cho xử lý hạ nguồn.
- Tích hợp đầu ra AI trực tiếp với cơ sở dữ liệu hoặc API.
Structured outputs giảm nhu cầu phân tích cú pháp và xác thực bổ sung, giúp ứng dụng vững chắc hơn và dễ bảo trì hơn.
Trích xuất thông tin sản phẩm từ mô tả
Hãy xem một ví dụ thực tế: bạn đang xây dựng nền tảng thương mại điện tử và cần tự động trích xuất chi tiết sản phẩm từ mô tả phi cấu trúc để điền vào cơ sở dữ liệu.
from openai import OpenAI
import json
client = OpenAI()
product_description = """
Our Premium Laptop Backpack is perfect for professionals and students alike.
Made with water-resistant material, it features padded compartments that fit
laptops up to 15.6 inches. The backpack includes 3 main storage areas,
5 smaller pockets, and has an integrated USB charging port. Available in
navy blue, black, and gray. Current retail price: $79.99, though it's
currently on sale for $64.99 until the end of the month.
"""
response = client.responses.create(
model="gpt-4o",
input=f"Extract structured product information from this description: {product_description}",
text={
"format": {
"type": "json_schema",
"name": "product_details",
"schema": {
"type": "object",
"properties": {
"product_name": {"type": "string"},
"category": {"type": "string"},
"features": {"type": "array", "items": {"type": "string"}},
"colors": {"type": "array", "items": {"type": "string"}},
"pricing": {
"type": "object",
"properties": {
"regular_price": {"type": "number"},
"sale_price": {"type": "number"},
"currency": {"type": "string"},
},
"additionalProperties": False,
"required": ["regular_price", "sale_price", "currency"],
},
},
"required": ["product_name", "features", "colors", "pricing","category"],
"additionalProperties": False,
},
"strict": True,
}
},
)
product_data = json.loads(response.output_text)
print(json.dumps(product_data, indent=2))
Kết quả:
{
"product_name": "Premium Laptop Backpack",
"category": "Backpack",
"features": [
"Water-resistant material",
"Padded compartments for laptops up to 15.6 inches",
"3 main storage areas",
"5 smaller pockets",
"Integrated USB charging port"
],
"colors": [
"Navy blue",
"Black",
"Gray"
],
"pricing": {
"regular_price": 79.99,
"sale_price": 64.99,
"currency": "USD"
}
}
Dữ liệu JSON đã định dạng này có thể tích hợp trực tiếp với cơ sở dữ liệu sản phẩm của bạn, loại bỏ nhu cầu viết logic phân tích cú pháp tùy chỉnh và giảm khả năng lỗi.
Hiểu cấu hình structured output
Chìa khóa để có structured outputs hiệu quả và không lỗi là định nghĩa schema đúng cách. Hãy phân tích các thành phần quan trọng của cấu hình:
text={
"format": {
"type": "json_schema", # Specifies we're using JSON Schema
"name": "product_details", # A descriptive name for this schema
"schema": {
# Your JSON Schema definition here
"type": "object",
"properties": {
# Each property with type information, e.g.
"product_name": {"type": "string"},
# ... other properties
},
"required": ["product_name", ...], # All other properties
"additionalProperties": False
},
"strict": True # Enforce schema constraints strictly
}
}
Các thành phần quan trọng nhất là:
- Định nghĩa schema: Mô tả cấu trúc, gồm mọi thuộc tính và kiểu dữ liệu.
- Trường bắt buộc: Liệt kê thuộc tính phải có trong phản hồi.
- Thuộc tính bổ sung: Khi đặt
False, ngăn các trường ngoài schema. - Chế độ nghiêm ngặt: Khi
True, đảm bảo mô hình tuân thủ chính xác schema.
Mẹo thực tiễn khi dùng structured outputs
Để có kết quả tốt nhất với structured outputs, hãy làm theo các hướng dẫn sau:
- Thiết kế schema cẩn thận: Bao gồm mọi trường bắt buộc nhưng giữ tập trung vào thông tin thiết yếu.
- Dùng kiểu dữ liệu phù hợp: Khớp kiểu trong schema với cách bạn dùng dữ liệu (số cho tính toán, chuỗi cho văn bản).
- Đặt ràng buộc rõ ràng: Dùng
enumcho trường có lựa chọn giới hạn vàminimum/maximumcho biên số học. - Kiểm thử với đầu vào đa dạng: Đảm bảo schema xử lý các định dạng đầu vào và trường hợp biên khác nhau.
- Thêm mô tả rõ ràng: Mô tả cho các trường giúp mô hình hiểu thông tin cần trích xuất.
So sánh với Chat Completions API
Trong khi Responses API cung cấp structured outputs qua JSON Schema, Chat Completions API đưa ra cách tiếp cận thay thế dùng Pydantic model đơn giản hơn nhiều:
from pydantic import BaseModel, Field
from typing import List, Optional
from openai import OpenAI
client = OpenAI()
class ProductDetails(BaseModel):
product_name: str
category: str = Field(default=None)
features: List[str]
specifications: Optional[dict] = None
colors: List[str]
pricing: dict
# With Chat Completions API
completion = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "Extract structured product information."},
{"role": "user", "content": product_description}
],
response_format=ProductDetails
)
pydantic_product = completion.choices[0].message.parsed
Mỗi cách tiếp cận đều có lợi ích:
- Responses API dùng JSON Schema tiêu chuẩn trực tiếp trong lời gọi API
- Chat Completions API tích hợp với hệ thống kiểu của Python qua Pydantic
Nếu hỏi tôi, tôi sẽ dùng Chat Completions API để tránh phải viết JSON Schema thô. Tất nhiên, trừ khi OpenAI bổ sung hỗ trợ Pydantic model cho Responses API.
Để biết thêm, xem tài liệu Responses API về Structured Outputs.
Kết luận
OpenAI Responses API đơn giản hóa cách nhà phát triển tương tác với mô hình ngôn ngữ bằng cách kết hợp điểm mạnh của các API trước vào một giao diện thống nhất, cần ít mã và ít phức tạp hơn. Nó hỗ trợ tạo văn bản, phân tích hình ảnh, function calling, và structured outputs, giúp khả năng AI trở nên dễ tiếp cận hơn, đồng thời cho phép nhà phát triển tập trung giải quyết bài toán kinh doanh thay vì thách thức tích hợp.
Khi tiếp tục hành trình với Responses API, bạn có thể thấy các tài nguyên sau hữu ích để đào sâu hiểu biết và mở rộng kỹ năng triển khai:
OpenAI Responses API FAQs
Responses API là gì và khác gì so với các API khác của OpenAI?
Responses API là giao diện hợp nhất của OpenAI, kết hợp các tính năng từ Chat Completions và Assistants. Nó đơn giản hóa phát triển bằng cách xử lý logic điều phối và tích hợp công cụ tìm kiếm web và tìm kiếm tệp mà không cần triển khai tùy chỉnh.
Tôi triển khai function calling với Responses API như thế nào?
Triển khai function calling bằng cách định nghĩa các hàm với tham số và kiểu, để mô hình quyết định khi nào gọi, thực thi hàm với tham số do mô hình cung cấp, rồi trả kết quả về cho mô hình để lồng vào phản hồi.
Structured outputs là gì và vì sao hữu ích?
Structured outputs cho phép bạn nhận dữ liệu theo định dạng được xác định rõ (như JSON) thay vì văn bản tự do. Chúng hữu ích để trích xuất thông tin cụ thể, đảm bảo định dạng phản hồi nhất quán, và tích hợp đầu ra AI trực tiếp với cơ sở dữ liệu hoặc API.
Responses API có những công cụ tích hợp sẵn nào?
Responses API bao gồm các công cụ tích hợp cho tìm kiếm web (truy cập thông tin thời gian thực), tìm kiếm tệp (trích xuất thông tin từ tài liệu), và computer use (khả năng tương tác giao diện), loại bỏ nhu cầu tích hợp phức tạp.
Tôi có thể dùng Responses API với các ngôn ngữ lập trình khác nhau không?
Có. Responses API khả dụng qua SDK chính thức của OpenAI cho Python, Node.js và các ngôn ngữ khác. Thiết kế API theo chuẩn REST cũng cho phép tích hợp với mọi ngôn ngữ có thể gửi yêu cầu HTTP.