Step
1. API Key 발급받기
2. 기본 설정
3. API 사용하기
4. 결과 확인
1. API Key 발급받기
https://platform.openai.com/docs/overview
해당 사이트에 방문하여 줍니다.
프로젝트 API 키를 생성하셔도 좋고, 유저 API 키를 생성하셔도 사용이 가능합니다. 단, OpenAI는 프로젝트 API Key를 사용 권장합니다.
키를 생성하면, 해당 창이 뜹니다.
" 주의 " 해당 창을 벗어나면, 두 번 다시 API키를 조회할 수 없습니다.
이렇게 정상적으로 생성된 모습을 확인할 수 있습니다.
2. 기본 설정 및 셋팅
pip install python-dotenv
pip install openai
일단, 해당 패키지들을 install 해줍니다. ( 사실 뭔가 더 있었던거 같은데 기억이 안나서.. 에러 뜨면 설치해주세용 ㅎㅎ;;; )
다음 프로젝트 루트 경로에서 " .env " 파일을 만들어 api키를 상수로 선언해줍니다.
코드단에서 바로 api키를 사용해도 되긴 하지만, 외부에 api키가 보여지는걸 막기위해 해당 방법을 사용했습니다.
이후 py 파일 생성 후, import 해주고 객체를 만들어 api키를 할당해줍니다. 여기까지 하셨으면 프롬프트를 날릴 준비가 되었습니다 !
3. API 사용하기
openai.chat.completions.create(...)
해당 메소드를 사용하여, 요청하면 됩니다. 다음은 예제입니다.
completion = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "너는 사용자가 제시하는 도시들을 설명하는 관광 가이드야"
},
{
"role": "user",
"content": "서울, 파리에 대해 알려주는데 json형태로 답변해줘."
}
],
functions=test_function_descriptions,
function_call="auto",
response_format={"type": "json_object"},
temperature=0.5,
top_p=1
)
model : gpt에게 요청할 모델을 선택합니다. 외에도 다양한 모델이 있으며, 다음의 사이트에서 확인 가능합니다. https://platform.openai.com/docs/models
근데.. gpt-4로 공부했다가.. 저는 너무 비싸서 도망갔습니다.
messages : 역할군과 프롬프트를 설정해줄 수 있습니다.
role : system ) gpt에게 역할을 지정해줍니다. 저는 도시의 설명을 듣는 것이 목적이기 때문에 관광 가이드라는 역할을 지정해주었습니다.
role : user ) 해당 역할로 넘기는 content는 사실상 우리가 chat.openai.com에서 넘기는 채팅이라고 보시면 될 것 같습니다. 즉, 프롬프트입니다.
functions : gpt가 사용할 수 있는 사용자의 함수를 지정해줍니다. 저는 json형태를 넘겨주어 답변을 유도했습니다
function_call : gpt에게 함수 사용 여부를 넘기는 것입니다. auto로 하면, 사용 가능한 부분은 gpt가 임의로 적용합니다.
response_format : 답변의 형식을 지정 해주었습니다.
. [ 주의 ! json 형태의 답변을 원할 경우, user의 content 안에 json 답변을 원한다는 문구를 넣어주지 않으면 저는 에러가 났습니다 ! ]
temperature : 모델의 출력을 다양하게 만드는 데 사용됩니다.
값이 높을수록모델의 출력을 더 다양하고 창의적으로 만들고, 값이 낮을수록 모델의 출력이 더 집중되고 예측 가능하게 됩니다.
- 높은 temperature
- 출력이 더 무작위적이고 창의적일 수 있습니다.
- 다양한 표현과 답변을 생성할 수 있습니다.
- 때때로 비논리적이거나 불일치한 응답을 생성할 수 있습니다.
- 낮은 temperature
- 출력이 더 집중되고 예측 가능합니다.
- 응답이 더 일관되고 신뢰할 수 있습니다.
- 창의성과 다양성이 줄어들 수 있습니다.
top_p : 누적 확률의 임계값을 설정하여 모델이 출력을 생성할 때 고려할 토큰의 집합을 결정합니다. top_p 값이 1.0이면 모든 가능한 토큰이 고려되며, 값이 낮을수록 누적 확률이 top_p 미만인 토큰만 고려됩니다.
- 높은 top_p (예: 1.0):
- 모든 가능한 출력을 고려합니다.
- 더 다양하고 창의적인 응답을 생성할 수 있습니다.
- 때로는 덜 관련성이 있거나 비논리적인 답변이 나올 수 있습니다.
- 낮은 top_p (예: 0.1):
- 누적 확률이 top_p 미만인 토큰만 고려됩니다.
- 응답이 더 집중되고 일관되게 됩니다.
- 출력의 다양성과 창의성이 줄어들 수 있습니다
제가 지정한 json 형식은 아래와 같습니다.
test_function_descriptions = [
{
"name": "text_question",
"description": "사용자가 제시한 도시들의 특징을 담습니다.",
"parameters": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "사용자가 제시한 도시가 속한 국가를 나타냅니다."
},
"description": {
"type": "string",
"description": "사용자가 제시한 도시의 특징을 나타냅니다."
}
}
}
}
},
"required": ["country", "description"],
},
}
]
각 설명에 담길 설명을 기재해주면 gpt가 참조해서 해주더라구요 !
required를 설정하여 필수 부분도 설정해줄 수 있습니다.
+ 만약 array 형식의 json을 원하신다면, items를 넣어주어야 합니다.
4. 결과 확인
completion_json = json.loads(completion.choices[0].message.function_call.arguments)
print(completion_json)
넘어온 응답의 답변만 긁어서, json형식으로 만들어 뿌려주었습니다.
{
"cities":[
{
"country":"한국",
"description":"서울은 한국의 수도로서 현대와 전통이 공존하는 도시입니다."
},
{
"country":"프랑스",
"description":"파리는 프랑스의 수도로서 로맨틱한 분위기와 예술과 역사가 풍부한 도시입니다."
}
]
}
처음으로 공부하며 접근해본 방식이라, 틀린 부분, 미흡한 부분은 지적해주신다면 감사하겠습니다..
'Python' 카테고리의 다른 글
[ Python ] TextBlob을 이용한 영어 형태소 분석 해보기 (1) | 2025.02.09 |
---|---|
[ Python ] 일본어 형태소 분석기 MeCab을 설치해보자 (0) | 2025.02.09 |
[Python] CharacterTextSplitter의 chunk_size와 chunk_overlap의 동작 과정 (1) | 2024.12.15 |
[ Python ] py-hanspell 맞춤법 검사기 오류 ( result 오류, json.loads 에러 ) (2) | 2024.11.06 |
[ Python ] PyTorch Error : shm.dll not found (0) | 2024.05.20 |