프롬프트에서 모호성 제거하기
지시문을 여러 방식으로 해석할 여지를 없애는 기법을 익힙니다.
프롬프트에서 모호성 제거하기은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 구체성이 중요한 이유
- 프롬프트에서 모호성 제거하기
- 구체적인 세부 정보 추가하기
- 모호한 프롬프트와 구체적인 프롬프트 비교