[μ 리] OpenAI API Document
μλ³Έ κ²μκΈ: https://velog.io/@euisuk-chung/μ 리-OpenAI-API-Document
OpenAIλ μ΅μ μΈκ³΅μ§λ₯(AI) λͺ¨λΈκ³Ό APIλ₯Ό μ 곡νμ¬ κ°λ°μλ€μ΄ λ€μν AI κΈ°λ₯μ μ½κ² μ ν리μΌμ΄μ
μ ν΅ν©ν μ μλλ‘ μ§μν©λλ€. λ€μμ μλ platform.openai.com
μμ μ 곡νλ λ¬Έμλ₯Ό νμ΄λ³΄λ©΄μ μ 리ν λ΄μ©μ
λλ€.
- μ°Έκ³ λ¬Έμ: https://platform.openai.com/docs/overview
-
μκ°
OpenAIλ₯Ό νμ©νλ©΄, μμ°μ΄ μ²λ¦¬, μ΄λ―Έμ§ μμ±, μμ± μΈμ λ± λ€μν AI μμ μ κ°λ¨νκ² κ΅¬νν μ μμΌλ©°, μ¬μ©μ κ²½νμ νμ μ μΌλ‘ κ°μ ν μ μμ΅λλ€. μ΄μ μ 무μμλ μ¬μ¬ μ¬μ©νκ² λ κ² κ°μ μ΄λ₯Ό μ λλ‘ νλ² μ΄ν΄λ³΄λ μκ°μ κ°μ Έλ³΄μμ΅λλ€ β
μ΄ κ°μ΄λλ (μμ λΈλ‘ νκΈ°ν΄ λ) OpenAI APIμ μ£Όμ μλν¬μΈνΈμ 6κ°μ§ μ£Όμ κΈ°λ₯μ μ€μ¬μΌλ‘, μ΄λ³΄μλ μ½κ² λ°λΌν μ μλ λ¨κ³λ³ μ€λͺ μ μ 곡ν©λλ€.
-
OpenAI APIμ κΈ°λ³Έ ꡬ쑰
OpenAI APIλ μ¬μ νμ΅λ AI λͺ¨λΈμ νΈμΆνμ¬ λ€μν μμ μ μνν μ μκ² ν©λλ€. APIλ μ¬λ¬ κ°μ§ μλν¬μΈνΈ(Endpoints)λ₯Ό μ 곡νλ©°, κ° μλν¬μΈνΈλ νΉμ μμ μ μ²λ¦¬νλ μν μ ν©λλ€. APIμ ꡬ쑰λ κ°λ¨νμ§λ§ λ§€μ° κ°λ ₯νλ©°, μ΄λ₯Ό ν΅ν΄ AI κΈ°λ₯μ μ§κ΄μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
2.1 μλν¬μΈνΈλ?
μλν¬μΈνΈλ OpenAI μλ²μ μνΈμμ©νλ URLλ‘, νΉμ AI λͺ¨λΈμ νΈμΆνκ±°λ κΈ°λ₯μ μνν λ μ¬μ©νλ κ²½λ‘μ λλ€.
-
μλ₯Ό λ€μ΄, GPT λͺ¨λΈμ νΈμΆνλ €λ©΄
/v1/completions
μλν¬μΈνΈλ‘ μμ²μ 보λ΄μΌ ν©λλ€.openai.ChatCompletion.create()
μ κ°μ ν¨μ νΈμΆμ λ΄λΆμ μΌλ‘ OpenAI APIμ/v1/completions
μλν¬μΈνΈλ‘ μμ²μ 보λ΄λ λ°©μμ λλ€.OpenAI λΌμ΄λΈλ¬λ¦¬
λ₯Ό μ¬μ©ν λ, μ΄λ° ν¨μλ€μ κ°κ°μ μλν¬μΈνΈμ λ§€νλμ΄ μμ΄μ, κ°λ°μλ APIμ μλν¬μΈνΈ URLμ μ κ²½ μ°μ§ μκ³ λ νΈλ¦¬νκ² AI κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
-
μ£Όμ μλν¬μΈνΈ λ° μν
OpenAIλ λ€μν AI κΈ°λ₯μ μ 곡νλ μ¬λ¬ μλν¬μΈνΈλ₯Ό κ°μ§κ³ μμΌλ©°, κ° μλν¬μΈνΈλ κ³ μ ν μν μ μνν©λλ€. μ΄ ν¬μ€ν μμλ μμ£Ό μ¬μ©λλ μ£Όμ μλν¬μΈνΈμ κ·Έ μν μ μ€λͺ νκ³ , κ° μλν¬μΈνΈμ λν κ°λ¨ν μ½λ μμλ₯Ό μ 곡νκ² μ΅λλ€.
3.1 Chat Completions μλν¬μΈνΈ
- URL:
/v1/chat/completions
- μν : λνν AI μλ΅μ μμ±ν©λλ€. ChatGPTμ μ μ¬νκ² λνν ν둬ννΈλ₯Ό λ°μ μ¬μ©μμ μ§λ¬Έμ λ¬Έλ§₯μ λ§λ μλ΅μ μ 곡ν©λλ€.
- μ¬μ© μ: μ±λ΄, κ³ κ° μ§μ, λνν κ°μ΄λ, κ°μ λΉμ.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
11
12
13
import openai
openai.api_key = "your-api-key"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain the basics of quantum computing."}
]
)
print(response.choices[0].message['content'])
3.2 Fine-tuning μλν¬μΈνΈ
- URL:
/v1/fine-tuning
- μν : μ¬μ νλ ¨λ λͺ¨λΈμ μ¬μ©μμ νΉμ λ°μ΄ν°μ λ§κ² μΆκ°λ‘ νλ ¨μν΅λλ€. μ΄λ₯Ό ν΅ν΄ νΉμ λλ©μΈμ΄λ μμ μ λν μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- μ¬μ© μ: μλ£ λ°μ΄ν°μ νΉνλ ν μ€νΈ μμ±, νΉμ λΈλλ μΈμ΄ μ€νμΌμ νμ΅ν AI λͺ¨λΈ.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
import openai
openai.api_key = "your-api-key"
response = openai.FineTune.create(
training_file="file-abc123",
model="gpt-4"
)
print(response)
3.3 Batch μλν¬μΈνΈ
- URL:
/v1/batch
- μν : λλμ μμ²μ λΉλκΈ°μ μΌλ‘ μ²λ¦¬ν©λλ€. λκ·λͺ¨ λ°μ΄ν°μ μ λν νκ°, λΆλ₯, μλ² λ© μμ± μμ μ λμμ μνν μ μμ΅λλ€.
- μ¬μ© μ: λκ·λͺ¨ λ¬Έμ λΆλ₯, κ°μ± λΆμ, λλ ν μ€νΈ μλ² λ© μμ±.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
import openai
openai.api_key = "your-api-key"
response = openai.Batch.create(
model="gpt-4",
tasks=[{"prompt": "Analyze sentiment of this text"}, {"prompt": "Summarize this document"}]
)
print(response)
3.4 Image Generation μλν¬μΈνΈ (DALLΒ·E)
- URL:
/v1/images/generations
- μν : ν μ€νΈ μ€λͺ μ κΈ°λ°μΌλ‘ μ΄λ―Έμ§λ₯Ό μμ±ν©λλ€. μ°½μμ μ΄κ³ λ μ°½μ μΈ μ΄λ―Έμ§ μ μμ νμ©ν μ μμ΅λλ€.
- μ¬μ© μ: λ§μΌν μ΄λ―Έμ§ μμ±, κ·Έλν½ λμμΈ, μ½μ νΈ μνΈ.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
11
12
import openai
openai.api_key = "your-api-key"
response = openai.Image.create(
prompt="A futuristic cityscape with flying cars",
n=1,
size="1024x1024"
)
image_url = response['data'][0]['url']
print("Generated image URL:", image_url)
3.5 Text to Speech μλν¬μΈνΈ
- URL:
/v1/audio/generations
- μν : ν μ€νΈλ₯Ό μμ°μ€λ¬μ΄ μμ±μΌλ‘ λ³νν©λλ€. λ€μν μμ±μ μ§μνλ©°, μμ±μ μλμ ν€μ μ‘°μ ν μ μμ΅λλ€.
- μ¬μ© μ: μ€λμ€λΆ μ μ, μμ± μλ΄ μμ€ν , μ κ·Όμ± ν₯μ λꡬ.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
import openai
openai.api_key = "your-api-key"
response = openai.Audio.create(
model="gpt-4",
input="This is a test of the text to speech conversion."
)
print(response['data'])
3.6 Speech to Text μλν¬μΈνΈ (Whisper)
- URL:
/v1/audio/transcriptions
- μν : μμ± νμΌμ ν μ€νΈλ‘ λ³νν©λλ€. λ€μν μΈμ΄μ μ μΌνΈλ₯Ό μ§μνλ©°, λμ μ νλμ μμ± μΈμμ μ 곡ν©λλ€.
- μ¬μ© μ: νμλ‘ μλ μμ±, μλ§ μμ±, μμ± λͺ λ Ή μμ€ν .
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
11
import openai
openai.api_key = "your-api-key"
audio_file = open("audio.wav", "rb")
response = openai.Audio.transcribe(
model="whisper-1",
file=audio_file
)
print("Transcribed text:", response['text'])
3.7 Embeddings μλν¬μΈνΈ
- URL:
/v1/embeddings
- μν : ν μ€νΈλ₯Ό κ³ μ°¨μ 벑ν°λ‘ λ³ννμ¬ μλ―Έμ μ μ¬μ±μ κ³μ°ν μ μμ΅λλ€. κ²μ μμ§, μΆμ² μμ€ν λ±μμ νμ©λ©λλ€.
- μ¬μ© μ: ν μ€νΈ μ μ¬λ λΆμ, κ²μ μ΅μ ν, μΆμ² μμ€ν .
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
11
import openai
openai.api_key = "your-api-key"
response = openai.Embedding.create(
input="OpenAI provides powerful AI models",
model="text-embedding-ada-002"
)
embedding_vector = response['data'][0]['embedding']
print("Embedding vector:", embedding_vector)
3.8 Moderation μλν¬μΈνΈ
- URL:
/v1/moderations
- μν : μ λ ₯λ ν μ€νΈμ μμ μ±μ νκ°ν©λλ€. νμ€ λ°μΈ, νλ ₯μ νν, μ±μ μ½ν μΈ λ±μ νμ§νκ³ μ°¨λ¨ν μ μμ΅λλ€.
- μ¬μ© μ: μ¨λΌμΈ νλ«νΌμ μ½ν μΈ νν°λ§, μμ ν λν νκ²½ μ μ§.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
import openai
openai.api_key = "your-api-key"
response = openai.Moderation.create(
input="This is a sample text that might contain harmful content."
)
print(response['results'])
-
OpenAIμ 6κ°μ§ μ£Όμ Capabilities
OpenAI APIλ λ€μν κΈ°λ₯μ μ 곡νλ©°, μ΄λ₯Ό ν΅ν΄ ν μ€νΈ μμ±, μ΄λ―Έμ§ μ²λ¦¬, μμ± μΈμ λ± λ€μν μμ μ μνν μ μμ΅λλ€. μ¬κΈ°μμλ OpenAIμ 6κ°μ§ μ£Όμ Capabilitiesμ λν΄ μ€λͺ ν©λλ€.
4.1 ν μ€νΈ μμ± (Text Generation)
ν μ€νΈ μμ±μ OpenAI APIμ κ°μ₯ κΈ°λ³Έμ μ΄λ©΄μλ κ°λ ₯ν κΈ°λ₯ μ€ νλμ λλ€. GPT-4μ κ°μ μΈμ΄ λͺ¨λΈμ μ¬μ©νμ¬ μ¬μ©μ ν둬ννΈμ κΈ°λ°ν λ€μν ν μ€νΈλ₯Ό μμ±ν μ μμ΅λλ€.
- μμ μ½λ:
1
2
3
4
5
6
7
response = openai.Completion.create(
model="gpt-4",
prompt="Write a story about a brave knight who fights a dragon.",
max_tokens=200
)
print(response.choices[0].text.strip())
4.2 μ΄λ―Έμ§ μ²λ¦¬ (Vision)
OpenAIμ DALLΒ·E λͺ¨λΈμ ν μ€νΈ μ€λͺ μ κΈ°λ°μΌλ‘ μ΄λ―Έμ§λ₯Ό μμ±νλ λ° μ¬μ©λ©λλ€. μ΄ κΈ°λ₯μ μ¬μ©νμ¬ μ°½μμ μ΄κ³ λ μ°½μ μΈ μ΄λ―Έμ§λ₯Ό λ§λ€ μ μμ΅λλ€.
- μμ μ½λ:
1
2
3
4
5
6
7
8
response = openai.Image.create(
prompt="A painting of a futuristic landscape with mountains and flying cars.",
n=1,
size="1024x1024"
)
image_url = response['data'][0]['url']
print("Generated image URL:", image_url)
4.3 ν¨μ νΈμΆ (Function Calling)
OpenAI λͺ¨λΈμ μΈλΆ APIλ λ΄λΆ ν¨μ νΈμΆμ μ§μν©λλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λΈμ΄ νΉμ μμ μ νμν λ°μ΄ν°λ₯Ό μ€μκ°μΌλ‘ νΈμΆνμ¬ μ¬μ©ν μ μμ΅λλ€.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "user", "content": "What is the weather like in New York?"},
],
functions=[
{
"name": "get_current_weather",
"description": "Gets the current weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "The name of the city"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
}
}
}
]
)
print(response.choices[0].message['content'])
-
μΆκ° μμ:
μλ μ½λλ DuckDuckGo κ²μκ³Ό OpenAIμ ν¨μ νΈμΆ(Function Calling) κΈ°λ₯μ κ²°ν©νμ¬ μ¬μ©μ μ§λ¬Έμ λ΅λ³νλ κ³Όμ μ 보μ¬μ€λλ€.
- μ¬κΈ°μ functions νλΌλ―Έν°λ₯Ό ν΅ν΄ duck_search ν¨μλ₯Ό μ μνκ³ , messagesμ μμ€ν μ§μμ μ¬μ©μ μ§λ¬Έμ ν¬ν¨μν΅λλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import openai
import json
from duckpy import Client
import ast
# DuckDuckGo ν΄λΌμ΄μΈνΈλ₯Ό μ΄κΈ°ν
duckduckgo_client = Client()
# DuckDuckGoμμ κ²μμ μννλ ν¨μλ₯Ό μ μ
def duck_search(query) -> str:
output = duckduckgo_client.search(query)
return str(output)
# OpenAI APIλ₯Ό νΈμΆνμ¬ μ΄κΈ° μλ΅
completion = client.chat.completions.create(
model="gpt-3.5-turbo-0613",
temperature=0,
functions=[
{
"name": "duck_search",
"description": "Used to search online",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Translate the Korean content into English input query",
},
},
"required": ["query"],
},
}
],
messages=[
{"role": "system",
"content": "You must use the `duck_search` function to get information."},
{"role": "user",
"content": "μ‘°μ§ ν΄λ£¨λ μμΌμ΄ μΈμ μΌ?"},
]
)
print(completion)
4.4 ꡬ쑰νλ μΆλ ₯ (Structured Outputs)
OpenAI λͺ¨λΈμ JSONκ³Ό κ°μ ꡬ쑰νλ λ°μ΄ν°λ₯Ό μΆλ ₯ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ νΉμ νμμΌλ‘ λ°μ΄ν°λ₯Ό λ°μ μ μμ΄, νλ‘κ·Έλ¨μμ λ°μ΄ν°λ₯Ό λ μ½κ² μ²λ¦¬ν μ μμ΅λλ€.
- μμ μ½λ:
1
2
3
4
5
6
7
8
9
10
11
12
13
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": "Give me a recipe for chocolate cake."}],
functions=[{
"name": "generate_recipe",
"description": "Generates a
recipe",
"parameters": {"type": "object", "properties": {"ingredients": {"type": "array"}}}
}]
)
print(response.choices[0].message['content'])
4.5 볡μ‘ν μΆλ‘ (Reasoning)
OpenAI λͺ¨λΈμ 볡μ‘ν λ¬Έμ μ λν΄ λ Όλ¦¬μ μΌλ‘ μΆλ‘ ν μ μμ΅λλ€. μν λ¬Έμ ν΄κ²°, μ½λ λλ²κΉ λ± λ€μν μΆλ‘ μμ μ μνν μ μμ΅λλ€.
- μμ μ½λ:
1
2
3
4
5
6
7
response = openai.Completion.create(
model="gpt-4",
prompt="Solve the equation: 5x - 3 = 12",
max_tokens=50
)
print(response.choices[0].text.strip())
4.6 κ³ κΈ μ¬μ©λ² (Advanced Usage)
OpenAI APIλ ν ν° μ ν μ€μ , μ€νΈλ¦¬λ° μλ΅, λͺ¨λΈμ μ¨λ μ‘°μ κ³Ό κ°μ κ³ κΈ κΈ°λ₯μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ λͺ¨λΈμ μλ΅ μ€νμΌμ μΈλ°νκ² μ‘°μ ν μ μμ΅λλ€.
- μμ μ½λ (μ€νΈλ¦¬λ° μλ΅):
1
2
3
4
5
6
7
8
response = openai.Completion.create(
model="gpt-4",
prompt="Tell me a long story about a hero's journey.",
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.get("content", ""), end="")
-
νμΈνλλ λͺ¨λΈ μ¬μ© λ°©λ²
OpenAI APIλ μ¬μ νμ΅λ λͺ¨λΈλΏλ§ μλλΌ, νμΈνλμ ν΅ν΄ νΉμ μμ μ λ§κ² λͺ¨λΈμ μ‘°μ νμ¬ μ¬μ©ν μλ μμ΅λλ€. νμΈνλλ λͺ¨λΈμ νΉμ λλ©μΈ λλ μμ μ λν΄ μ±λ₯μ κ°μ νκΈ° μν΄ λ―ΈμΈ μ‘°μ λ λͺ¨λΈμ λλ€.
5.1 νμΈνλ λͺ¨λΈ νΈμΆ
νμΈνλμ΄ μλ£λλ©΄ ν΄λΉ λͺ¨λΈμλ κ³ μ ν IDκ° λΆμ¬λλ©°, model
νλΌλ―Έν°λ‘ μ΄ IDλ₯Ό μ¬μ©νμ¬ APIμμ νΈμΆν μ μμ΅λλ€.
- μμ μ½λ:
1
2
3
4
5
6
7
response = openai.Completion.create(
model="fine-tuned-model-id", # νμΈνλλ λͺ¨λΈ ID
prompt="Summarize the article about climate change.",
max_tokens=100
)
print(response.choices[0].text.strip())
-
κ²°λ‘
OpenAI APIλ λ€μν AI κΈ°λ₯μ μ 곡νλ©°, ν μ€νΈ μμ±, μ΄λ―Έμ§ μ²λ¦¬, ν¨μ νΈμΆ, ꡬ쑰νλ μΆλ ₯, 볡μ‘ν μΆλ‘ λ± λ€μν μμ μ μ½κ² μνν μ μμ΅λλ€. λν, μ¬μ νμ΅λ λͺ¨λΈμ μ¬μ©ν μ μμ λΏλ§ μλλΌ, νΉμ μ©λμ λ§κ² νμΈνλλ λͺ¨λΈμ ν΅ν΄ λ λμ μ±λ₯μ μ 곡λ°μ μ μμ΅λλ€.
μ€μ΅
- API ν€ λ°κΈ: OpenAI κ³μ μ κ°μ νκ³ API ν€λ₯Ό λ°κΈλ°μΌμΈμ.
- μλν¬μΈνΈ μ€ν: μ 곡λ μ½λλ₯Ό λ°νμΌλ‘ OpenAI APIμ λ€μν μλν¬μΈνΈλ₯Ό μ€νν΄ λ³΄μΈμ.
- νμΈνλ λͺ¨λΈ ꡬμΆ: μμ μ λ°μ΄ν°μ λ§μΆ° λͺ¨λΈμ νμΈνλνκ³ , κ³ μ ν AI μ루μ μ κ°λ°ν΄ 보μΈμ.
μ΄λ² ν¬μ€ν μμλ OpenAI APIμ κΈ°λ³Έ μ¬μ©λ²κ³Ό κ° μλν¬μΈνΈ, μ£Όμ κΈ°λ₯μ λν μ λ°μ μΈ κ°μ΄λλ₯Ό μ 곡ν©λλ€. μ΄λ₯Ό λ°νμΌλ‘ AI μ루μ μ λμ± ν¨κ³Όμ μΌλ‘ ꡬμΆν μ μμ κ²μ λλ€.
κ³μν΄μ Documents 보면μ μΆκ°λλ λ΄μ©μ΄ μμΌλ©΄ μΆκ°ν΄λ³΄κ² μ΅λλ€ :)