danbibibi
article thumbnail

프롬프트 엔지니어링

  • Prompt : 사용자가 셸(터미널)에서 명령어 를 입력하는 대화창
  • Engineering : 공학은 자연과학, 수학, 엔지니어링 설 계 과정을 활용하여 기술적 문제를 해 결하고, 효율성과 생산성을 높이고, 시 스템을 개선하는 학문
  • Prompt Engineering > 컴퓨터(AI, LLM)에게 일을 ‘잘’ 시키는 일!
  • Prompt로 정확히 지시 내리기
    • 역할 할당
    • 참고 데이터 전달
    • 출력 구조 설정
    • 지시사항 전달
Hallucination
- AI가 사실이 아닌 정보를 생성하는 현상
- 존재하지 않는 데이터를 만들어내거나 잘못된 정보를 사실처럼 제공하는 경우를 포함
- LLM이 확률적으로 단어를 예측하는 방식으로 동작하기 때문에 발생
- 이 문제를 줄이기 위해 프롬프트 엔지니어링, 검증 시스템 도입, 인간 감수 과정, function calling을 통한 출처 활용 등이 필요

 

 

프롬프트 설계 시 고려 사항

프롬프트 제작에는 정해진 정답은 없지만, 고려해야 하는 것들은 있음

  • 다양한 상황과 요구 사항에 맞게 프롬프트를 적용할 수 있어야 함
  • 특정 목적이나 요구 사항에 맞춰 특화된 기능과 성능을 제공해야 함
  • 프롬프트의 품질과 결과가 일정해야 함
  • 프롬프트 제작과 운영에 필요한 비용이 효율적이어야함

 

OpenAI의 6가지 프롬프트 엔지니어링 전략

명확한 지시 ( Write clear instructions) 구체적인 프롬프트로 목표를 분명히 제시
참고자료 제공 ( Provide reference text) 모델이 더 잘 이해하고 응답할 수 있도록 배경 정보 제공
작업 분해 (Split complex tasks into simpler subtasks) 복잡한 문제는 단계별로 나누기
생각 유도 (Give the model time to “think") 단계적 사고를 유도해 정확도 향상
외부 도구 활용 (Use external tools) 계산, 검색 등 부족한 능력을 보완
체계적 테스트 (Test changes systematically) 변경 시 성능 비교로 최적화 진행
ChatGPT가 정리해준 예시 ~
🧭 1. Write clear instructions (명확한 지시 작성)
✅ 핵심:
曖昧(애매)한 프롬프트는 불확실한 출력으로 이어진다.
🎯 어떻게?
명확한 목적, 대상, 형식, 스타일을 포함하세요. 지시문이 구체적일수록 모델의 응답 품질이 올라갑니다.
💬 예시:
❌ "설명해줘" ✅ "중학생이 이해할 수 있도록 '에너지 보존 법칙'을 간단한 예시와 함께 설명해줘"

📚 2. Provide reference text (참고 자료 제공)
✅ 핵심:
모델은 문맥에 매우 민감하므로, 관련 정보나 샘플을 직접 제공하면 훨씬 나은 결과를 얻을 수 있습니다.
🎯 어떻게?
글의 톤, 포맷, 사실 기반 정보를 함께 첨부 “이 자료를 참고해서” 라고 명시해도 효과적
💬 예시:
"다음 글을 요약해줘: [본문 입력]" 또는 "이 스타일을 따라 아래 내용을 써줘"

🔨 3. Split complex tasks into simpler subtasks (복잡한 작업을 간단한 단계로 나누기)
✅ 핵심:
한 번에 복잡한 작업을 맡기기보다는, 여러 단계로 나눠서 처리하면 더 정확함
🎯 어떻게?
작업을 세분화 → 각 단계마다 모델을 호출 “우선 요약해줘 → 다음은 요약을 바탕으로 제목을 정해줘” 식 접근
💬 예시:
1단계: “이 보고서를 5문장으로 요약해줘” 2단계: “요약한 내용을 바탕으로 캐치프레이즈를 만들어줘”

⏳ 4. Give the model time to “think" (생각할 시간을 주기)
✅ 핵심:
인간처럼 모델도 단계를 따라 생각하게 유도하면 더 논리적인 결과가 나옵니다. 이 방법을 "Chain of Thought Prompting"이라고도 합니다.
🎯 어떻게?
"Let's think step by step" "우선 조건을 정리하고, 그 뒤에 해결책을 제안해줘" 같이 지시
💬 예시:
“문제를 단계별로 해결해보자. 먼저, 문제의 조건을 정리하고, 그 후에 식을 세워줘”

🛠️ 5. Use external tools (외부 도구 활용)
✅ 핵심:
LLM은 계산, 검색, 실시간 정보에는 약하므로, 외부 도구(API, 코드 실행기, 계산기, 검색엔진 등)와 연동하면 강력해집니다.
🎯 어떻게?
모델이 구 호출 명령을 구성하고, 사람이 실행하거나 자동화 시스템이 처리 예: LangChain, Function Calling, Plugin 등
💬 예시:
“서울의 내일 날씨를 알려줘” → GPT가 get_weather("Seoul", "tomorrow") 함수 호출 → 외부 API 결과 기반 응답

🧪 6. Test changes systematically (변화를 체계적으로 테스트)
✅ 핵심:
프롬프트를 변경할 때는 비교 가능한 방식으로 실험해야 어떤 방식이 효과적인지 객관적으로 판단할 수 있습니다.
🎯 어떻게?
여러 프롬프트 버전을 준비하고, A/B 테스트 예: 정답률, 사용자 만족도, 응답 속도 등을 비교
💬 예시:
프롬프트 A: “중학생 수준으로 설명해줘” 프롬프트 B: “쉽고 친절하게 풀어서 설명해줘” → 어떤 쪽이 더 유용한지 비교

 

https://platform.openai.com/docs/examples

 

추가적인 프롬프트 엔지니어링 전략

모델 파라터 활용하기

  • temperaturetop_p는 GPT나 다른 언어 모델에서 텍스트 생성의 무작위성(창의성)을 조절하는 하이퍼파라미터
    • temperature : 0~2값을 가짐. 0.8이면 더 랜덤한 값, 0.2면 더 정적인 값
    • top_p : 누적되는 확률을 기반으로 예측 단어(토큰)을 제한 (temperature | top_p 파라미터는 동시에 조정하는 것은 추천하지 않음)
  • 서로 다른 방식으로 "얼마나 다양하게 말할까?"를 조정

temperature / top_p

  temperature  top_p
작동 방식 확률 분포 자체를 부드럽게/날카롭게 누적 확률 기준으로 단어 후보 필터링
통제 방식 전체 분포의 형태 조정 특정 범위 안에서만 샘플링
직관적 비유 "얼마나 평평하게 만들까?" "상위 몇 %만 볼까?"
함께 사용 가능? ✔️ 가능 (조합 사용 시 더욱 정밀 제어)  

 

프롬프트는 영어로!

  • 정밀도 향상과 비용 절감 효과
  • 대부분의 LLM은 영어 데이터를 기반으로 학습되었기 때문에, 영어로 프롬프트 를 작성하면 더 정확하고 정밀한 응답을 받을 가능성이 높고, 더 광범위한 지식 에 접근할 가능성이 높아
  • 일반적으로 한국어 토큰 수가 영어보다 많음 (영어는 공백을 기준으로 단 어를 구분하지만, 한국어에서는 음절, 형태소, 단어 등 다양한 기준을 합쳐 토큰 화가 진행)
  • 따라서 영어로 프롬프트를 구성하면 토큰 수를 줄여 api 사용 에 대한 비용을 절감할 수 있음

 

Pseudo Code(Pythonic Prompt)

  • 실제 코드처럼 보이지만, 정확히 실행되지는 않는 일종의 논리 흐름 지시문
  • GPT가 프로그래밍적 사고 구조에 맞춰 더 정확한 응답을 생성하도록 유도
  • 특히 Python 문법은 GPT 계열 모델이 가장 잘 이해하는 구조 중 하나

 

Chain of Thought (CoT)

  • 논리적으로 추론하는 방향으로 대답을 주게끔 하는 것 (+ 예시와 함께 질문)
  • 문제를 풀 때, 모델이 단계별로 사고 과정을 말하게 유도하는 프롬프트 기법
  • "정답은?" 대신 → "생각을 차근차근 정리해봐"
  • 추론 과정, 조건 확인, 계산 과정 등을 서술하도록 유도

 

단어 선택의 고도화

  • 동의어가 있을 때 현대 영어에서 많이 쓰는 단어를 쓸 수록 결과가 좋은 경향이 있음
  • gpt가 최근의 텍스트 데이터를 주로 학습했기 때문
  • 구글 문헌자료 1800~2022년 데이터를 기반으로 단어 체크해볼 수 있는 사이트 : https://books.google.com/ngrams/ 
  • 동의어 사전 : https://www.thesaurus.com/

 

긍정문 사용하기(부정문 삼가기)

 

Prompt Hub

유용한 prompt 모아 놓음

 

유출된 system prompt 예시

 

GitHub - jujumilk3/leaked-system-prompts: Collection of leaked system prompts

Collection of leaked system prompts. Contribute to jujumilk3/leaked-system-prompts development by creating an account on GitHub.

github.com

 

 

SLM 프롬프트 엔지니어링

 

프롬프트 엔지니어링 활용 (카카오톡 챗봇)

  • OpenAI API key 발급
  • 카카오톡 비즈니스 가입 및 세팅
  • 구름 IDE (혹은 클라우드 or 로컬 서버) 서버 세팅
# 카카오톡으로 챗GPT 만들기
from flask import Flask, jsonify, request
from openai import OpenAI

app = Flask(__name__)

# 채팅 모델 컨텍스트
CHAT_MODEL_CONTEXT = "당신은 한국어-영어 번역가 입니다. 한국어가 입력되면 그걸 영어로 번역해주세요"

# OpenAI API 클라이언트 설정
client = OpenAI(api_key="이곳에 여러분의 api key를 넣어주세요")


# API 엔드포인트
@app.route('/', methods=['POST'])
def chat_response():
    # 사용자 요청 데이터 추출
    user_request = request.json.get('userRequest', {})
    callback_url = user_request.get('callbackUrl')
    utterance = user_request.get('utterance', '')
    print(f"user_request: {user_request}")
    print(f"callback_url: {callback_url}")
    print(f"utterance: {utterance}")

    # 시스템 컨텍스트로 메시지 리스트 초기화
    messageList = [{"role": "system", "content": CHAT_MODEL_CONTEXT}]

    # 사용자 메시지를 메시지 리스트에 추가
    dicMessage = {"role": "user", "content": utterance}
    messageList.append(dicMessage)

    # OpenAI 채팅 모델에서 응답 받기
    completion = client.chat.completions.create(
        model="gpt-4o",
		max_tokens=200,
        messages=messageList
    )
    response_message = completion.choices[0].message

    # 응답 페이로드 준비
    response = {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": f"{response_message.content}"

                    }
                }
            ]
        }
    }

    return jsonify(response)


# 카카오톡으로 챗GPT 애플리케이션 실행
if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=8080)

 

 

프롬프트 엔지니어링 활용 (GPTs)

  • 사용자가 맞춤형 AI 챗봇을 생성하고 활용할 수 있는 OpenAI의 커스 텀 AI 기능
  • GPT 탐색 - 만들기 (구성 탭을 이용해 세부사항을 직접 입력 가능)

 

Explore GPTs

Discover and create custom versions of ChatGPT that combine instructions, extra knowledge, and any combination of skills.

chatgpt.com

 

 

GPTs & 챗봇 프롬프트 사례

 

AI 커뮤니티 - 지피터스

챗GPT에 대한 정보와 활용사례를 나누는 커뮤니티입니다.

www.gpters.org

 

GPTs 자동화 : 일잘러 장피엠의 GPTs 사례 및 GPTs 지침 | Notion

반복적인 비핵심 업무의 자동화

byungjun-jang.notion.site

 

프롬프트 엔지니어's Work Journal - sujin-prompt-engineer

안녕하세요. 프롬프트 엔지니어 강수진입니다. 프롬프트로 소통을 위한 공간입니다. 다양한 프롬프팅 실험 및 결과, 프롬프트 엔지니어링으로 이루어 낸 것들, LLM 프로젝트를 담습니다.

slashpage.com

 

profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로