이번 글에서는 지난번에 시작했던, 프롬프트 엔지니어링을 이용해서 GPT에게 원하는 답을 얻는 방법 중 GPT에게 명확하게 구체적으로 잘 묻는 방법에 이어서 GPT의 응답을 명확하게 하도록 요구하는 방법에 대해 이야기해 보겠습니다.
OpenAI GPT 출력 형식 설정으로 JSON 파싱과 프롬프트 엔지니어링
GPT에게 잘 묻는 방법
지난 글에서는 구분자를 이용해서 지시/요청/질문하는 형식을 말했어요. 오늘은 GPT에게 지시(instruction) 하기 위해 프롬프트를 작성할 때, 응답형식을 정의하는 방법에 대해 이야기해 볼게요. [일단 지난 글과 비슷하게 get_completion 함수를 다음과 같이 구성했고요.
def get_completion(prompt):
response = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0
)
return response.choices[0].message.content
프롬프트는 다음과 같이 GPT의 completion 형식을 JSON으로 요구하는 구성을 해 보죠.
prompt = f"""
3개의 가상 영화 제목과 감독, 장르를 목록으로 생성하세요.
JSON 형식으로 제공하되, 다음 키를 포함해야 합니다:
movie_id, title, director, genre.
"""
response = get_completion(prompt)
print(response)
위 코드를 실행하면 다음과 같이 GPT가 응답(completion)합니다.
응답을 보면, 일단 '내가 지시한대로 응답을 잘했구나!' 생각할 수 있습니다.
하지만, JSON 형식으로 요청한 목적이 뭔가 코드를 추가해서 다른 작업과 연계하려는 목적이었다면 JSON 형식을 Python 타입으로 변경해야 할 거예요. 물론, 응답 내용 Type은 json의 문자열(str)입니다만, python type으로 변환이 쉬워야 작업이 간단할 텐데, 위와 같은 응답 형식에서는 변환을 위해 여러 줄의 코드가 추가되어야만 할 거예요. JSON과 관련된 문자열을 제거하고 JSON의 시작 부분을 찾아야 할 테니까요.
그러면 추가 작업을 편리하게 하기 위해서는 어떻게 할 수 있을까요? 가장 간단한 것은 프롬프트에서 불필요한 응답을 제거하도록 하는 것일 거예요. 다음과 같이요.
prompt = f"""
3개의 가상 영화 제목과 감독, 장르를 목록으로 생성하세요.
JSON 형식으로 제공하되, 설명 없이, JSON 배열만 응답하세요. 마크다운 없이.
JSON 형식에는 다음 키를 포함해야 합니다:
movie_id, title, director, genre.
"""
위와 같이 프롬프트 내 "설명 없이, JSON 배열만 응답하세요. 마크다운 없이."를 추가하는 거예요. 물론, input token 수는 증가하겠죠. 그런데, 아래 출력 내용에서 보이듯 output token 수가 감소할 수 있다면 실제 token 수 증가는 없다고 볼 수 있겠죠. 사실 좀 더 세밀하게 생각해 보면 openai api의 경우, input 보다 output token 비용이 더 크므로 위와 같은 경우는 오히려 비용이 감소할 수도 있겠죠.
물론, 위의 출력도 아직은 type은 문자열(str)이에요. 그럼에도 앞뒤로 어떤 내용도 없으므로 python 형식으로 바로 변경이 가능해요. 다음과 같이 말이죠.
import json
movie_list = json.loads(response)
간단하죠? 앞에서 이미 봤던 json의 형태가 리스트 모양이므로, python type은 리스트가 되겠죠.
자, 그러면 python 리스트 구조를 생각하면서 위에서 json 출력 내용 중 "사라진 기억"을 출력하려면 어떻게 해야 할까요?
movie_list[1]['title']
# 출력: '사라진 기억'
movie_list[0]
# 출력: {'movie_id': 1, 'title': '시간의 경계', 'director': '김지훈', 'genre': 'SF'}
위와 같이 파이썬의 리스트로 간편하게 다룰 수 있어요.
프롬프트 엔지니어링으로 챗GPT와 OpenAI API 활용 - GPT에게 원하는 답을 얻는 법 #1
이번 글부터는 최근 이슈가 되고 있는 생성형 AI와 관련한 기술에 대해 시작해 보겠습니다. 그중 오늘부터 몇 회에 걸쳐 프롬프트 엔지니어링에 살펴보겠습니다. 물론, 가장 많이 사용되는 OpenAI
eco7t.tistory.com
'Generative AI > Prompt Engineering' 카테고리의 다른 글
OpenAI API input/output token(토큰) 계산 및 확인 방법 - LLM 모델 사용량과 비용 #1 (0) | 2025.05.23 |
---|---|
OpenAI API Chat Format으로 챗봇 만들기 - 프롬프트 엔지니어링 가이드 #5 (0) | 2025.05.13 |
GPT로 고객 리뷰 분석부터 뉴스 주제 추출까지 - 정보 추출 자동화 프롬프트 방법 #4 (0) | 2025.05.08 |
IPython.display로 HTML 출력하고 ipywidgets로 실시간 슬라이더까지! #3 (0) | 2025.04.30 |
프롬프트 엔지니어링으로 챗GPT와 OpenAI API 활용 - GPT에게 원하는 답을 얻는 법 #1 (0) | 2025.04.22 |