Prompt Engineering For Developer

핡심 원칙 4κ°€μ§€

  1. 페λ₯΄μ†Œλ‚˜ μ„€μ •: AIκ°€ νŠΉμ • μ—­ν• (예: μ‹œλ‹ˆμ–΄ 개발자, λ³΄μ•ˆ μ „λ¬Έκ°€, μ½”λ“œ 리뷰어 λ“±)을 맑도둝 μ§€μ‹œ

    • λ‚˜μœ 예: "이 μ½”λ“œ λ¦¬λ·°ν•΄μ€˜."

    • 쒋은 예: "당신은 10λ…„ μ°¨ μ‹œλ‹ˆμ–΄ λ°±μ—”λ“œ κ°œλ°œμžμž…λ‹ˆλ‹€. Spring Security μ „λ¬Έκ°€μ˜ κ΄€μ μ—μ„œ 이 μ½”λ“œμ˜ λ³΄μ•ˆ 취약점을 μ€‘μ μ μœΌλ‘œ λ¦¬λ·°ν•΄μ£Όμ„Έμš”."

  2. λͺ…ν™•μ„±κ³Ό ꡬ체성: μš”μ²­μ˜ λͺ©μ κ³Ό κΈ°λŒ€ κ²°κ³Όλ₯Ό λͺ…ν™•νžˆ μ •μ˜

    • λ‚˜μœ 예: "μ½”λ“œλ₯Ό μ΅œμ ν™”ν•΄μ€˜."

    • 쒋은 예: "이 Python ν•¨μˆ˜μ˜ 가독성을 λ†’μ΄λŠ” λ°©ν–₯으둜 λ¦¬νŒ©ν† λ§ν•΄μ€˜. μ‹€ν–‰ μ†λ„λŠ” λ³€κ²½λ˜λ©΄ μ•ˆ 돼."

  3. μ œμ•½ 쑰건 μ„€μ •: AIκ°€ 따라야 ν•  ꡬ체적인 κ·œμΉ™μ΄λ‚˜ μ œν•œ 사항을 λͺ…μ‹œ

    • λ‚˜μœ 예: "API μ—”λ“œν¬μΈνŠΈλ₯Ό λ§Œλ“€μ–΄μ€˜."

    • 쒋은 예: "Java 17κ³Ό Spring Boot 3.3을 μ‚¬μš©ν•΄, μ™ΈλΆ€ 라이브러리 없이 RESTful API μ—”λ“œν¬μΈνŠΈλ₯Ό λ§Œλ“€μ–΄μ€˜. null μž…λ ₯도 λ°˜λ“œμ‹œ μ²˜λ¦¬ν•΄μ•Ό ν•΄."

  4. 단계별 사고: λ‹¨κ³„λ³„λ‘œ 문제λ₯Ό ν•΄κ²°ν•˜λ„λ‘ μœ λ„ν•˜μ—¬, 슀슀둜 논리적인 κ³„νšμ„ μ„Έμš°κ³  μž‘μ—…μ„ λΆ„ν•΄ν•˜λ„λ‘ 함

    • λ‚˜μœ 예: "이 κΈ°λŠ₯을 κ΅¬ν˜„ν•΄μ€˜."

    • 쒋은 예: "이 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 데 ν•„μš”ν•œ 단계λ₯Ό ν•˜λ‚˜μ”© μ„€λͺ…ν•΄μ€˜. 각 λ‹¨κ³„λ³„λ‘œ μ–΄λ–€ μž‘μ—…μ΄ ν•„μš”ν•œμ§€ ꡬ체적으둜 μ•Œλ €μ€˜." -> "κ·Έ 단계듀을 ν•˜λ‚˜μ”© μ‹€ν–‰ν•΄μ€˜."

μ‹€μ „ 기법

Zero-Shot vs. Few-Shot

  • Zero-Shot (λ‹¨μˆœ μš”μ²­): AI의 일반 μ§€μ‹μ—λ§Œ μ˜μ‘΄ν•˜μ—¬ λ°”λ‘œ μ§ˆλ¬Έν•˜λŠ” 방식

  • Few-Shot (μ˜ˆμ‹œ 제곡): AIμ—κ²Œ μž‘μ—…μ— λŒ€ν•œ μ˜ˆμ‹œλ₯Ό λ¨Όμ € 보여주고, κ·Έ μŠ€νƒ€μΌμ— 맞좰 μž‘μ—…μ„ μš”μ²­ν•˜λŠ” 방식

Few-Shot 기법은 AI의 '좜λ ₯ 곡간(Output Space)'을 κ°•λ ₯ν•˜κ²Œ 'μ œμ•½'ν•˜λŠ” 원리λ₯Ό μ΄μš©ν•œλ‹€.

AIλŠ” 제곡된 μ˜ˆμ‹œ(μ»¨ν…μŠ€νŠΈ)λ₯Ό λ°”νƒ•μœΌλ‘œ, λ‹€μŒμ— 생성될 λ‚΄μš©μ΄ μ–΄λ–€ ꡬ쑰와 μŠ€νƒ€μΌμ„ κ°€μ Έμ•Ό ν•˜λŠ”μ§€ 높은 ν™•λ₯ λ‘œ μ˜ˆμΈ‘ν•œλ‹€.

반볡적 κ°œμ„ 

첫 번째 닡변에 λ§Œμ‘±ν•˜μ§€ 말고, κ·Έ 닡변을 μƒˆλ‘œμš΄ μ»¨ν…μŠ€νŠΈλ‘œ μ‚Όμ•„ μΆ”κ°€ μš”μ²­μ„ ν•˜λŠ” 방식이닀.

  1. λͺ…λ Ή: "μƒν’ˆ μ£Όλ¬Έ(Order)을 μ²˜λ¦¬ν•˜λŠ” OrderService 클래슀 λ§Œλ“€μ–΄μ€˜."

  2. AI: (μ΄ˆμ•ˆ μ½”λ“œ 생성)

  3. ν”Όλ“œλ°± 및 계속 반볡...

  4. AI: (μ΅œμ’… μ½”λ“œ μ™„μ„±)

이 기법은 AIμ™€μ˜ λŒ€ν™” λ‚΄μ—­ 전체가 'λˆ„μ  μ»¨ν…μŠ€νŠΈ'둜 μž‘λ™ν•˜λŠ” 원리λ₯Ό ν™œμš©ν•˜μ—¬, μ μ§„μ μœΌλ‘œ 결과물을 κ°œμ„ ν•΄ λ‚˜κ°€λŠ” 방식이닀.

  • μž₯점: μ μ§„μ μœΌλ‘œ λ³΅μž‘ν•œ 결과물을 μ™„μ„± κ°€λŠ₯

  • 단점: λŒ€ν™”κ°€ κΈΈμ–΄μ§ˆμˆ˜λ‘ μ»¨ν…μŠ€νŠΈ μœˆλ„μš° ν•œκ³„μ— λΉ λ₯΄κ²Œ 도달 κ°€λŠ₯

    • 토큰(λΉ„μš©) μ†Œλͺ¨κ°€ 컀지고 AI의 응닡 속도가 λŠλ €μ§€κ±°λ‚˜ λ§₯락을 μžƒμ„ 수 있음

    • λ³΅μž‘ν•œ μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ 주기적으둜 μ»¨ν…μŠ€νŠΈλ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 것이 μ’‹μŒ

Chain of Thought(CoT) & 단계별 μ‹€ν–‰

'단계별 사고' 원칙을 μ‹€μ œ μž‘μ—…μœΌλ‘œ μ—°κ²°ν•˜λŠ” κ°€μž₯ κ°•λ ₯ν•œ κΈ°λ²•μœΌλ‘œ, 'κ³„νš' 단계와 'μ‹€ν–‰' 단계λ₯Ό κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것이닀.

  • κ³„νš 수립(CoT)

    • λͺ…λ Ή: "κΈ°μ‘΄ UserService에 Redisλ₯Ό μ΄μš©ν•œ μΊμ‹œ λ ˆμ΄μ–΄λ₯Ό μΆ”κ°€ν•˜λ €κ³  ν•΄. ν•„μš”ν•œ μž‘μ—… 단계λ₯Ό μˆœμ„œλŒ€λ‘œ μ„€λͺ…ν•΄μ€˜."

  • 단계별 μ‹€ν–‰ 및 검증 (Execution): 각 단계λ₯Ό ν•˜λ‚˜μ”© μ‹€ν–‰ν•˜λ„λ‘ AI에 μ§€μ‹œν•˜μ—¬, κ°œλ°œμžκ°€ 각 λ‹¨κ³„μ˜ 결과물을 κ²€ν† ν•˜κ³  μŠΉμΈν•  수 있게 함

μ΄λŠ” AIκ°€ 슀슀둜 논리적인 κ³„νšμ„ μ„Έμš°κ³ (Chain of Thought), κ°œλ°œμžλŠ” κ·Έ κ³„νšμ„ κ²€ν† ν•˜κ³  μ œμ–΄(Control)ν•  수 있게 ν•œλ‹€.

μˆ˜λ™ μ»¨ν…μŠ€νŠΈ μ£Όμž…(Manual Context Injection)

AI의 μ»¨ν…μŠ€νŠΈ 뢄석이 μ™„λ²½ν•˜μ§€ μ•Šκ±°λ‚˜, ν˜„μž¬ 열리지 μ•Šμ€ 파일의 정보λ₯Ό AIκ°€ μ•Œμ•„μ•Ό ν•  λ•Œ κ°œλ°œμžκ°€ '사싀(Facts)'을 직접 μ»¨ν…μŠ€νŠΈμ— μ£Όμž…ν•˜λŠ” 기법이닀.

  • Few-Shot이 타일(Style)을 μ£Όμž…ν•œλ‹€λ©΄, 이 기법은 데이터(Data)λ₯Ό μ£Όμž…ν•˜λŠ” 방식

    • μ—λŸ¬ 둜그 / μ˜μ‘΄μ„± λͺ©λ‘ / μ™ΈλΆ€ λ¬Έμ„œ λ“±

  • AIκ°€ λͺ¨λ₯΄λŠ” 'ν˜„μž¬ μƒνƒœ'λ‚˜ 'μ™ΈλΆ€ 정보'λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ œκ³΅ν•˜μ—¬ μ •ν™•ν•œ λ‹΅λ³€ μœ λ„

Last updated

Was this helpful?