우선 openai와 python-dotenv 패키지를 설치해줍니다
! pip install openai python-dotenv
잘 설치 되었는지 확인하기 위해 openai 라이브러리의 버전을 확인해봅시다
import openai
print(openai.__version__)
'1.48.0'
1.48.0버전이 잘 설치 되었습니다.
from dotenv import load_dotenv
load_dotenv()
True
load_dotenv() 함수를 사용해 .env 파일에 저장된 환경 변수를 로드합니다.
결과가 True라면, 이는 .env 파일이 성공적으로 로드되었음을 의미합니다.
아래 두 코드를 통해 OpenAI API 키를 설정하고 출력할 수 있습니다.
import os
api_key = os.getenv("OPENAI_API_KEY")
print(api_key)
import openai
openai.api_key = "Example-Api-Key"
print(openai.api_key)
우선 OpenAI 라이브러리에서 OpenAI 클래스를 가져와서, 이를 통해 API에 접근할 수 있는 client 객체를 생성합니다.
from openai import OpenAI
client = OpenAI()
그 후 ChatCompletion 객체를 생성해줍니다.
completion = client.chat.completions.create(
model='gpt-3.5-turbo',
messages=[
{
'role': 'user',
'content': '캐나다의 수도를 알려주세요'
}
],
temperature=0.7,
max_tokens=200
)
-model : 사용할 모델의 이름
-messages : 대화의 맥락을 담고 있는 메시지 리스트
-temperature : 생성되는 텍스트의 창의성 정도
-max_tokens : 응답에서 생성할 최대 토큰 수
print(completion)
응답을 출력 해보겠습니다.
ChatCompletion(
id='chatcmpl-AIHA1Wbpb6toLQRRWbXx9RTEd727D',
choices=[
Choice(
finish_reason='stop',
index=0,
logprobs=None,
message=ChatCompletionMessage(
content='캐나다의 수도는 오타와(Ottawa)입니다.',
refusal=None,
role='assistant',
function_call=None,
tool_calls=None
)
)
],
created=1728919233,
model='gpt-3.5-turbo-0125',
object='chat.completion',
service_tier=None,
system_fingerprint=None,
usage=CompletionUsage(
completion_tokens=20,
prompt_tokens=21,
total_tokens=41,
completion_tokens_details=CompletionTokensDetails(reasoning_tokens=0),
prompt_tokens_details={
'cached_tokens': 0
}
)
)
매우 길고 복잡한 구조입니다.
우리는 여기서 답변만 출력하기 위해 content를 출력 해줍니다.
print(completion.choices[0].message.content)
캐나다의 수도는 오타와(Ottawa)입니다.
답변이 잘 출력 되었습니다.
이제부터 Chat Completions 기능을 확인해보겠습니다.
n은 생성할 응답의 개수입니다.
예를 들어, n=1은 하나의 응답, n=3은 세 개의 응답을 의미합니다.
response_format은 생성된 응답의 형식을 지정하는 옵션입니다.
예를 들어, JSON 형식으로 응답을 받을 수 있으며, 특정 구조나 필드를 포함하도록 설정할 수 있습니다.
물론입니다! 다음은 4.3과 4.4에 대한 설명입니다.
seed는 생성된 응답의 무작위성을 제어하는 값입니다.
특정 시드를 사용하면 동일한 입력에 대해 항상 같은 출력을 생성할 수 있습니다.
temperature는 생성된 응답의 창의성을 조절하는 매개변수입니다.
일반적으로 0과 1 사이의 값을 가지며, 낮은 값(예: 0.2)은 더 결정적인 출력을 생성하고,
높은 값(예: 0.8)은 더 다양한 응답을 생성합니다.
prompt = """
11월 11일에 태어난 연예인 세명을 알려줘.
JSON 출력 포맷으로 출력해줘
# JSON 출력 포맷
-이름
-생년월일
"""
completion = client.chat.completions.create(
model='gpt-3.5-turbo',
messages=[
{
'role': 'system',
'content': prompt
},
],
n=3, # 세 개의 응답을 생성
response_format={'type': 'json_object'} # 응답 형식을 JSON 객체로 설정
seed=12, # 특정 시드를 사용하여 결과의 일관성을 보장
temperature=1 # 높은 값으로 창의적이고 다양한 응답을 생성
)
stream 출력은 응답을 기다리지 않고 단어가 생성되자마자 받을 수 있습니다.
긴 텍스트 생성이나 실시간 애플리케이션에서 유용합니다.
completion = client.chat.completions.create(
model='gpt-3.5-turbo',
messages=[
{
'role': 'system',
'content': '당신은 요리사입니다.'
},
{
'role': 'user',
'content': '짜파게티 레시피를 알려줘'
}
],
stream=True # 응답을 실시간으로 받음
)
이제 for문을 사용하여 결과를 받아 보겠습니다.
for chunk in completion:
print(chunk.choices[0].delta.content, end='', flush=True)
end='' 출력할 때 기본적인 줄바꿈('\n')을 없애줍니다.
flush=True 출력 버퍼를 즉시 비워서, 출력이 지연되지 않고 바로 화면에 표시되도록 합니다.
재료:
- 짜장면 소스 1개
- 스파게티면 200g
- 양파 1/2개
- 양배추 1/4개
.
.
.
화면으로는 확인할 수 없지만 답변이 실시간으로 출력되는 것을 확인할 수 있습니다.