콘텐츠로 이동

05. 요청하는 방법

AI에게 잘 요청하는 법이에요.


프롬프팅에 대한 오해

많은 사람이 "프롬프트 엔지니어링"에 집착합니다.

  • "마법의 단어"를 찾으려 함
  • 복잡한 지시문을 작성
  • "전문가처럼 행동해"같은 역할 부여

결론부터 말하면: 대부분 불필요합니다.


보여주고, 설명은 줄이기

좋은 예시 하나가 긴 설명보다 낫다

— Prompting 101: Show, don't tell

핵심 원칙

[Bad] 지시를 개선하려고 노력
"전문적이고 간결하며 기술적으로 정확한 응답을 해주세요.
 코드는 모범 사례를 따르고 에러 핸들링을 포함해야 합니다."

[Good] 예시를 개선하려고 노력
"이런 스타일로 코드 작성해줘:

def fetch_user(user_id: str) -> User | None:
    try:
        response = api.get(f'/users/{user_id}')
        return User.from_dict(response.json())
    except ApiError as e:
        logger.error(f'Failed to fetch user {user_id}: {e}')
        return None
"

왜 예시가 더 효과적인가?

지시문 예시
"명확하게 써줘" 해석의 여지가 있음
"이런 형식으로" + 예시 정확히 무엇을 원하는지 알 수 있음

AI는 패턴 인식에 강합니다. 원하는 패턴을 보여주면 즉시 이해합니다.


프롬프팅 무용론

최신 AI 모델은 복잡한 프롬프트가 필요 없습니다.

불필요한 것들

❌ "당신은 10년 경력의 시니어 개발자입니다..."
❌ "단계별로 생각해주세요..."
❌ "실수하지 마세요..."
❌ "전문가처럼 응답해주세요..."

실제로 필요한 것

✅ 원하는 것을 명확히
✅ 관련 컨텍스트 제공
✅ 예시가 있으면 예시 제공

실용적인 요청 패턴

좋은 프롬프트의 공통점

나쁜 예: "로그인 기능 만들어줘" 좋은 예: "JWT 기반 로그인 API 만들어줘. refresh token 포함, 기존 User 모델 활용, /api/v1/auth 경로로." 차이는 구체적인 맥락이에요. 컨텍스트가 많을수록 결과가 정확합니다.

패턴 1: 컨텍스트 + 질문

[컨텍스트]
FastAPI 프로젝트에서 JWT 인증을 구현 중이야.
현재 access token만 사용하고 있어.

[질문]
refresh token을 추가하려면 어떻게 해야 해?

패턴 2: 현재 상태 + 원하는 상태

[현재]
def get_users():
    users = db.query(User).all()
    return users

[원하는 것]
- 페이지네이션 추가
- 총 개수도 함께 반환
- 정렬 옵션 추가

패턴 3: 예시 제공

이 함수를 다른 엔티티에도 적용하고 싶어:

# 기존 (참고용)
def create_user(data: UserCreate) -> User:
    user = User(**data.dict())
    db.add(user)
    db.commit()
    return user

# 만들어줘
create_order, create_product도 같은 패턴으로

패턴 4: 제약 조건 명시

로그인 API 만들어줘.

제약:
- 외부 라이브러리 최소화
- 기존 User 모델 활용
- /api/v1/auth 경로 사용

피해야 할 것들

1. 과도한 역할 부여

❌ "당신은 Google의 수석 엔지니어이고, 20년 경력의..."

✅ "이 코드 리뷰해줘"

2. 불필요한 강조

❌ "반드시! 꼭! 절대로! 실수하지 말고!"

✅ 원하는 결과를 명확히 설명

3. 모호한 요청

❌ "더 좋게 만들어줘"

✅ "성능을 개선해줘. 특히 DB 쿼리 횟수를 줄이고 싶어"

4. 한 번에 너무 많은 요청

❌ "로그인, 회원가입, 비밀번호 찾기, 소셜 로그인 다 만들어줘"

✅ "먼저 로그인부터 만들자"

대화로 발전시키기

한 번에 완벽한 결과를 기대하지 마세요. 대화를 통해 점진적으로 발전시키세요.

> 사용자 검색 API 만들어줘

[Claude 구현]

> 좋은데, 대소문자 구분 없이 검색되게 해줘

[수정]

> 검색 결과가 너무 많을 수 있으니 limit 파라미터 추가해줘

[최종]

이 방식이 처음부터 완벽한 요구사항을 작성하려는 것보다 빠르고 정확합니다.


효과적인 피드백

결과가 마음에 안 들 때

구체적으로

❌ "이건 내가 원한 게 아니야"

✅ "에러 핸들링이 빠져 있어. try-except 추가해줘"

예시로

❌ "더 깔끔하게"

✅ "이런 스타일로 다시 써줘:
   [원하는 스타일의 예시 코드]"

방향 제시

❌ "다시 해줘"

✅ "함수가 너무 길어. 50줄 이하로 분리해줘"

한 줄 요약

원하는 것을 보여주세요. 설명하지 말고.

복잡한 프롬프트 기법보다

  • 명확한 컨텍스트
  • 좋은 예시
  • 구체적인 피드백

이 세 가지면 충분합니다.


다음 단계

프롬프트 요령을 익혔다면


참고 자료