zalo
Chat ngay

Xử lý hàng loạt với Batch API

Batch API mới cho phép tạo các tác vụ hàng loạt không đồng bộ với mức giá thấp hơn và giới hạn tốc độ cao hơn

Xem thêm: mua tài khoản Chat GPT Plus chính hãng giá rẻ tại Vua Quảng Cáo

Các lô hàng sẽ được hoàn thành trong vòng 24 giờ, nhưng có thể được xử lý sớm hơn tùy thuộc vào nhu cầu sử dụng toàn cầu.

Các trường hợp sử dụng lý tưởng cho Batch API bao gồm:

  • Gắn thẻ, chú thích hoặc làm phong phú nội dung trên thị trường hoặc blog
  • Phân loại và đề xuất câu trả lời cho các phiếu hỗ trợ
  • Thực hiện phân tích tình cảm trên các tập dữ liệu lớn về phản hồi của khách hàng
  • Tạo bản tóm tắt hoặc bản dịch cho các bộ sưu tập tài liệu hoặc bài viết

và nhiều hơn nữa!

Sách hướng dẫn này sẽ hướng dẫn bạn cách sử dụng Batch API thông qua một số ví dụ thực tế.

Chúng ta sẽ bắt đầu bằng một ví dụ để phân loại phim bằng cách sử dụng gpt-4o-mini, sau đó tìm hiểu cách chúng ta có thể sử dụng khả năng thị giác của mô hình này để chú thích cho hình ảnh.

Xin lưu ý rằng có nhiều mô hình khả dụng thông qua Batch API và bạn có thể sử dụng cùng các tham số trong các lệnh gọi Batch API như với điểm cuối Chat Completions.

Cài đặt

# Make sure you have the latest version of the SDK available to use the Batch API
%pip install openai --upgrade

 

import json
from openai import OpenAI
import pandas as pd
from IPython.display import Image, display

 

# Initializing OpenAI client - see https://platform.openai.com/docs/quickstart?context=python
client = OpenAI()

Ví dụ đầu tiên: Phân loại phim

Trong ví dụ này, chúng ta sẽ sử dụng gpt-4o-miniđể trích xuất các danh mục phim từ mô tả phim. Chúng ta cũng sẽ trích xuất tóm tắt 1 câu từ mô tả này.

Chúng tôi sẽ sử dụng chế độ JSON để trích xuất các danh mục dưới dạng một mảng chuỗi và bản tóm tắt gồm 1 câu theo định dạng có cấu trúc.

Đối với mỗi bộ phim, chúng tôi muốn có kết quả trông như thế này:

{ categories: ['category1', 'category2', 'category3'], summary: '1-sentence summary'}

Đang tải dữ liệu

Chúng tôi sẽ sử dụng tập dữ liệu 1000 phim hay nhất của IMDB cho ví dụ này.

dataset_path = "data/imdb_top_1000.csv"
df = pd.read_csv(dataset_path)
df.head()
dataset_path = "data/imdb_top_1000.csv"
df = pd.read_csv(dataset_path)
df.head()
 Liên kết áp phíchTiêu đề SeriesNăm phát hànhGiấy chứng nhậnThời gian chạyThể loạiXếp hạng IMDBTổng quanĐiểm MetaGiám đốcngôi sao1Ngôi sao2Ngôi sao3Ngôi sao4Số_phiếu_bầuTổng
0https://m.media-amazon.com/images/M/MV5BMDFkYT...Sự cứu rỗi của Shawshank1994MỘT142 phútKịch9.3Hai người đàn ông bị giam cầm đã gắn bó với nhau trong nhiều năm...80.0Frank DarabontTim RobbinsMorgan FreemanBob GuntonWilliam Sadler234311028.341.469
1https://m.media-amazon.com/images/M/MV5BM2MyNj...Bố già1972MỘT175 phútTội phạm, Kịch tính9.2Người đứng đầu gia tộc tội phạm có tổ chức đang già đi...100.0Francis Ford CoppolaMarlon BrandoAl PacinoJames CaanDiane Keaton1620367134.966.411
2https://m.media-amazon.com/images/M/MV5BMTMxNT...Kỵ sĩ bóng đêm2008UA152 phútHành động, Tội phạm, Chính kịch9.0Khi mối đe dọa được gọi là Joker gây ra thảm họa...84.0Christopher NolanChristian BaleHeath LedgerAaron EckhartMichael Caine2303232534,858,444
3https://m.media-amazon.com/images/M/MV5BMWMwMG...Bố già: Phần II1974MỘT202 phútTội phạm, Kịch tính9.0Cuộc sống và sự nghiệp thời trẻ của Vito Corleone trong ...90.0Francis Ford CoppolaAl PacinoRobert De NiroRobert DuvallDiane Keaton112995257.300.000
4https://m.media-amazon.com/images/M/MV5BMWU4N2...12 Người Đàn Ông Giận Dữ1957TRONG96 phútTội phạm, Kịch tính9.0Một bồi thẩm đoàn cố gắng ngăn chặn một vụ sảy thai...96.0Sidney LumetHenry FondaLý J. CobbMartin BalsamJohn Fiedler6898454.360.000

Bước xử lý

Tại đây, chúng ta sẽ chuẩn bị các yêu cầu bằng cách trước tiên thử chúng với điểm cuối Hoàn tất trò chuyện.

Khi đã hài lòng với kết quả, chúng ta có thể chuyển sang tạo tệp lệnh.

categorize_system_prompt = '''
Your goal is to extract movie categories from movie descriptions, as well as a 1-sentence summary for these movies.
You will be provided with a movie description, and you will output a json object containing the following information:
{ categories: string[] // Array of categories based on the movie description, summary: string // 1-sentence summary of the movie based on the movie description
}
Categories refer to the genre or type of the movie, like "action", "romance", "comedy", etc. Keep category names simple and use only lower case letters.
Movies can have several categories, but try to keep it under 3-4. Only mention the categories that are the most obvious based on the description.
'''
def get_categories(description): response = client.chat.completions.create( model="gpt-4o-mini", temperature=0.1, # This is to enable JSON mode, making sure responses are valid json objects response_format={ "type": "json_object" }, messages=[ { "role": "system", "content": categorize_system_prompt }, { "role": "user", "content": description } ], ) return response.choices[0].message.content

 

# Testing on a few examples
for _, row in df[:5].iterrows(): description = row['Overview'] title = row['Series_Title'] result = get_categories(description) print(f"TITLE: {title}\nOVERVIEW: {description}\n\nRESULT: {result}") print("\n\n----------------------------\n\n")
TIÊU ĐỀ: Nhà tù Shawshank TỔNG QUAN: Hai người đàn ông bị giam cầm gắn bó với nhau trong nhiều năm, tìm thấy sự an ủi và cuối cùng là sự cứu rỗi thông qua những hành động tử tế chung.
KẾT QUẢ: { "categories": ["drama"], "summary": "Hai người đàn ông bị giam cầm phát triển một mối liên kết sâu sắc trong nhiều năm, cuối cùng tìm thấy sự cứu rỗi thông qua những hành động tử tế chung của họ." }
----------------------------
TIÊU ĐỀ: Bố già TỔNG QUAN: Người cha già già của một triều đại tội phạm có tổ chức chuyển giao quyền kiểm soát đế chế bí mật của mình cho người con trai miễn cưỡng của mình.
KẾT QUẢ: { "categories": ["crime", "drama"], "summary": "Một trùm tội phạm già giao lại đế chế của mình cho người con trai do dự." }
----------------------------
TIÊU ĐỀ: Hiệp sĩ bóng đêm TỔNG QUAN: Khi mối đe dọa được gọi là Joker gây ra sự tàn phá và hỗn loạn cho người dân Gotham, Batman phải chấp nhận một trong những bài kiểm tra tâm lý và thể chất lớn nhất về khả năng chống lại sự bất công của mình.
KẾT QUẢ: { "categories": ["hành động", "ly kỳ", "siêu anh hùng"], "tóm tắt": "Batman phải đối mặt với một thử thách to lớn khi Joker gây ra hỗn loạn ở Thành phố Gotham." }
----------------------------
TIÊU ĐỀ: Bố già: Phần II TỔNG QUAN: Cuộc sống và sự nghiệp thời trẻ của Vito Corleone ở Thành phố New York những năm 1920 được miêu tả, trong khi con trai ông, Michael, mở rộng và thắt chặt quyền kiểm soát của mình đối với tổ chức tội phạm gia đình.
KẾT QUẢ: { "categories": ["tội phạm", "chính kịch"], "tóm tắt": "Bộ phim mô tả cuộc sống thời trẻ của Vito Corleone và sự trỗi dậy của con trai ông, Michael trong tổ chức tội phạm gia đình ở Thành phố New York những năm 1920." }
----------------------------
TIÊU ĐỀ: 12 Angry Men TỔNG QUAN: Một bồi thẩm đoàn cố gắng ngăn chặn một vụ án oan bằng cách buộc các đồng nghiệp của mình phải xem xét lại bằng chứng.
KẾT QUẢ: { "categories": ["kịch tính", "ly kỳ"], "summary": "Một bồi thẩm đoàn phản đối quyết liệt đấu tranh để đảm bảo công lý được thực thi bằng cách thách thức những bồi thẩm viên khác đánh giá lại bằng chứng." }
----------------------------

Tạo tập tin hàng loạt

Tệp lệnh theo jsonlđịnh dạng này phải chứa một dòng (đối tượng json) cho mỗi yêu cầu. Mỗi yêu cầu được định nghĩa như sau:

{ "custom_id": , "method": "POST", "url": "/v1/chat/completions", "body": { "model": , "messages": , // other parameters }}

Lưu ý: ID yêu cầu phải là duy nhất cho mỗi lô. Đây là những gì bạn có thể sử dụng để khớp kết quả với các tệp đầu vào ban đầu, vì các yêu cầu sẽ không được trả về theo cùng một thứ tự.

# Creating an array of json tasks
tasks = []
for index, row in df.iterrows(): description = row['Overview'] task = { "custom_id": f"task-{index}", "method": "POST", "url": "/v1/chat/completions", "body": { # This is what you would have in your Chat Completions API call "model": "gpt-4o-mini", "temperature": 0.1, "response_format": { "type": "json_object" }, "messages": [ { "role": "system", "content": categorize_system_prompt }, { "role": "user", "content": description } ], } } tasks.append(task)
# Creating the file
file_name = "data/batch_tasks_movies.jsonl"
with open(file_name, 'w') as file: for obj in tasks: file.write(json.dumps(obj) + '\n')

Đang tải tệp lên

batch_file = client.files.create( file=open(file_name, "rb"), purpose="batch"
)
print(batch_file)
FileObject(id='file-lx16f1KyIxQ2UHVvkG3HLfNR', byte=1127310, created_at=1721144107, filename='batch_tasks_movies.jsonl'

Tạo tác vụ hàng loạt

batch_job = client.batches.create( input_file_id=batch_file.id, endpoint="/v1/chat/completions", completion_window="24h"
)

 

Kiểm tra trạng thái lô hàng

Lưu ý: quá trình này có thể mất tới 24 giờ, nhưng thường sẽ hoàn tất nhanh hơn.

Bạn có thể tiếp tục kiểm tra cho đến khi trạng thái là 'hoàn tất'.

batch_job = client.batches.retrieve(batch_job.id)
print(batch_job)

Đang lấy kết quả

result_file_id = batch_job.output_file_id
result = client.files.content(result_file_id).content
result_file_name = "data/batch_job_results_movies.jsonl"
with open(result_file_name, 'wb') as file: file.write(result)
# Loading data from saved file
results = []
with open(result_file_name, 'r') as file: for line in file: # Parsing the JSON string into a dict and appending to the list of results json_object = json.loads(line.strip()) results.append(json_object)

Đọc kết quả

Nhắc nhở: kết quả không theo cùng thứ tự như trong tệp đầu vào. Hãy đảm bảo kiểm tra custom_id để khớp kết quả với các yêu cầu đầu vào

# Reading only the first results
for res in results[:5]: task_id = res['custom_id'] # Getting index from task id index = task_id.split('-')[-1] result = res['response']['body']['choices'][0]['message']['content'] movie = df.iloc[int(index)] description = movie['Overview'] title = movie['Series_Title'] print(f"TITLE: {title}\nOVERVIEW: {description}\n\nRESULT: {result}") print("\n\n----------------------------\n\n")
TIÊU ĐỀ: American Psycho TỔNG QUAN: Một giám đốc ngân hàng đầu tư giàu có ở Thành phố New York, Patrick Bateman, che giấu bản ngã tâm thần khác của mình khỏi đồng nghiệp và bạn bè khi anh ta đào sâu hơn vào những tưởng tượng bạo lực, khoái lạc của mình.
KẾT QUẢ: { "categories": ["thriller", "psychological", "drama"], "summary": "Một chủ ngân hàng đầu tư giàu có ở Thành phố New York che giấu bản ngã tâm thần khác của mình trong khi đắm chìm trong những tưởng tượng bạo lực và khoái lạc." }
----------------------------
TIÊU ĐỀ: Lethal Weapon TỔNG QUAN: Hai cảnh sát mới được ghép đôi hoàn toàn trái ngược nhau phải gạt bỏ những khác biệt của họ để bắt một băng buôn lậu ma túy.
KẾT QUẢ: { "categories": ["action", "comedy", "crime"], "summary": "Một bộ phim hài hành động về hai cảnh sát không hợp nhau hợp tác để hạ gục một băng buôn lậu ma túy." }
----------------------------
TIÊU ĐỀ: A Star Is Born TỔNG QUAN: Một nhạc sĩ giúp một ca sĩ trẻ tìm kiếm danh tiếng khi tuổi tác và chứng nghiện rượu khiến sự nghiệp của anh ta đi xuống.
KẾT QUẢ: { "categories": ["kịch", "âm nhạc"], "tóm tắt": "Sự nghiệp của một nhạc sĩ đi xuống khi anh ta giúp một ca sĩ trẻ tìm kiếm danh tiếng giữa những cuộc đấu tranh với tuổi tác và chứng nghiện rượu." }
----------------------------
TIÊU ĐỀ: Từ đây đến vĩnh hằng TỔNG QUAN: Tại Hawaii vào năm 1941, một binh nhì bị trừng phạt tàn nhẫn vì không tham gia đấm bốc trong đội của đơn vị mình, trong khi vợ của đại úy và phó chỉ huy của anh ta lại đang yêu nhau.
KẾT QUẢ: { "categories": ["kịch", "lãng mạn", "chiến tranh"], "tóm tắt": "Một bộ phim truyền hình lấy bối cảnh Hawaii vào năm 1941, nơi một binh nhì phải đối mặt với hình phạt vì không tham gia đấm bốc trong đội của đơn vị mình, giữa mối tình bị cấm đoán giữa vợ của đại úy và phó chỉ huy của anh ta." }
----------------------------
TIÊU ĐỀ: Cậu bé rừng xanh TỔNG QUAN: Báo Bagheera và Gấu Baloo gặp khó khăn khi cố gắng thuyết phục một cậu bé rời khỏi khu rừng để đến với nền văn minh loài người.
KẾT QUẢ: { "categories": ["phiêu lưu", "hoạt hình", "gia đình"], "tóm tắt": "Một bộ phim hoạt hình đầy phiêu lưu về một con báo và một con gấu cố gắng thuyết phục một cậu bé rời khỏi khu rừng để đến với nền văn minh loài người." }
----------------------------

Ví dụ thứ hai: Chú thích hình ảnh

Trong ví dụ này, chúng ta sẽ sử dụng gpt-4-turbo để chú thích cho hình ảnh các đồ nội thất.

Chúng tôi sẽ sử dụng khả năng thị giác của mô hình để phân tích hình ảnh và tạo chú thích.

Đang tải dữ liệu

Chúng tôi sẽ sử dụng tập dữ liệu đồ nội thất của Amazon cho ví dụ này.

dataset_path = "data/amazon_furniture_dataset.csv"
df = pd.read_csv(dataset_path)
df.head()
 muốiđịa chỉtiêu đềthương hiệugiásự sẵn cóThể loạihình ảnh chínhhình ảnhupc...màu sắcvật liệuphong cáchthông tin quan trọngtổng quan sản phẩmvề_mụcSự miêu tảthông số kỹ thuậtuniq_idđã cạo tại
0B0CJHKVG6Phttps://www.amazon.com/dp/B0CJHKVG6PGOYMFK Kệ để giày đứng 1 tầng, nhiều lớp...GOYMFK24,99 đô laChỉ còn 13 sản phẩm trong kho - hãy đặt hàng ngay.['Nhà cửa & Bếp núc', 'Lưu trữ & Tổ chức', '...https://m.media-amazon.com/images/I/416WaLx10j...['https://m.media-amazon.com/images/I/416WaLx1...NaN...TrắngKim loạiHiện đại[][{'Thương hiệu': ' GOYMFK '}, {'Màu sắc': ' Trắng '}, ...[Nhiều lớp: Cung cấp không gian lưu trữ rộng rãi...nhiều giày dép, áo khoác, mũ và các vật dụng khác E...['Thương hiệu: GOYMFK', 'Màu sắc: Trắng', 'Chất liệu: M...02593e81-5c09-5069-8516-b0b29f439ded2024-02-02 15:15:08
1B0B66QHB23https://www.amazon.com/dp/B0B66QHB23subrtex Leather ding Room, Bộ ghế ăn o...subrtexNaNNaN['Nội thất & Nhà bếp', 'Đồ nội thất', 'Phòng ăn'https://m.media-amazon.com/images/I/31SejUEWY7...['https://m.media-amazon.com/images/I/31SejUEW...NaN...Đenmiếng bọt biểnGỗ cao su đen[]NaN['【Lắp ráp dễ dàng】: Bộ 2 ghế ăn...subrtex Ghế ăn Bộ 2['Thương hiệu: subrtex', 'Màu sắc: Đen', 'Mô tả sản phẩm...5938d217-b8c5-5d3e-b1cf-e28e340f292e2024-02-02 15:15:09
2B0BXRTWLYKhttps://www.amazon.com/dp/B0BXRTWLYKThảm thay chậu cây MUYETOL chống thấm nước...MUYETOL5,98 đô laCòn hàng['Sân, bãi cỏ & vườn', 'Trang trí ngoài trời', 'Doo...https://m.media-amazon.com/images/I/41RgefVq70...['https://m.media-amazon.com/images/I/41RgefVq...NaN...Màu xanh láPolyetylenHiện đại[][{'Thương hiệu': ' MUYETOL '}, {'Kích thước': ' 26,8*26,8 ...['KÍCH THƯỚC THẢM THAY THẾ CÂY: 26,8" x 26,8", vuông...NaN['Thương hiệu: MUYETOL', 'Kích thước: 26,8*26,8', 'Mặt hàng chúng tôi...b2ede786-3f51-5a45-9a5b-bcf856958cd82024-02-02 15:15:09
3B0C1MRB2M8https://www.amazon.com/dp/B0C1MRB2M8Thảm chùi chân Pickleball, Thảm chùi chân Welcome thấm hút ...VEWETOL13,99 đô laChỉ còn 10 sản phẩm trong kho - hãy đặt hàng ngay.['Sân, bãi cỏ & vườn', 'Trang trí ngoài trời', 'Doo...https://m.media-amazon.com/images/I/61vz1Igler...['https://m.media-amazon.com/images/I/61vz1Igl...NaN...A5589Cao suHiện đại[][{'Thương hiệu': ' VEWETOL '}, {'Kích thước': ' 16*24INCH ...['Thông số kỹ thuật: 16x24 Inch', "Chất lượng cao...Tấm thảm chùi chân trang trí có họa tiết tinh tế...['Thương hiệu: VEWETOL', 'Kích thước: 16*24INCH', 'Chất liệu...8fd9377b-cfa6-5f10-835c-6b8eca2816b52024-02-02 15:15:10
4B0CG1N9QRChttps://www.amazon.com/dp/B0CG1N9QRCBộ khay đựng TV gấp gọn JOIN IRON dùng để ăn uống ...THAM GIA CỬA HÀNG IRON89,99 đô laThông thường giao hàng trong vòng 5 đến 6 tuần['Nội thất & Nhà bếp', 'Đồ nội thất', 'Trò chơi & Giải trí...https://m.media-amazon.com/images/I/41p4d4VJnN...['https://m.media-amazon.com/images/I/41p4d4VJ...NaN...Bộ 4 màu xámSắtX Phong cách cổ điển[]NaN['Bao gồm 4 khay đựng TV có thể gấp lại và một...Bộ bốn khay gấp có ngăn đựng đồ phù hợp...['Thương hiệu: JOIN IRON', 'Hình dạng: Hình chữ nhật', 'Trong...bdc9aa30-9439-50dc-8e89-213ea211d66a2024-02-02 15:15:11

5 hàng × 25 cột

Ví dụ thứ hai: Chú thích hình ảnh

Trong ví dụ này, chúng ta sẽ sử dụng gpt-4-turbođể chú thích cho hình ảnh các đồ nội thất.

Chúng tôi sẽ sử dụng khả năng thị giác của mô hình để phân tích hình ảnh và tạo chú thích.

Đang tải dữ liệu

Chúng tôi sẽ sử dụng tập dữ liệu đồ nội thất của Amazon cho ví dụ này.

dataset_path = "data/amazon_furniture_dataset.csv"
df = pd.read_csv(dataset_path)
df.head()
 muốiđịa chỉtiêu đềthương hiệugiásự sẵn cóThể loạihình ảnh chínhhình ảnhupc...màu sắcvật liệuphong cáchthông tin quan trọngtổng quan sản phẩmvề_mụcSự miêu tảthông số kỹ thuậtuniq_idđã cạo tại
0B0CJHKVG6Phttps://www.amazon.com/dp/B0CJHKVG6PGOYMFK Kệ để giày đứng 1 tầng, nhiều lớp...GOYMFK24,99 đô laChỉ còn 13 sản phẩm trong kho - hãy đặt hàng ngay.['Nhà cửa & Bếp núc', 'Lưu trữ & Tổ chức', '...https://m.media-amazon.com/images/I/416WaLx10j...['https://m.media-amazon.com/images/I/416WaLx1...NaN...TrắngKim loạiHiện đại[][{'Thương hiệu': ' GOYMFK '}, {'Màu sắc': ' Trắng '}, ...[Nhiều lớp: Cung cấp không gian lưu trữ rộng rãi...nhiều giày dép, áo khoác, mũ và các vật dụng khác E...['Thương hiệu: GOYMFK', 'Màu sắc: Trắng', 'Chất liệu: M...02593e81-5c09-5069-8516-b0b29f439ded2024-02-02 15:15:08
1B0B66QHB23https://www.amazon.com/dp/B0B66QHB23subrtex Leather ding Room, Bộ ghế ăn o...subrtexNaNNaN['Nội thất & Nhà bếp', 'Đồ nội thất', 'Phòng ăn'https://m.media-amazon.com/images/I/31SejUEWY7...['https://m.media-amazon.com/images/I/31SejUEW...NaN...Đenmiếng bọt biểnGỗ cao su đen[]NaN['【Lắp ráp dễ dàng】: Bộ 2 ghế ăn...subrtex Ghế ăn Bộ 2['Thương hiệu: subrtex', 'Màu sắc: Đen', 'Mô tả sản phẩm...5938d217-b8c5-5d3e-b1cf-e28e340f292e2024-02-02 15:15:09
2B0BXRTWLYKhttps://www.amazon.com/dp/B0BXRTWLYKThảm thay chậu cây MUYETOL chống thấm nước...MUYETOL5,98 đô laCòn hàng['Sân, bãi cỏ & vườn', 'Trang trí ngoài trời', 'Doo...https://m.media-amazon.com/images/I/41RgefVq70...['https://m.media-amazon.com/images/I/41RgefVq...NaN...Màu xanh láPolyetylenHiện đại[][{'Thương hiệu': ' MUYETOL '}, {'Kích thước': ' 26,8*26,8 ...['KÍCH THƯỚC THẢM THAY THẾ CÂY: 26,8" x 26,8", vuông...NaN['Thương hiệu: MUYETOL', 'Kích thước: 26,8*26,8', 'Mặt hàng chúng tôi...b2ede786-3f51-5a45-9a5b-bcf856958cd82024-02-02 15:15:09
3B0C1MRB2M8https://www.amazon.com/dp/B0C1MRB2M8Thảm chùi chân Pickleball, Thảm chùi chân Welcome thấm hút ...VEWETOL13,99 đô laChỉ còn 10 sản phẩm trong kho - hãy đặt hàng ngay.['Sân, bãi cỏ & vườn', 'Trang trí ngoài trời', 'Doo...https://m.media-amazon.com/images/I/61vz1Igler...['https://m.media-amazon.com/images/I/61vz1Igl...NaN...A5589Cao suHiện đại[][{'Thương hiệu': ' VEWETOL '}, {'Kích thước': ' 16*24INCH ...['Thông số kỹ thuật: 16x24 Inch', "Chất lượng cao...Tấm thảm chùi chân trang trí có họa tiết tinh tế...['Thương hiệu: VEWETOL', 'Kích thước: 16*24INCH', 'Chất liệu...8fd9377b-cfa6-5f10-835c-6b8eca2816b52024-02-02 15:15:10
4B0CG1N9QRChttps://www.amazon.com/dp/B0CG1N9QRCBộ khay đựng TV gấp gọn JOIN IRON dùng để ăn uống ...THAM GIA CỬA HÀNG IRON89,99 đô laThông thường giao hàng trong vòng 5 đến 6 tuần['Nội thất & Nhà bếp', 'Đồ nội thất', 'Trò chơi & Giải trí...https://m.media-amazon.com/images/I/41p4d4VJnN...['https://m.media-amazon.com/images/I/41p4d4VJ...NaN...Bộ 4 màu xámSắtX Phong cách cổ điển[]NaN['Bao gồm 4 khay đựng TV có thể gấp lại và một...Bộ bốn khay gấp có ngăn đựng đồ phù hợp...['Thương hiệu: JOIN IRON', 'Hình dạng: Hình chữ nhật', 'Trong...bdc9aa30-9439-50dc-8e89-213ea211d66a2024-02-02 15:15:11

5 hàng × 25 cột

 

Bước xử lý

Một lần nữa, trước tiên chúng ta sẽ chuẩn bị các yêu cầu với điểm cuối Chat Completions và sau đó tạo tệp hàng loạt.

caption_system_prompt = '''
Your goal is to generate short, descriptive captions for images of items.
You will be provided with an item image and the name of that item and you will output a caption that captures the most important information about the item.
If there are multiple items depicted, refer to the name provided to understand which item you should describe.
Your generated caption should be short (1 sentence), and include only the most important information about the item.
The most important information could be: the type of item, the style (if mentioned), the material or color if especially relevant and/or any distinctive features.
Keep it short and to the point.
'''
def get_caption(img_url, title): response = client.chat.completions.create( model="gpt-4o-mini", temperature=0.2, max_tokens=300, messages=[ { "role": "system", "content": caption_system_prompt }, { "role": "user", "content": [ { "type": "text", "text": title }, # The content type should be "image_url" to use gpt-4-turbo's vision capabilities { "type": "image_url", "image_url": { "url": img_url } }, ], } ] ) return response.choices[0].message.content
# Testing on a few images
for _, row in df[:5].iterrows(): img_url = row['primary_image'] caption = get_caption(img_url, row['title']) img = Image(url=img_url) display(img) print(f"CAPTION: {caption}\n\n")

Tạo tác vụ hàng loạt

Tương tự như ví dụ đầu tiên, chúng ta sẽ tạo một mảng các tác vụ json để tạo một jsonltệp và sử dụng nó để tạo tác vụ hàng loạt.

# Creating an array of json tasks
tasks = []
for index, row in df.iterrows(): title = row['title'] img_url = row['primary_image'] task = { "custom_id": f"task-{index}", "method": "POST", "url": "/v1/chat/completions", "body": { # This is what you would have in your Chat Completions API call "model": "gpt-4o-mini", "temperature": 0.2, "max_tokens": 300, "messages": [ { "role": "system", "content": caption_system_prompt }, { "role": "user", "content": [ { "type": "text", "text": title }, { "type": "image_url", "image_url": { "url": img_url } }, ], } ] } } tasks.append(task)
# Creating the file
file_name = "data/batch_tasks_furniture.jsonl"
with open(file_name, 'w') as file: for obj in tasks: file.write(json.dumps(obj) + '\n')
# Uploading the file
batch_file = client.files.create( file=open(file_name, "rb"), purpose="batch"
)
# Creating the job
batch_job = client.batches.create( input_file_id=batch_file.id, endpoint="/v1/chat/completions", completion_window="24h"
)
batch_job = client.batches.retrieve(batch_job.id)
print(batch_job)

Nhận được kết quả

Tương tự như ví dụ đầu tiên, chúng ta có thể lấy kết quả sau khi tác vụ hàng loạt hoàn tất.

Nhắc nhở: kết quả không theo cùng thứ tự như trong tệp đầu vào. Hãy đảm bảo kiểm tra custom_id để khớp kết quả với các yêu cầu đầu vào

# Retrieving result file
result_file_id = batch_job.output_file_id
result = client.files.content(result_file_id).content
result_file_name = "data/batch_job_results_furniture.jsonl"
with open(result_file_name, 'wb') as file: file.write(result)
# Loading data from saved file
results = []
with open(result_file_name, 'r') as file: for line in file: # Parsing the JSON string into a dict and appending to the list of results json_object = json.loads(line.strip()) results.append(json_object)
# Reading only the first results
for res in results[:5]: task_id = res['custom_id'] # Getting index from task id index = task_id.split('-')[-1] result = res['response']['body']['choices'][0]['message']['content'] item = df.iloc[int(index)] img_url = item['primary_image'] img = Image(url=img_url) display(img) print(f"CAPTION: {result}\n\n")

 

Kết thúc

Trong sách hướng dẫn này, chúng ta đã xem hai ví dụ về cách sử dụng Batch API mới, nhưng hãy nhớ rằng Batch API hoạt động theo cùng một cách như điểm cuối Chat Completions, hỗ trợ các tham số giống nhau và hầu hết các mô hình gần đây (gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo...).

Bằng cách sử dụng API này, bạn có thể giảm đáng kể chi phí, vì vậy chúng tôi khuyên bạn nên chuyển đổi mọi khối lượng công việc có thể xảy ra không đồng bộ sang tác vụ hàng loạt với API mới này.

Xem thêm: tìm hiểu về tài khoản Chat GPT 4 chính hãng là gì? 

Hot Deal

Họ tên (*)

Số điện thoại (*)

Email (*)

Dịch vụ

Đăng ký để nhận bản tin mới nhất !