목차
챗GPT 공부를 하려고 이곳저곳 헤메던 중 우연히 DeepLearning.AI에서 베타 기간 동안 무료 교육을 제공하는 걸 발견했습니다.
가서 직접 들어보셔도 좋을 것 같아 링크 공유드립니다. 바로가기
프롬프트를 어떻게 활용하는지, 프롬프트 엔지니어가 되려면 어떻게 해야 하는지 간략하게 나오는 것 같아서 바로 공부해봅니다.
1. 셋업
기본적으로 openai 라이브러리가 설치되어 있어야 합니다. 제 맥 노트북 기준으로 작성해보겠습니다.
!pip3 install openai
import openai
openai.api_key = '본인의 api key'
api_key는 유료임.
https://platform.openai.com/에서 유료로 결제해야 함.
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0,
)
return response.choices[0].message["content"]
get_completion 함수 사용. openai에서 제공하는 함수, 이 함수를 사용하면 나만의 어플리케이션을 만들 수 있음
model은 gpt-3.5-turbo나 gpt-4 중 1개를 선택할 수 있음
temperature는 모델이 출력하는 값이 얼마나 랜덤값이냐를 나타냄(0이면 덜 랜덤한 값이고 1이면 예상불가한 랜덤값도 발생할 수 있음)
2. 프롬프트 작성 원칙
1) 지시사항을 명확하고 구체적으로 작성해야 한다.
전략 1. 구분자를 사용하라
구분자란 ? 텍스트에서 특정 부분을 구별하는 데 사용되는 문자, 단어 또는 기호
예시 - 쉼표(,), 마침표(.), 따옴표(" "), 대괄호([]), 파이프 기호(|), 대시(-) 또는 물결표(~), 슬래시(/) 또는 역슬래시(), 태그(< > 또는 </ >), 콜론(:), 영상에서는 ```(역따옴표 세 묶음)을 사용합니다.
text = f"""
원하는 결과물을 만들기 위해선 어떻게 해달라고 가능한 명확하고 구체적인 지시사항을 전달해야 합니다.
그래야지만 원하는 결과물에 근접한 결과물을 만들 수 있고 부적절한 혹은 아예 틀린 답을 받지 않을 수 있습니다.
이것은 꼭 지시사항을 짧게 하라는 말이 아닙니다.
길고 짧고가 중요한 것이 아니고 얼마나 명확하고 구체적이냐가 중요합니다.
글을 길게 적으면(내용에 따라 다르겠지만) 더 구체적인 내용을 기재할 수 있기 때문에 이에 따라 더 좋은 결과가 나올 수도 있습니다.
"""
prompt = f"""
역따옴표(백틱) 세묶음 짜리로 구분되어 있는 텍스트 변수를 한 문장으로 요약해줘
```{text}```
"""
response = get_completion(prompt)
print(response)
결과 : 명확하고 구체적인 지시사항을 전달해야 원하는 결과물을 얻을 수 있다. 길이보다는 명확성이 중요하며, 길게 적어도 더 구체적인 내용을 담을 수 있다.
전략 2. 구조적인 결과물을 요청하라
LIST, JSON, HTML, DICT 등 컴퓨터가 친숙한 구조로 결과물을 요청하면 결과가 더 잘 나올 수 있음
prompt = f"""
파이썬 리스트 안에 1개의 dict를 만드는데 그 안에는 영화 제목과 장르, 주연 배우를 기록해줘.
dict의 key로 영화_id, 영화_제목, 영화_장르, 주연_배우를 사용해줘
"""
response = get_completion(prompt)
print(response)
movies = [
{
"영화_id": 1,
"영화_제목": "어벤져스: 엔드게임",
"영화_장르": "액션, 모험, 판타지",
"주연_배우": "로버트 다우니 주니어"
},]
movies는 제가 요청하지 않았지만 알아서 선언을 해줬네요.
전략 3. 요청사항에 부합하는 예시를 몇가지 들어주고 결과를 도출하도록 하라 ("Few-shot" prompting)
"Few-shot" prompting은 기계 학습에서 사용되는 기술 중 하나로, 머신 러닝 모델이 적은 양의 데이터로도 새로운 작업을 수행할 수 있도록 하는 기술임
예시를 들어주게 되면, 명확하고 구체적인 조건이 부여되기 때문에 보다 더 정확한 답변이 나올 확률이 높아짐
prompt = f"""
SQL 블로그 글을 쓰고 있어. 복사할 수 있게 아래의 형태 참고해서 예시 테이블 만들어줘
| product_id | product_name | price | quantity |
|------------|--------------|-------|----------|
| 1 | Apple | 1.50 | 10 |
"""
response = get_completion(prompt)
print(response)
결과 :
furniture_id | furniture_name | price | quantity |
1 | Sofa | 850.00 | 10 |
2 | Dining Table | 400.00 | 15 |
3 | Bed | 600.00 | 20 |
4 | Wardrobe | 800.00 | 5 |
5 | Office Chair | 120.00 | 8 |
2) 모델이 생각할 시간을 줘라
전략 1. 요구사항을 충족하기 위해 필요한 단계들을 구체적으로 전달하라
text = f"""
ChatGPT는 인공지능 기반의 대화형 언어 모델로, OpenAI에서 개발한 GPT-4 아키텍처를 기반으로 합니다. 이 모델은 매우 큰 데이터셋을 학습하여 자연어 처리 능력을 향상시킵니다. 사용자의 질문이나 주제에 따라 응답을 생성할 수 있으며, 다양한 주제와 상황에서 유용한 답변을 제공할 수 있습니다. ChatGPT는 일상 대화, 글쓰기 도움, 정보 검색, 문제 해결 등 다양한 용도로 사용될 수 있으며, 영어를 비롯한 여러 언어로도 활용 가능합니다. 하지만 이 모델은 2021년 9월까지의 지식만을 포함하고 있어 최신 정보에 대해서는 제한적일 수 있습니다.
"""
# example 1
prompt_1 = f"""
아래의 조건을 충족하는 글 써줘:
1 - ```으로 구분되어 있는 text를 한글로 요약해줘. 한 문장이면 좋겠어
2 - 그리고 나온 한글 요약본을 영어로 번역해줘
3 - 특징, 장점, 한계를 key로 하는 파이썬 dict 만들어줘
Text:
```{text}```
"""
response = get_completion(prompt_1)
print("Completion for prompt 1:")
print(response)
결과
Completion for prompt 1:
한글 요약: ChatGPT는 인공지능 대화 모델로, GPT-4 아키텍처를 기반으로 학습된 자연어 처리 능력을 가지고 있으며, 다양한 용도로 사용 가능하나 최신 정보에 대해서는 제한적일 수 있습니다.
영어 번역: ChatGPT is an AI-based conversational language model based on the GPT-4 architecture developed by OpenAI. This model improves its natural language processing ability by learning from a very large dataset. It can generate responses based on the user's questions or topics and provide useful answers in various topics and situations. ChatGPT can be used for various purposes such as everyday conversation, writing assistance, information retrieval, problem-solving, and can be used in various languages including English. However, this model may be limited in terms of the latest information as it only includes knowledge up to September 2021.
파이썬 dict:
```
{
"특징": "인공지능 대화 모델로, GPT-4 아키텍처를 기반으로 학습된 자연어 처리 능력을 가지고 있으며, 다양한 용도로 사용 가능하나 최신 정보에 대해서는 제한적일 수 있습니다.",
"장점": "매우 큰 데이터셋을 학습하여 자연어 처리 능력이 뛰어나며, 다양한 주제와 상황에서 유용한 답변을 제공할 수 있습니다. 여러 언어로도 활용 가능합니다.",
"한계": "2021년 9월까지의 지식만을 포함하고 있어 최신 정보에 대해서는 제한적일 수 있습니다."
}
```
전략 2. 모델이 본인의 솔루션을 만들고서 결론을 내리게 하라
프롬프트로 입력된 정보를 단순히 정답으로 인지할 수 있어서, 솔루션이 맞는지를 판별해야 하는 경우엔 필히, 미리 모델에게 솔루션을 자체적으로 구한 뒤 비교하도록 시켜야 함
prompt = f"""
학생의 답안이 올바른지 판단하는 것이 당신의 작업입니다.
문제를 풀기 위해 다음을 수행하세요:
- 먼저, 문제에 대한 당신의 해결책을 작성하세요.
- 그런 다음 학생의 해결책과 당신의 해결책을 비교하여 학생의 해결책이 올바른지 평가하세요.
직접 문제를 풀어보지 않으면 학생의 해결책이 올바른지 결정하지 마세요.
다음 형식을 사용하세요:
문제:
'''
문제 내용
'''
학생의 해결책:
'''
학생의 해결책 내용
'''
실제 해결책:
'''
해결책을 작성하는 과정과 실제 해결책 내용
'''
학생의 해결책이 방금 계산한 실제 해결책과 동일한가요?
'''
예 또는 아니오
'''
학생 성적:
'''
정답 또는 오답
'''
문제:
'''
태양광 발전 시설을 건설하려고 합니다. 재정 계획을 세울 때 도움이 필요합니다.
- 땅 값: 1평당 20만 원
- 태양광 패널 가격: 1평당 50만 원
- 관리 비용: 연간 500만 원의 고정 비용과 1평당 추가로 10만 원
첫 해 동안의 전체 비용을 평수에 따른 함수로 나타내세요.
'''
학생의 해결책:
'''
x를 태양광 발전 시설의 크기(평)라고 합시다.
비용:
1. 땅 값: 20x
2. 태양광 패널 가격: 50x
3. 관리 비용: 500 + 10x
전체 비용: 20x + 50x + 500 + 10x = 80x + 500
'''
실제 해결책:
'''
x를 태양광 발전 시설의 크기(평)라고 합시다.
비용:
1. 땅 값: 20x
2. 태양광 패널 가격: 50x
3. 관리 비용: 500 + 10x
전체 비용: 20x + 50x + 500 + 10x = 80x + 500
'''
학생의 해결책이 방금 계산한 실제 해결책과 동일한가요?
'''
학생 성적:
'''
"""
response = get_completion(prompt)
print(response)
결과 : 정답
3. 모델의 한계, 주의할 점
모델에 정보를 줘도 정확하게 반환을 못할 수 있다. 말이 되는 것 같지만 아래와 같이 사실 말이 안 되는 경우들이 있을 수 있다.
예시 > 세종대왕 맥북 던짐 사건 - https://m.hankookilbo.com/News/Read/A2023022215200000727
'AI > AI 스터디' 카테고리의 다른 글
GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 6 - 확장하기 (0) | 2023.05.11 |
---|---|
GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 5 - 변환하기 (0) | 2023.05.11 |
GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 4 - 감정 추론하기 (0) | 2023.05.07 |
GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 3 - 요약하기 (1) | 2023.05.06 |
GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 2 - 반복하기 (0) | 2023.05.04 |
댓글