0Pricing
AI Prompt Engineering · 강의

프롬프트에서 모호성 제거하기

지시문을 여러 방식으로 해석할 여지를 없애는 기법을 익힙니다.

프롬프트에서 모호성 제거하기은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

모호성이 인공지능에 미치는 영향

모호한 프롬프트는 모델이 여러 가지 타당한 해석 중 하나를 선택하도록 만듭니다. 모델은 보통 가장 일반적인 해석 하나를 골라 자신 있게 그 해석을 밀고 나가며, 자신이 선택했다는 사실은 알려 주지 않습니다.

그 결과 질문에는 맞지 않지만 형식은 완벽한 답변을 받게 됩니다. 보낸 후 출력물을 다시 작성하는 것보다 보내기 전에 모호함을 파악하고 제거하는 편이 빠릅니다.

고전적인 표현: '더 낫게 만들어 주세요'

'더 낫게 만들어 주세요'는 아마도 세상에서 가장 모호한 프롬프트일 것입니다. 어떤 면에서 더 낫게 만들라는 뜻일까요?

  • 더 짧게? 더 길게?
  • 더 격식 있게? 더 편안하게?
  • 예시를 더 많이? 더 적게?
  • 어조를 다르게? 구조를 다르게?
  • 문법을 바로잡기? 어휘를 다르게?

모델은 한 가지 측면을 골라 변경합니다. 원한 측면이 아니라면 계속 수정하는 악순환에 빠지게 됩니다.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

original_text = (
    'Our software helps companies manage their data. '
    'It has many features. Customers like it a lot.'
)

# Ambiguous improvement request
vague = f'Make this better:\n\n{original_text}'

# Unambiguous improvement request
specific = (
    f'Rewrite this product description to be exactly 50% shorter, '
    f'more confident in tone, and replace vague phrases like "many features" '
    f'and "a lot" with specific claims. Do not add new features I have not mentioned.\n\n'
    f'{original_text}'
)

for label, prompt in [('VAGUE', vague), ('SPECIFIC', specific)]:
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=200,
        messages=[{'role': 'user', 'content': prompt}]
    )
    print(f'--- {label} ---')
    print(response.content[0].text)
    print()

여러 해석: 실제 예시

지시 대상이 정해지지 않은 대명사, 상대적인 형용사 또는 빠진 주어가 포함된 프롬프트는 모호할 가능성이 있습니다. 예를 들면 다음과 같습니다.

  • '성능을 개선해 주세요' — 무엇의 성능인가요? 속도, 정확도, 사용자 참여도 중 어느 것인가요?
  • '영향에 대해 작성해 주세요' — 긍정적인 영향인가요, 부정적인 영향인가요, 경제적 영향인가요, 사회적 영향인가요?
  • '이것을 고쳐 주세요' — 논리, 스타일, 형식 또는 문법 중 무엇을 고쳐야 하나요?
  • '전문적으로 만들어 주세요' — 격식 있는 어휘를 사용하라는 뜻인가요? 구조화된 문단을 작성하라는 뜻인가요? 이모지를 삭제하라는 뜻인가요?
import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Disambiguating 'fix this code'
buggy_code = 'def divide(a, b): return a / b'

ambiguous = f'Fix this:\n{buggy_code}'

unambiguous = (
    f'Fix only the division-by-zero bug in this function. '
    f'Add a guard that raises a ValueError with message "b cannot be zero" when b=0. '
    f'Do not change anything else — keep the function signature and return type identical.\n\n'
    f'{buggy_code}'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': unambiguous}]
)
print(response.choices[0].message.content)

모호성 해소 기법: 원하는 해석 밝히기

프롬프트가 여러 방식으로 해석될 수 있다는 것을 알고 있다면 원하는 해석을 명시적으로 밝히세요.

템플릿: '[모호한 용어]라고 할 때는 [구체적인 정의]를 의미합니다.'

예시는 다음과 같습니다.

  • '편집이라고 할 때는 문법과 철자만 고친다는 뜻입니다. 내용은 바꾸지 마세요.'
  • '간단하다고 할 때는 최대 3문장을 의미합니다.'
  • '전문적이라고 할 때는 1인칭 대명사와 축약형을 사용하지 않는다는 뜻입니다.'
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=256,
    messages=[{
        'role': 'user',
        'content': (
            'Edit the following paragraph. '
            'When I say "edit", I mean: fix grammar and punctuation only. '
            'Do NOT change vocabulary, sentence structure, or content. '
            'When done, list each change you made in a numbered list below the edited text.\n\n'
            'The team have went to the meeting early, but the manager '
            'werent there so they waited for alot of time before leaving.'
        )
    }]
)
print(response.content[0].text)

모호성 해소 기법: 범위 정의하기

개선이나 확장을 요청할 때 범위가 모호해지는 경우가 많습니다. 범위에 포함되는 것과 포함되지 않는 것을 정확히 정의하여 이 문제를 해결하세요.

범위 내: 모델이 변경해도 되는 것
범위 외: 변경하지 않고 그대로 유지해야 하는 것

의도하지 않은 변경이 심각한 문제를 일으킬 수 있는 코드 편집, 문서 수정, 데이터 세트 처리 작업에서는 특히 중요합니다.

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

code_block = '''
def calculate_tax(income, rate):
    return income * rate

def calculate_net(income, tax):
    return income - tax
'''

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': (
            'Add Python type hints to the following code.\n'
            'IN SCOPE: adding type hints to parameters and return values only.\n'
            'OUT OF SCOPE: changing function names, logic, docstrings, or formatting.\n'
            'Do not add any comments or docstrings.\n\n'
            + code_block
        )
    }]
)
print(response.choices[0].message.content)

모호성 해소 기법: 출력 형식 지정하기

원하는 형식이 있지만 이를 말하지 않을 때 출력이 모호해집니다. '데이터를 주세요'라고 하면 문단으로 제공해야 할까요? 목록으로 제공해야 할까요? 표로 제공해야 할까요? JSON 객체로 제공해야 할까요?

항상 원하는 정확한 출력 형식을 명시하세요. 모델은 명시적으로 알려 주면 그 형식에 정확히 맞춥니다.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

candidates_text = (
    'Alice: 5 years Python, worked at Stripe, has a CS degree.\n'
    'Bob: 3 years JavaScript, worked at a startup, self-taught.\n'
    'Carol: 8 years Java, worked at Google, has an MS in CS.'
)

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=300,
    messages=[{
        'role': 'user',
        'content': (
            'Extract the candidate data below into a JSON array. '
            'Each object must have exactly these keys: name, years_experience, primary_language, '
            'previous_employer, education_level. '
            'education_level values: DEGREE, MASTERS, SELF_TAUGHT.\n\n'
            + candidates_text
        )
    }]
)
print(response.content[0].text)

모호성 해소 기법: 모델에 명확히 해 달라고 요청하기

복잡한 프롬프트를 작성하면서 그 프롬프트가 모호하다는 것을 알고 있다면, 작업을 시도하기 전에 모델이 명확히 하기 위한 질문을 하도록 지시할 수 있습니다.

이는 인공지능 비서를 만들 때 특히 유용합니다. 훌륭한 인간 컨설턴트처럼 모델이 추측하는 대신 정보를 수집하기를 원하기 때문입니다.

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'system',
            'content': (
                'You are a professional copywriter. '
                'Before starting any writing task, ask exactly 3 clarifying questions '
                'that would most improve the output quality. '
                'Only proceed to write after the user answers those questions.'
            )
        },
        {
            'role': 'user',
            'content': 'Write a landing page headline for my business.'
        }
    ]
)
print(response.choices[0].message.content)

기준점이 필요한 상대적 표현

상대적 표현에는 고정된 의미가 없으므로 사람마다 다르게 이해합니다.

  • '간단한' — 1문장인가요? 3문장인가요? 1개 문단인가요?
  • '격식 있는' — 축약형을 사용하지 않는 것인가요? 학술 인용 형식인가요? 법률 용어인가요?
  • '쉬운' — 초등학교 5학년 수준의 읽기 난이도인가요? 전문 용어를 사용하지 않는 것인가요? 짧은 문장만 사용하는 것인가요?
  • '포괄적인' — 모든 주요 사례를 다루는 것인가요? 예외적인 경우도 포함하는 것인가요? 예시를 포함하는 것인가요?

모든 상대적 표현을 구체적이고 측정 가능한 표현으로 바꾸세요.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

# Relative terms mapped to concrete equivalents
mapping = [
    ('Give me a brief summary',   'Summarize in exactly 2 sentences'),
    ('Write something formal',    'Write using no contractions, no first person, and Flesch-Kincaid grade 12+'),
    ('Make it simple',            'Use only words a 10-year-old would know; max 15 words per sentence'),
    ('Be comprehensive',          'Cover at least 5 distinct subtopics with one example each'),
]

for vague, concrete in mapping:
    print(f'Vague:    "{vague}"')
    print(f'Concrete: "{concrete}"')
    print()

주체 모호성: 누가 행동을 수행하는가?

지시가 누구에게 또는 무엇에 적용되는지 분명하지 않을 때 주체가 모호해집니다.

'서론을 다시 작성해 주세요' — 무엇의 서론인가요? 붙여 넣은 문서인가요? 대화가 다섯 차례 오가기 전에 논의했던 문서인가요? 새로운 문서인가요?

'이것을 번역해 주세요' — 어느 부분인가요? 응답 전체인가요? 요약 부분만인가요? 코드 주석인가요?

특히 여러 차례 대화가 이어지는 상황에서는 의도한 특정 객체나 부분을 항상 명시하세요.

import openai

client = openai.OpenAI(api_key='sk-your-key-here')

# Clear subject reference prevents wrong-section edits
contract_text = (
    '## Section 1: Payment Terms\nPayment is due within 30 days.\n\n'
    '## Section 2: Termination\nEither party may terminate with 30 days notice.'
)

response = client.chat.completions.create(
    model='gpt-4o',
    messages=[{
        'role': 'user',
        'content': (
            'In the contract below, rewrite ONLY Section 2 (Termination). '
            'Change the notice period from 30 days to 90 days. '
            'Do not change Section 1 or any other text.\n\n'
            + contract_text
        )
    }]
)
print(response.choices[0].message.content)

시간 모호성: 언제인가?

프롬프트의 시간 관련 표현은 모호할 수 있습니다. '최근', '현재', '최신', '지금' 등이 그 예입니다.

모델의 학습 데이터에는 기준 날짜가 있으므로, 알려 주지 않으면 '지금'이 무엇을 의미하는지 알 수 없습니다. 시간에 민감한 작업에는 항상 정확한 날짜를 제공하세요.

  • '최근 연구' → '2024년 또는 2025년에 발표된 연구'
  • '현재의 모범 사례' → '2025년 1월 기준 모범 사례'
  • '최신 버전' → '버전 3.12(2024년 10월 출시)'
import anthropic
from datetime import date

client = anthropic.Anthropic(api_key='sk-ant-your-key-here')

today = date.today().isoformat()

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=256,
    system=f'Today is {today}. Use this as the reference for any time-related words.',
    messages=[{
        'role': 'user',
        'content': (
            'Describe the best practices for Python async programming '
            'as of January 2025. If your knowledge does not cover this timeframe, '
            'say so explicitly and share what you know up to your cutoff.'
        )
    }]
)
print(response.content[0].text)

모호성 감지기 만들기

프롬프트를 보내기 전에 다음과 같은 모호성 신호가 있는지 확인하세요.

  • 명확한 지시 대상이 없는 대명사: 그것, 이것, 저것, 그들
  • 상대적 형용사: 더 나은, 더 짧은, 격식 있는, 쉬운, 포괄적인, 최근의
  • 모호한 동사: 고치다, 개선하다, 업데이트하다, 만들다, ~에 대해 뭔가 하다
  • 범위 누락: 범위 내와 범위 외에 대한 언급이 없음
  • 형식 누락: 출력 형식이 지정되지 않음
  • 맥락 누락: 대상 독자가 누구인지, 출력물을 어떤 용도로 사용할지 알 수 없음
def scan_prompt_for_ambiguity(prompt):
    '''Simple heuristic scanner for common ambiguity patterns.'''
    warnings = []
    vague_verbs = ['fix', 'improve', 'make it', 'update', 'change it', 'redo']
    relative_adj = ['better', 'shorter', 'longer', 'formal', 'simple', 'recent', 'comprehensive']
    missing_format = ['json', 'table', 'list', 'bullet', 'paragraph', 'word', 'sentence']

    lower = prompt.lower()
    for v in vague_verbs:
        if v in lower:
            warnings.append(f'Vague verb detected: "{v}" — specify what change exactly')
    for a in relative_adj:
        if a in lower:
            warnings.append(f'Relative adjective: "{a}" — anchor with a measurable definition')
    if not any(f in lower for f in missing_format):
        warnings.append('No output format specified — add format, length, or structure')
    return warnings

test = 'Make the report better and more formal.'
print('Prompt:', test)
for w in scan_prompt_for_ambiguity(test):
    print(' WARNING:', w)

지식 확인

한 개발자가 다음과 같은 프롬프트를 보냈습니다. '코드를 단순화해 주세요.' 인공지능은 코드를 짧게 만들었지만, 개발자가 원한 것은 코드를 짧게 만드는 것이 아니라 더 읽기 쉬운 변수 이름을 사용하는 것이었습니다. 핵심 문제는 무엇이었나요?

모호성 제거 — 복습

모호함은 모델이 추측하도록 만들며, 모델의 추측은 사용자가 의도한 해석이 아니라 가장 평균적인 해석입니다. 모호성을 해소하는 핵심 기법은 다음과 같습니다.

  • 해석을 밝히기: 'X라고 할 때는 Y를 의미합니다'
  • 범위를 정의하기: 범위 내와 범위 외에 해당하는 것을 나열합니다
  • 출력 형식을 명시하기: JSON / 표 / 문단 / 문장 수
  • 상대적 표현에 기준점을 제시하기: '간단한' → '2문장', '격식 있는' → '축약형을 사용하지 않음'
  • 주체를 명시하기: '이 부분'이 아니라 '섹션 2'라고 합니다
  • 명확히 해 달라고 요청하기: 진행하기 전에 모델이 질문하도록 지시합니다

자주 묻는 질문

“프롬프트에서 모호성 제거하기” 강의는 무료인가요?

네 — “프롬프트에서 모호성 제거하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.

“프롬프트에서 모호성 제거하기”에서 뭘 배우나요?

지시문을 여러 방식으로 해석할 여지를 없애는 기법을 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“프롬프트에서 모호성 제거하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 구체성이 중요한 이유
  2. 프롬프트에서 모호성 제거하기
  3. 구체적인 세부 정보 추가하기
  4. 모호한 프롬프트와 구체적인 프롬프트 비교
← AI Prompt Engineering(으)로 돌아가기