https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/
ChatGPT Prompt Engineering for Developers
2 - Guidelines μ 리
Setup
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv('OPENAI_API_KEY')
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0, # this is the degree of randomness of the model's output
)
return response.choices[0].message["content"]
Principle of prompting
1) Write Clear and Specific
- Tactic 1 : Use delimiters (κ° ν
μ€ν¬λ§λ€ μν Annotation μ§μ )
- Triple quotes: ”””
- Triple backticks: ```
- Triple dashes: ---
- Angle brackets: <>
- XML tags: <tag> </tag>
text = f"""
λͺ¨λΈμ΄ μννκΈ°λ₯Ό μνλ μμ
μ λ€μκ³Ό κ°μ΄ ννν΄μΌ ν©λλ€.
κ°λ₯ν ν λͺ
ννκ³
κ°λ₯ν ν λͺ
ννκ³ κ΅¬μ²΄μ μΈ μ§μΉ¨μ μ 곡ν΄μΌ ν©λλ€. \
μ΄λ κ² νλ©΄ λͺ¨λΈμ μνλ μΆλ ₯μΌλ‘ μλ΄ν μ μμ΅λλ€.
κ΄λ ¨ μλ μλ΅μ λ°μ κ°λ₯μ±μ μ€μ
λλ€.
λλ μλͺ»λ μλ΅μ λ°μ κ°λ₯μ±μ μ€μ
λλ€. λͺ
νν ν둬ννΈλ₯Ό μμ±νλ κ²κ³Ό
λͺ
νν ν둬ννΈλ₯Ό μμ±νλ κ²κ³Ό 짧μ ν둬ννΈλ₯Ό μμ±νλ κ²μ νΌλνμ§ λ§μΈμ. \
λλΆλΆμ κ²½μ°, ν둬ννΈκ° κΈΈλ©΄ λ λͺ
ννκ³
λͺ¨λΈμ λν 컨ν
μ€νΈλ₯Ό μ 곡νμ¬ λ μμΈνκ³ κ΄λ ¨μ± μλ
λ μμΈνκ³ κ΄λ ¨μ± λμ μΆλ ₯μ μ»μ μ μμ΅λλ€.
"""
prompt = f"""
λ°±ν± μΈ κ°λ‘ ꡬλΆλ ν
μ€νΈλ₯Ό νλμ λ¬Έμ₯μΌλ‘ μμ½ν©λλ€.
```{text}```
"""
response = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": text}])
print(response)
# λͺ¨λΈ μμ
μ μν΄ λͺ
ννκ³ κ΅¬μ²΄μ μΈ μ§μΉ¨μ μ 곡ν΄μΌ νλ©°, κΈ΄ ν둬ννΈκ° λ λͺ
ννκ³ κ΄λ ¨μ± λμ μΆλ ₯μ μ»μ μ μλλ‘ λμμ€λλ€.
Avoiding Prompt Injections : get the model to say anything - μνλ κ²°κ³Όλ₯Ό μ»κΈ°μν΄ model λμΆ μ task μ λ ₯
- Tactic 2 : Ask for a structured output (Output format μ§μ )
ex) JSON, HTML
prompt = f"""
μΈ κ°μ§ κ΅¬μ± λμ μ λͺ©μ λͺ©λ‘μ μμ±ν©λλ€.
μ μ μ λ° μ₯λ₯΄μ λ°λΌ μΈ κ°μ κ΅¬μ± λμ μ λͺ© λͺ©λ‘μ μμ±ν©λλ€.
Provide them in JSON format with the following keys:
book_id, title, author, genre.
"""
response = get_completion(prompt)
print(response)
# 1. μΈ κ°μ§ κ΅¬μ± λμ μ λͺ© λͺ©λ‘:
# {
# "book_id": [1, 2, 3],
# "title": ["The Great Gatsby", "To Kill a Mockingbird", "1984"],
# "author": ["F. Scott Fitzgerald", "Harper Lee", "George Orwell"],
# "genre": ["Classic", "Classic", "Dystopian"]
# }
# 2. μΈ κ°μ κ΅¬μ± λμ μ λͺ© λͺ©λ‘ (μ₯λ₯΄: λ‘맨μ€):
# {
# "book_id": [4, 5, 6],
# "title": ["Pride and Prejudice", "Jane Eyre", "Wuthering Heights"],
# "author": ["Jane Austen", "Charlotte Bronte", "Emily Bronte"],
# "genre": ["Romance", "Romance", "Romance"]
# }
# 3. μΈ κ°μ κ΅¬μ± λμ μ λͺ© λͺ©λ‘ (μ μ: μ€ν°λΈ νΉ):
# {
# "book_id": [7, 8, 9],
# "title": ["The Shining", "It", "Misery"],
# "author": ["Stephen King", "Stephen King", "Stephen King"],
# "genre": ["Horror", "Horror", "Horror"]
# }
- Tactic 3 : Ask the model to check whether conditions are satisfied
- StepμΌλ‘ λ¨κ³ λͺ μ
text_1 = f"""
μ°¨ ν μμ λ§λλ κ²μ μ½μ΅λλ€! λ¨Όμ , μ½κ°μ \
λ¬Όμ λμ¬μΌ ν©λλ€. λλ λμ
μ»΅μ λ€κ³ ν°λ°±μ λ£μΌμΈμ. λ¬Όμ΄ μΆ©λΆν
μΆ©λΆν λ¨κ±°μμ§λ©΄ ν°λ°± μμ λΆμ΄μ£ΌμΈμ. \
μ°¨κ° μ°λ¬λ μ μλλ‘ μ μ κΈ°λ€λ¦¬μΈμ. λͺ λΆ ν
λͺ λΆ ν ν°λ°±μ κΊΌλ΄μΈμ. μνλ€λ©΄
μνλ€λ©΄ μ€νμ΄λ μ°μ λ₯Ό λ£μ΄ λ§μ λΌ μ μμ΅λλ€. \
κ·Έλ¦¬κ³ κ·Έκ² λ€μ
λλ€! λ§μλ μ°¨κ° μμ±λμμ΅λλ€.
μ°¨ ν μμ μ¦κΈ°μΈμ.
"""
prompt = f"""
μΌλ ¨μ μ§μΉ¨μ΄ ν¬ν¨λ κ²½μ° \
λ€μ νμμΌλ‘ ν΄λΉ μ§μΉ¨μ λ€μ μμ±ν©λλ€:
1λ¨κ³ - ...
2λ¨κ³ - ...
...
λ¨κ³ N - ...
ν
μ€νΈμ μΌλ ¨μ μ§μΉ¨μ΄ ν¬ν¨λμ΄ μμ§ μμ κ²½μ° \"λ¨κ³ μμ\
λΌκ³ μ°λ©΄ λ©λλ€.
\"\"\"{text_1}\"\"\"
"""
response = get_completion(prompt)
print("Completion for Text 1:")
print(response)
1λ¨κ³ - λ¬Όμ λμ
λλ€.
2λ¨κ³ - μ»΅μ ν°λ°±μ λ£μ΅λλ€.
3λ¨κ³ - λλ λ¬Όμ ν°λ°± μμ λΆμ΄μ€λλ€.
4λ¨κ³ - μ°¨κ° μ°λ¬λ μ μλλ‘ μ μ κΈ°λ€λ¦½λλ€.
5λ¨κ³ - λͺ λΆ ν ν°λ°±μ κΊΌλ
λλ€.
6λ¨κ³ - μνλ€λ©΄ μ€νμ΄λ μ°μ λ₯Ό λ£μ΄ λ§μ λΌ μ μμ΅λλ€.
7λ¨κ³ - μ°¨λ₯Ό μ¦κΈ°μΈμ.
- Tactic 4 : ”Few-shot” prompting
- μμ±λ κ²°κ³Όλ₯Ό 미리 λͺ¨λΈμκ² μ μν ν μμ
μ μννλλ‘ μμ²
- ex) κ²°κ³Ό: μ«μ 1~5 μ¬μ΄μ μ
- μμ±λ κ²°κ³Όλ₯Ό 미리 λͺ¨λΈμκ² μ μν ν μμ
μ μννλλ‘ μμ²
prompt = f"""
λΉμ μ μ무λ μΌκ΄λ μ€νμΌλ‘ λλ΅νλ κ² μ
λλ€.
<μ΄λ¦°μ΄>: μΈλ΄μ¬μ λν΄ κ°λ₯΄μ³μ£ΌμΈμ.
<ν μλ²μ§>: κ°μ₯ κΉμ \골μ§κΈ°λ₯Ό κΉμλ΄λ κ°μ
κ³κ³‘μ κ²Έμν μμμ νλ₯΄κ³ , κ°μ₯ \
κ°μ₯ μ
μ₯ν κ΅ν₯곑μ νλμ μμμ μμλκ³ , \\ κ°μ₯ 볡μ‘ν ννΌμ€νΈλ¦¬λ
κ°μ₯ 볡μ‘ν ννΌμ€νΈλ¦¬λ κ³ λ
ν μ€μμ μμλ©λλ€.
<ν μλ²μ§>: ν볡νλ ₯μ±μ λν΄ κ°λ₯΄μ³ μ£ΌμΈμ.
"""
response = get_completion(prompt)
print(response)
# <μ΄λ¦°μ΄>: ν볡νλ ₯μ±μ΄ λκ°μ?
<ν μλ²μ§>: ν볡νλ ₯μ±μ μ΄λ €μ΄ μν©μμλ λΉ λ₯΄κ² ν볡νλ λ₯λ ₯μ λ§ν΄μ. μλ₯Ό λ€μ΄, μ°λ¦¬κ° λμ΄μ‘μ λ μΌμ΄λλ κ²μ²λΌ λ§μ΄μ£ . κ·Έκ²μ μ°λ¦¬κ° κ°ν λ§μμ κ°μ§κ³ μκΈ° λλ¬Έμ κ°λ₯ν κ²μ
λλ€.
2) Give the model time to “think”
- Tactic 1 : Specify the steps to complete a task (Taskμ λν μλ£ λ¨κ³ μ§μ )
- Step 1:….
- Step 2:….
- Step N:….
text = f"""
맀λ ₯μ μΈ λ§μμμ λ¨λ§€ μκ³Ό μ§μ \"μΈλ κΌλκΈ°μμ λ¬Όμ κΈΈμ΄ μ€κΈ° μν΄ \
μΈλ κΌλκΈ°μ μλ μ°λ¬Όμμ λ¬Όμ κΈΈμ΄ μ€κΈ° μν΄
μ°λ¬Ό. μ¦κ²κ² λ
Έλλ₯Ό λΆλ₯΄λ©° μ€λ₯΄λ μ€ λΆνμ΄ μ°Ύμμμ΄μ.
μμ λμ κ±Έλ € λμ΄μ‘κ³ μ§κ³Ό ν¨κ»
μμ λμ κ±Έλ € λμ΄μ‘κ³ μ§λ κ·Έ λ€λ₯Ό λ°λΌ μΈλ μλλ‘ λ¨μ΄μ‘μ΅λλ€. \
μ½κ°μ μμ²λ₯Ό μ
μμ§λ§ λ μ¬λμ μ§μΌλ‘ λμμμ
μλ‘νλ ν¬μΉμ νμ΅λλ€. μ¬κ³ μλ λΆκ΅¬νκ³
λ μ¬λμ λͺ¨νμ¬μ κΊΎμ΄μ§ μμκ³ , κ·Έλ€μ \
κΈ°μ¨μΌλ‘ ννμ κ³μνμ΅λλ€.
"""
# example 1
prompt_1 = f"""
λ€μ μμ
μ μνν©λλ€:
1 - μΈ κ°μ \λ°±ν±μΌλ‘ ꡬλΆλ λ€μ ν
μ€νΈλ₯Ό 1λ¬Έμ₯μΌλ‘ μμ½ν©λλ€.
λ°±ν±μΌλ‘ 1λ¬Έμ₯μΌλ‘ ꡬλΆν©λλ€.
2 - μμ½μ νλμ€μ΄λ‘ λ²μν©λλ€.
3 - νλμ€μ΄ μμ½μ κ° μ΄λ¦μ λμ΄ν©λλ€.
4 - λ€μ \μ΄ ν¬ν¨λ json κ°μ²΄λ₯Ό μΆλ ₯ν©λλ€.
ν€: νλμ€μ΄_μμ½, μ«μ_μ΄λ¦.
λ΅μ μ€ λ°κΏμΌλ‘ ꡬλΆνμΈμ.
Text:
```{text}```
"""
response = get_completion(prompt_1)
print("Completion for prompt 1:")
print(response)
# μκ³Ό μ§μ μ°λ¬Όμμ λ¬Όμ κΈΈμ΄μ€λ€κ° λΆνμ μ°Ύμμμ μΈλ μλλ‘ λ¨μ΄μ‘μ§λ§, μμ²λ₯Ό μ
μμ§λ§ λͺ¨νμ¬μ κΊΎμ΄μ§ μμκ³ κ³μν΄μ ννμ μ΄μ΄κ°λ€.
#Résumé en français:
#Jack et Jill sont tombés en dessous de la colline en essayant de puiser de l'eau dans un puits au sommet de la colline, mais leur esprit d'aventure n'a pas été brisé et ils ont continué à explorer avec joie malgré leurs blessures.
#Noms dans le résumé en français:
#Jack, Jill.
#{"νλμ€μ΄_μμ½": "Jack et Jill sont tombés en dessous de la colline en essayant de puiser de l'eau dans un puits au sommet de la colline, mais leur esprit d'aventure n'a pas été brisé et ils ont continué à explorer avec joie malgré leurs blessures.", "μ«μ_μ΄λ¦": "Jack, Jill"}
- Tactic 2 : Instruct the model to work out its own solution before rushing to a conclusion (κ²°λ‘ λμΆ μ λͺ¨λΈμ΄ μ€μ€λ‘ ν΄κ²°νλλ‘ λͺ
μ)
- task μ§μ
prompt = f"""
Your task is to determine if the student's solution \
is correct or not.
To solve the problem do the following:
- First, work out your own solution to the problem.
- Then compare your solution to the student's solution \
and evaluate if the student's solution is correct or not.
Don't decide if the student's solution is correct until
you have done the problem yourself.
Use the following format:
Question:
```
question here
```
Student's solution:
```
student's solution here
```
Actual solution:
```
steps to work out the solution and your solution here
```
Is the student's solution the same as actual solution \
just calculated:
```
yes or no
```
Student grade:
```
correct or incorrect
```
Question:
```
I'm building a solar power installation and I need help \
working out the financials.
- Land costs $100 / square foot
- I can buy solar panels for $250 / square foot
- I negotiated a contract for maintenance that will cost \
me a flat $100k per year, and an additional $10 / square \
foot
What is the total cost for the first year of operations \
as a function of the number of square feet.
```
Student's solution:
```
Let x be the size of the installation in square feet.
Costs:
1. Land cost: 100x
2. Solar panel cost: 250x
3. Maintenance cost: 100,000 + 100x
Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000
```
Actual solution:
"""
response = get_completion(prompt)
print(response)
response = get_completion(prompt)
print(response)
# Let x be the size of the installation in square feet.
# Costs:
# 1. Land cost: 100x
# 2. Solar panel cost: 250x
# 3. Maintenance cost: 100,000 + 10x
# Total cost: 100x + 250x + 100,000 + 10x = 360x + 100,000
# Is the student's solution the same as actual solution just calculated:
# No
# Student grade:
# Incorrect
# >>> response = get_completion(prompt)
# >>> print(response)
# Let x be the size of the installation in square feet.
# Costs:
# 1. Land cost: 100x
# 2. Solar panel cost: 250x
# 3. Maintenance cost: 100,000 + 10x
# Total cost: 100x + 250x + 100,000 + 10x = 360x + 100,000
# Is the student's solution the same as actual solution just calculated:
# No
# Student grade:
# Incorrect
Model Limitations: Hallucinations
Hallucinations
: κ·Έλ΄λ―νκ² λ€λ¦¬μ§λ§ μ¬μ€μ΄ μλ λ΅λ³
Reducing hallucinations
: λ¨Όμ κ΄λ ¨ μ 보λ₯Ό μ°Ύμ λ€μ κ΄λ ¨ μ 보λ₯Ό λ°νμΌλ‘ μ§λ¬Έμ λ΅μ λμΆ
# LLM λͺ¨λΈμ κ³ μ§λ³ / μ¬μ€μ λν μ§μ μ¬λΆκ° modelμ λ°μλμ΄ μμ§ μμ μλ μ 보μ κ²½μ° λ§κ΅¬ λ΅λ³μ λ±μ΄λΈλ€.
μ€λ¬΄κ³ κ° λ§λ€κΈ°
text = "μ€λ¬΄ κ³ κ° λ§λ€μ΄μ€"
prompt = f"""
```{text}```
- Markdown νμ μμ±
- μ€λ¬΄ κ³ κ°λ ν κ°μ§ 물건μ λν΄ 20κ°μ "μ§λ¬Έμ λ΅"μ "μ" λλ "μλμ€"λ‘ λ΅μ ν΄μ λ§μΆλ λ¬Έμ
- μ / μλμ€ λ¬Έμ λ κ³¨κ³ λ£¨ μμ¬ μλ€.
λ΅λ³ νμ :
```
μ€λ¬΄ κ³ κ° λ¬Έμ :
```
Q1.... "μ§λ¬Έμ λ΅"
Q2.... "μ§λ¬Έμ λ΅"
Q3.... "μ§λ¬Έμ λ΅"
Q4.... "μ§λ¬Έμ λ΅"
Q5.... "μ§λ¬Έμ λ΅"
..
Q20....
```
μ€λ¬΄κ³ κ°μ λ΅:
```
"""
response = get_completion(prompt)
print(response)
# μ€λ¬΄ κ³ κ° λ¬Έμ : μ€λ§νΈν°
# Q1. μ΄ λ¬Όκ±΄μ μ μμ νμΈκ°μ? - μ
# Q2. μ΄ λ¬Όκ±΄μ ν΄λκ° κ°λ₯νκ°μ? - μ
# Q3. μ΄ λ¬Όκ±΄μ ν΅ν κΈ°λ₯μ΄ μλμ? - μ
# Q4. μ΄ λ¬Όκ±΄μ λ¬Έμ κΈ°λ₯μ΄ μλμ? - μ
# Q5. μ΄ λ¬Όκ±΄μ μΈν°λ·μ μ°κ²°μ΄ κ°λ₯νκ°μ? - μ
# Q6. μ΄ λ¬Όκ±΄μ μΉ΄λ©λΌ κΈ°λ₯μ΄ μλμ? - μ
# Q7. μ΄ λ¬Όκ±΄μ νλ©΄μ΄ μλμ? - μ
# Q8. μ΄ λ¬Όκ±΄μ ν°μΉμ€ν¬λ¦°μ΄ μλμ? - μ
# Q9. μ΄ λ¬Όκ±΄μ μ±μ λ€μ΄λ‘λν΄μ μ¬μ©ν μ μλμ? - μ
# Q10. μ΄ λ¬Όκ±΄μ κ²μμ ν μ μλμ? - μ
# Q11. μ΄ λ¬Όκ±΄μ μμ
μ λ€μ μ μλμ? - μ
# Q12. μ΄ λ¬Όκ±΄μ λμμμ λ³Ό μ μλμ? - μ
# Q13. μ΄ λ¬Όκ±΄μ μ§λ κΈ°λ₯μ΄ μλμ? - μ
# Q14. μ΄ λ¬Όκ±΄μ GPSκ° λ΄μ₯λμ΄ μλμ? - μ
# Q15. μ΄ λ¬Όκ±΄μ λΈλ£¨ν¬μ€ κΈ°λ₯μ΄ μλμ? - μ
# Q16. μ΄ λ¬Όκ±΄μ μμ΄νμ΄ κΈ°λ₯μ΄ μλμ? - μ
# Q17. μ΄ λ¬Όκ±΄μ NFC κΈ°λ₯μ΄ μλμ? - μ
# Q18. μ΄ λ¬Όκ±΄μ νμ΄ κΈ°λ₯μ΄ μλμ? - μ
# Q19. μ΄ λ¬Όκ±΄μ μνλ°©μ κΈ°λ₯μ΄ μλμ? - μλμ€
# Q20. μ΄ λ¬Όκ±΄μ 무μ μΆ©μ μ΄ κ°λ₯νκ°μ? - μ
'π οΈ Tools > π€ ChatGPT' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[LLM] ChatGPT Prompt Engineering for Developers - Inferring (0) | 2023.05.04 |
---|---|
[LLM] ChatGPT Prompt Engineering for Developers - Summarizing (0) | 2023.05.04 |
[LLM] ChatGPT Prompt Engineering for Developers - Iterative (0) | 2023.05.03 |
[ChatGPT] ChatGPT + Iphone User Mode 곡μ (0) | 2023.03.02 |
[ChatGPT API] μμ΄ν°+ChatGPT μ΅ν©! (GPT3.5 turbo) μ λ£ (0) | 2023.03.02 |