๐Ÿค– AI/ML ๐ŸŒฑ ์ž…๋ฌธ

ChatGPT API ํ™œ์šฉ

OpenAI API๋กœ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ

โฑ๏ธ 5์‹œ๊ฐ„ ๐Ÿ‘๏ธ 26 ์กฐํšŒ โญ ์ถ”์ฒœ ๊ฐ•์ขŒ
๐Ÿ“– ๊ฐ•์ขŒ ๋‚ด์šฉ
# ChatGPT API ํ™œ์šฉ ๊ฐ€์ด๋“œ

## ํ•™์Šต ๋ชฉํ‘œ
OpenAI API๋กœ ChatGPT๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

## 1. OpenAI API๋ž€?
OpenAI์—์„œ ์ œ๊ณตํ•˜๋Š” AI ๋ชจ๋ธ API์ž…๋‹ˆ๋‹ค.
- GPT-4, GPT-4o ๋“ฑ ์ตœ์‹  ๋ชจ๋ธ
- ํ…์ŠคํŠธ ์ƒ์„ฑ, ๋Œ€ํ™”, ๋ถ„์„
- ์ด๋ฏธ์ง€ ์ž…๋ ฅ ์ง€์› (Vision)
- ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐ๋Šฅ

## 2. API ํ‚ค ๋ฐœ๊ธ‰
1. platform.openai.com ๊ฐ€์ž…
2. API Keys ๋ฉ”๋‰ด
3. Create new secret key
4. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ €์žฅ

## 3. Python ์„ค์น˜
pip install openai

ํ™˜๊ฒฝ๋ณ€์ˆ˜:
export OPENAI_API_KEY=sk-xxxxx

## 4. ๊ธฐ๋ณธ ํ˜ธ์ถœ
from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Hello"}
]
)

print(response.choices[0].message.content)

## 5. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant that speaks Korean."},
{"role": "user", "content": "What is Python?"}
]
)

## 6. ๋Œ€ํ™” ๊ธฐ๋ก ์œ ์ง€
messages = [
{"role": "system", "content": "You are a helpful assistant."}
]

def chat(user_input):
messages.append({"role": "user", "content": user_input})

response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)

assistant_message = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_message})

return assistant_message

## 7. ์ŠคํŠธ๋ฆฌ๋ฐ
stream = client.chat.completions.create(
model="gpt-4o",
messages=messages,
stream=True
)

for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="")

## 8. ํ•จ์ˆ˜ ํ˜ธ์ถœ (Tool Use)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}
}]

response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)

if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
# ํ•จ์ˆ˜ ์‹คํ–‰ ํ›„ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

## 9. ์ด๋ฏธ์ง€ ์ž…๋ ฅ (Vision)
import base64

with open("image.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {
"url": f"data:image/jpeg;base64,{image_data}"
}}
]
}]
)

## 10. ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ์ •
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
temperature=0.7, # ์ฐฝ์˜์„ฑ (0-2)
max_tokens=1000, # ์ตœ๋Œ€ ํ† ํฐ
top_p=1, # ๋‹ค์–‘์„ฑ
frequency_penalty=0, # ๋ฐ˜๋ณต ๋ฐฉ์ง€
presence_penalty=0 # ์ƒˆ ์ฃผ์ œ ์œ ๋„
)

## 11. ๋น„์šฉ ๊ด€๋ฆฌ
๋ชจ๋ธ๋ณ„ ๊ฐ€๊ฒฉ:
- gpt-4o: ์ž…๋ ฅ 5/์ถœ๋ ฅ 15 (๋ฐฑ๋งŒ ํ† ํฐ๋‹น USD)
- gpt-4o-mini: ์ž…๋ ฅ 0.15/์ถœ๋ ฅ 0.6

๋น„์šฉ ์ ˆ๊ฐ:
- gpt-4o-mini ์‚ฌ์šฉ
- max_tokens ์ œํ•œ
- ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”
- ์‘๋‹ต ์บ์‹ฑ

## 12. ์—๋Ÿฌ ์ฒ˜๋ฆฌ
from openai import RateLimitError, APIError
import time

def safe_call(messages, max_retries=3):
for i in range(max_retries):
try:
return client.chat.completions.create(
model="gpt-4o",
messages=messages
)
except RateLimitError:
time.sleep(2 ** i)
except APIError as e:
print(f"API Error: {e}")
raise
raise Exception("Max retries exceeded")

## 13. Node.js ์‚ฌ์šฉ
npm install openai

import OpenAI from "openai";

const openai = new OpenAI();

const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [{role: "user", content: "Hello"}]
});

console.log(response.choices[0].message.content);

## ์ถ”์ฒœ ํ•™์Šต ์ˆœ์„œ
1. ๊ธฐ๋ณธ API ํ˜ธ์ถœ
2. ๋Œ€ํ™” ๊ธฐ๋ก ๊ด€๋ฆฌ
3. ์ŠคํŠธ๋ฆฌ๋ฐ ๊ตฌํ˜„
4. ํ•จ์ˆ˜ ํ˜ธ์ถœ
5. ๋น„์šฉ ์ตœ์ ํ™”