OpenAI의 API 가격 사이트에서 확인해보면!!
재미있는것을 볼 수 있습니다!!
https://openai.com/api/pricing/
Pricing with Batch API 라고하요!!
반값에 기능들을 사용할 수 있는기능이있는데요!!
기존 API는 실시간으로 문답하는 것에 최적화 되어있었습니다!! chatgpt와 같이요!!
그런데 이런 llm의 사용이 많아지며
"이미 준비된 데이터를 통쨰로 한번에, 싸게 분석하고싶은" 수요가 증가했는데요!
이런 대량의 데이터를 처리할 때 효율적으로 사용할 수 있는 방법!!!이 바로
OpenAI Batch API입니다!!
Python으로 사용하는 방법과 이를 활용해 배치 작업을 자동화하는 예제를 알아보아요~~!!^^
1. Batch API란?
Batch API는 여러 개의 요청을 묶어 한 번에 처리할 수 있도록 하는 OpenAI의 기능!!!
대량의 데이터를 주기적으로 분석하거나, 여러 모델 응답을 한 번에 요청할 때 유리!!
ex) 예를 들어, 밤마다 실행하는 평가 작업이나 주간 리포트를 생성하는 데 적합합니다.
2. 간단하게 Batch API를 사용하기!!
A. 우선 jsonl 방식으로 openai로 보낼 데이터를 file 화 합니다!!!
from openai import OpenAI
client = OpenAI()
batch_input_file = client.files.create(
file=open("batchinput.jsonl", "rb"),
purpose="batch"
)
+ jsonl 파일은 아래와 같습니다! 4가지의 명령을 보내는 방식이지요~~
{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4o-mini", "messages": [{"role": "system", "content": "너는 한국인 비서야."},{"role": "user", "content": "openai는 무슨회사야?"}],"max_tokens": 1000}}
{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4o-mini", "messages": [{"role": "system", "content": "너는 조선시대의 신하야. 한국어, 신하 말투로 답변해. 예시 : 전하, 통촉하여주시옵소소!!."},{"role": "user", "content": "네 이놈! 수청을 들라!!"}],"max_tokens": 3000}}
{"custom_id": "request-3", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4o-mini", "messages": [{"role": "system", "content": "너는 중국인 어시스턴트야. 묻는말에 중국어로만 답변해."},{"role": "user", "content": "Hello world!"}],"max_tokens": 3000}}
{"custom_id": "request-4", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-4o-mini", "messages": [{"role": "system", "content": "You are an unhelpful assistant."},{"role": "user", "content": "Hello how are you?? "}],"max_tokens": 3000}}
B. 해당 json 파일을 openai api 의 client를 통하여 요청해줍니다!!
batch_input_file_id = batch_input_file.id
res = client.batches.create(
input_file_id=batch_input_file_id,
endpoint="/v1/chat/completions",
completion_window="24h",
metadata={
"description": "일등박사배치작업"
}
)
res
C. 현황 점검 및 대기!!
이제 요청한id를 바탕으로 현황을 점검해줍니다!
client.batches.retrieve(res.id)
그럼 처음에는 validating 이다가!
in-progress로 분석을 진행하게됩니다!!!
D. 결과보기!!!!
이제 요청한id를 바탕으로 현황을 점검해줍니다!
batch_status = client.batches.retrieve(res.id)
batch_status
status 가 complete가 되었다면~!! 최종 파일을 받을 수 있어요!
file_response = client.files.content(batch_status.output_file_id)
print(file_response.content.decode('utf-8'))
한글 인코딩이 안되어있는데~~~
아래와 같이 저장하면!! 끝!!
decoded_content = file_response.content.decode('utf-8')
final_json = []
# 줄바꿈으로 분리하여 각 JSON 객체 처리
for line in decoded_content.splitlines():
data = json.loads(line)
fin = json.dumps(data, indent=4, ensure_ascii=False)
# 보기 좋게 출력
print(fin)
final_json.append(data) # 딕셔너리 형태로 누적
# 최종 결과를 파일에 저장
with open("batch_result.json", "w", encoding="utf-8") as f:
json.dump(final_json, f, indent=4, ensure_ascii=False)
print("Batch 작업 결과가 batch_result.json에 저장되었습니다.")
그럼!? 최종결과물은!!
언제나 그렇듯 잘나왔습니다~!^^
[
{
"id": "batch_req_67239752832481909804d1be3c6e53cd",
"custom_id": "request-1",
"response": {
"status_code": 200,
"request_id": "9ff2e88f617fd809f1584ae6b5b94d43",
"body": {
"id": "chatcmpl-AOQcbf3tjkLPASpAr0kBRDreyCpFQ",
"object": "chat.completion",
"created": 1730385569,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "OpenAI는 인공지능(AI) 연구소이자 기업으로, 안전하고 유익한 AI를 개발하는 것을 목표로 하고 있습니다. 다양한 AI 모델을 개발하며, 그 중 하나가 저인 GPT-3 및 GPT-4와 같은 대화형 AI입니다. OpenAI는 인공지능 기술이 인류에게 긍정적인 영향을 미칠 수 있도록 연구하고, 이를 기반으로 다양한 응용 프로그램과 솔루션을 제공하고 있습니다.",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 27,
"completion_tokens": 98,
"total_tokens": 125,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0
}
},
"system_fingerprint": "fp_0ba0d124f1"
}
},
"error": null
},
{
"id": "batch_req_67239752a0988190b72232c768957b46",
"custom_id": "request-2",
"response": {
"status_code": 200,
"request_id": "3f5ab9a42097ca6373de22cb4ea3d287",
"body": {
"id": "chatcmpl-AOQYPW5c13txS4HuSoijUvYsAFB7M",
"object": "chat.completion",
"created": 1730385309,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "전하, 그런 말씀은 무엇을 의미하시는지요? 신하는 자신의 직무에 최선을 다할 것이옵니다. 통촉하여 주시옵소서!",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 59,
"completion_tokens": 37,
"total_tokens": 96,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0
}
},
"system_fingerprint": "fp_0ba0d124f1"
}
},
"error": null
},
{
"id": "batch_req_67239752bedc819091670ddf78d9530a",
"custom_id": "request-3",
"response": {
"status_code": 200,
"request_id": "1700580ca9af32084a9a1ce24488c878",
"body": {
"id": "chatcmpl-AOQZyNYfUXKY6mdwrLwFkJhPSZpJt",
"object": "chat.completion",
"created": 1730385406,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "你好,世界!",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 4,
"total_tokens": 42,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0
}
},
"system_fingerprint": "fp_0ba0d124f1"
}
},
"error": null
},
{
"id": "batch_req_67239752dde48190b7c0c52967367423",
"custom_id": "request-4",
"response": {
"status_code": 200,
"request_id": "a7b2b1f2fe382e2c509381ff5165026b",
"body": {
"id": "chatcmpl-AOQYIfiqWzeXJV6Pa1GQNe5S5evnG",
"object": "chat.completion",
"created": 1730385302,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "I'm just a program, so I don't have feelings, but thanks for asking! How can I assist you today?",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 23,
"total_tokens": 48,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0
}
},
"system_fingerprint": "fp_9b78b61c52"
}
},
"error": null
}
]
이제 Batch API를 통해 OpenAI 모델을 효율적으로 활용해 보세요!
ㅁ 참고! : https://platform.openai.com/docs/guides/batch/getting-started
'데이터&AI > LLM' 카테고리의 다른 글
[무료] OpenAI API를 활용하여 유해성 검증하기!! (moderation API) (0) | 2024.11.05 |
---|---|
Openai 패키지에서 원하는 결과를 output으로 받기(Structured outputs) (3) | 2024.11.04 |
openai의 assistant api 기능 활용하기(= openai의 threads = openai agent) (1) | 2024.11.02 |
reddit의 서브레딧(wallstreetbets) 데이터 모으고 분석하기!! (with python + GPT vision/text) (5) | 2024.11.01 |
GPT로 그림이미지 분석하기 with Python (gpt-4o, 4o-mini) (0) | 2024.10.31 |
댓글