Data Navigator

OpenAI API 를 이용한 챗봇 만들기02 - OpenAI API 파라미터 정리 본문

Python

OpenAI API 를 이용한 챗봇 만들기02 - OpenAI API 파라미터 정리

코딩하고분석하는돌스 2024. 11. 8. 16:33

OpenAI API 를 이용한 챗봇 만들기02 

- OpenAI API 파라미터 정리 - 

 

 

 

1. OpenAI API의 기본 사용법

OpenAI API의 기본 사용법은 아래와 같다.

import os
from openai import OpenAI
client = OpenAI()

client.api_key = os.environ['OPENAI_API_KEY']

# GPT API를 통해 요청 보내고 결과 가져오는 부분
response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "Python에 대해 알려주세요"},
    ],
)
print(response)

 

위의 코드를 실행하면 아래와 같은 결과가 나온다.

출력된 결과를 보면 생성된 답변 뿐만 아니라 요청시의 파라미터 값과 입력한 질문에 대한 토큰 수(prompt_tokens), 답변에 대한 토큰 수(completion_tokens)등의 정보도 함께 출려된다.

생성된 답변은 choices안에 리스트 형태로 들어있다.

다른 정보 없이 답변만 출력하고 싶다면 아래와 같이 출력할 수 있다.

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

 

response 안에서 choices 속성의 0번째 값을 가져오고 그 안에 있는 message 속성에서 content 속성의 값을 가져오라는 뜻이다.

위에 있는 response 값의 내용을 잘 보면 이해하기 쉬울 것이다. 

 

 

2. client.chat.completions.create() 함수의 속성

openAI의 API를 사용할 때 GPT의 역할(role)을 지정하고 GPT에게 질문을 하고, 응답을 받는 것은 chat.completions.create() 메서드를 이용해서 하게 된다. 

chat.completions.create() 메서드에는 여러가지 속성을 지정할 수 있는데 약 33개의 속성이 있다.

이 속성을 통해서 openAI의 API가 작동하는 방식을 원하는데로 조정할 수 있다.

client.chat.completions.create() 메서드의 주요 속성은 아래와 같다.

 

매개변수 설명 예시 비고
model 사용할 언어 모델 이름을 지정 gpt-3.5-turbo, gpt-4o-mini, gpt-4 필수
messages 대화의 맥락을 제공하는 입력. 역할(role)과 콘텐츠(content)로 구성 [ {"role":
"system", "content": "You are an AI that provides financial advice."},
{"role":
"user", "content": "How should I invest in stocks?"} ]
필수
temperature 응답의 창의성 조절 파라미터로, 0-2 범위 낮은 값(예: 0.2): 일관성 높은 응답
높은 값(예: 0.8): 창의적 응답
기본값: 1
top_p 샘플링에서 사용할 확률의 누적 분포 설정 0.1이면 상위 10% 확률의 토큰만 선택
temperature와 함께 조절하지 않는 것이 좋음
기본값: 1
max_tokens 생성할 응답의 최대 토큰 수 제한 max_tokens=100은 최대 100 토큰의 응답 생성
model과 입력 메시지의 토큰 합계 제한 있음
모델별로 상이
n 생성할 응답의 개수 지정 n=3이면 3개의 서로 다른 응답 반환  
stop 응답 생성을 멈출 시점을 정의할 수 있는 문자열 또는 문자열 배열 stop=["\n"]는 줄바꿈에서 응답 생성 중단  
presence_penalty 특정 단어가 얼마나 자주 등장할지를 조정하는 파라미터 값 범위: -2.0 ~ 2.0
높은 값: 새로운 주제 탐색 증가
낮은 값: 반복 단어 사용 줄임
 
frequency_penalty 기존에 등장한 단어의 반복 빈도를 억제하는 매개변수 값 범위: -2.0 ~ 2.0 / 높은 값: 단어 반복 빈도 줄임  
logit_bias 특정 토큰의 선택 확률 조정 {"50256": -100}은 종료 토큰의 선택 확률 감소  

 

 

3. model 의 종류와 특성

2024년 11월 08일 기준 openAI의 공식 플래그십 모델은 아래와 같다. 

 

워낙 개발속도가 빠르고 수시로 업데이트 되므로 위의 내용은 언제든 변경될 수 있다. 

모델에 대한 상세 내용은 아래의 링크를 참고하자

https://platform.openai.com/docs/models

 

 

4. role과 temperature 파라미터를 추가한 예제와 결과

GPT의 역할을 role의 system으로 지정하고 질문한 코드와 결과는 아래와 같다.

import os
from openai import OpenAI
client = OpenAI()

client.api_key = os.environ['OPENAI_API_KEY']

# GPT API를 통해 요청 보내고 결과 가져오는 부분
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "핀테크 전문가로서 대답해 줘",
         "role": "user", "content": "미국에서 가장 주목받는 핀테크 기업목록 \
                                     10개를 알려주고 주요 서비스에 대해서 알려주세요."
        },
    ],
    temperature = 0
)
print(response.choices[0].message.content)

 

temperature 를 너무 높게 하면 결과가 이상하게 나올 수 있다.

import os
from openai import OpenAI
client = OpenAI()

client.api_key = os.environ['OPENAI_API_KEY']

# GPT API를 통해 요청 보내고 결과 가져오는 부분
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "노벨상급 소설가로서 대답해줘",
         "role": "user", "content": "가을에 관련된 단편 소설 써줘"
        },
    ],
    temperature = 2
)
print(response.choices[0].message.content)

 

 

위와 같이 temperature 2로 설정 후 받은 답변은 언어도 일관성이 없고 내용도 알아볼 수 없다.

temperature 1 로 설정한 경우에는 정상적으로 답변이 출력되는 것을 볼 수 있다.

import os
from openai import OpenAI
client = OpenAI()

client.api_key = os.environ['OPENAI_API_KEY']

# GPT API를 통해 요청 보내고 결과 가져오는 부분
response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "노벨상급 소설가로서 대답해줘",
         "role": "user", "content": "가을에 관련된 단편 소설 써줘"
        },
    ],
    temperature = 1
)
print(response.choices[0].message.content)

 

5. role의 종류

역할 종류 설명 예시
system AI의 행동이나 성격을 설정합니다. { "role": "system", "content": "You are a helpful assistant." }
user 사용자가 AI에게 요청하는 메시지를 나타냅니다. { "role": "user", "content": "What is the weather today?" }
assistant AI가 이전에 생성한 응답을 나타냅니다. { "role": "assistant", "content": "The weather today is sunny and warm." }