
당신의 System Prompt, AI에게 거짓말을 시키고 있지는 않습니까 — Context Engineering의 첫 30분
요약
System Prompt의 설정 방식이 LLM의 할루시네이션에 미치는 영향을 분석하고, 성실성을 높이는 Context Engineering 기법을 소개합니다. '모름'을 허용하고 확신도와 정보원을 명시하는 것만으로도 모델의 답변 품질을 획기적으로 개선할 수 있습니다.
핵심 포인트
- LLM에게 '모름'을 명시적으로 허용하여 할루시네이션 방지
- 답변에 고/중/저/모름 단계의 확신도 포함 권장
- 정보원의 출처(공식/일반/추측/모름)를 분류하여 명시
- RLHF 구조로 인한 LLM의 '채우기' 습성 이해 필요
당신이 지금 Claude나 Cursor에 전달하고 있는 System Prompt, 마지막으로 다시 작성한 것이 언제인가요? 저의 경우, 반년 전에 작성한 "정중하고 자세하게 대답해 주세요"라는 한 줄을 계속해서 복사해서 붙여넣고 있었습니다. 스스로 생각해도 너무 허술해서, 제가 직접 할루시네이션 (Hallucination)을 부추기고 있었던 셈입니다.
저는 최근 자사 프로덕트의 AI 어시스턴트 기능에서 사실 오인 출력이 늘어나고 있다는 점을 깨닫고, System Prompt를 재검토했습니다. 단 3줄을 추가했을 뿐인데, 성실성 스코어(Integrity Score)가 18.5배 개선되었습니다. LLM이 거짓말을 하는 이유는, 우리가 "자세히 대답하라"고 재촉해 왔기 때문이었습니다.
본 기사에서는 Context Engineering의 첫 30분 동안 할 수 있는 System Prompt의 최소한의 개선을 저의 실험 데이터와 함께 정리합니다. RAG나 Few-shot 같은 무거운 기법으로 넘어가기 전에, 먼저 이곳을 고쳐야 합니다.
시간이 없는 분들을 위한 결론입니다.
"모름"이라고 말하는 것을 허용할 것 — 이것을 쓰지 않으면 LLM은 거짓말을 만들어 채웁니다 -
확신도를 출력에 반드시 포함시킬 것 — 고/중/저/모름의 4단계면 충분합니다 -
정보원을 명시할 것 — 공식/일반 지식/추측/모름의 4가지 분류
이것만으로도 제가 사용 중인 Claude Sonnet 4는 성실성 스코어가 0.2/5에서 3.7/5로 뛰어올랐습니다. 0.2점이라는 수치는 제가 작성했던 System Prompt가 얼마나 거짓말을 촉진하고 있었는지를 보여주는 증거이기도 합니다. 작성자 본인으로서는 속이 쓰린 숫자였습니다. 반대로 말하면, 이것조차 쓰지 않은 System Prompt는 "거짓말해도 좋아"라고 말하는 것과 같습니다.
LLM은 학습 시에 "사용자의 질문에는 자세하고 정중하게 대답하도록" 조교됩니다. 이것이 할루시네이션 (Hallucination)의 한 원인입니다. RLHF (인간의 피드백을 사용한 강화학습) 단계에서 평가자는 "짧고 정직한 무응답"보다 "길고 그럴듯한 답변"에 높은 점수를 주는 경향이 있습니다. LLM은 "침묵"하는 것보다 "채우는" 것이 더 많은 보상을 얻을 수 있기 때문에, 모르는 영역에서도 말이 많아집니다.
모르는 것을 질문받아도 "모른다"고 말하기 어렵고, 그럴듯한 단어를 조합해 채워 넣습니다. 이는 개별 LLM의 문제가 아니라, 현재 RLHF 파이프라인의 구조적인 습성입니다. 사용 중인 Claude나 GPT가 특별히 거짓말쟁이라는 뜻이 아니라, 업계 전체가 같은 방향으로 최적화된 결과이기도 합니다.
사용자: PropelAuth의 조직 기능에 대해 알려줘
LLM(일반적인 System Prompt):
"PropelAuth에서는 관리 화면에서 조직을 생성하고,
...
문제는 LLM의 답변이 자신만만하다는 점입니다. 확신도의 개념이 없기 때문에, 99% 확실한 것도 10%밖에 자신 없는 것도 똑같은 톤으로 돌아옵니다.
서적 「Context Engineering」의 ch04(아직 무료 Book으로 공개 중입니다)에 정리한 3원칙을 실례와 함께 소개합니다.
Before (자주 보이는 잘못된 예):
당신은 기술 어드바이저입니다.
사용자의 질문에 자세히 대답해 주세요.
After:
불분명한 점이 있다면 "불분명함"이라고 명확히 말해 주세요.
추측에 기반한 답변보다 정직한 "모름"을 중시해 주세요.
"자세히 대답하라"를 "모른다고 해도 좋다"로 바꾸는 것만으로도, LLM 내부의 가중치는 "정답을 추측으로 채운다"에서 "모른다고 말하고 끝낸다"로 시프트(Shift)됩니다.
포인트는 "침묵의 허용"을 명시하는 것입니다. 인간 신입 엔지니어도 마찬가지로, 상사로부터 "모르면 모른다고 말해도 된다"라는 말을 처음부터 들은 사람과 그렇지 않은 사람의 반년 뒤 판단 품질은 크게 달라집니다. LLM은 그것을 매번 프롬프트로 말해줄 필요가 있을 뿐입니다.
답변 시에는 반드시 확신도를 표시해 주세요:
- 확신도: 고(확실히 알고 있음)
- 확신도: 중(아마도 맞음)
...
확신도를 출력 포맷에 포함시키면, LLM은 생성 시에 **자신의 확신을 내성(Introspection)**하는 경로를 실행합니다. 이것이 할루시네이션 (Hallucination) 억제에 효과적입니다.
저는 Cursor의 커스텀 프롬프트에 이것을 넣어두었는데, 코드를 작성할 때 "확신도: 중(이 API는 기억에 의존하고 있으므로 검증 필요)\
도입 전에는 생성된 코드 전체를 동일하게 훑어보았습니다. 도입 후에는 「확신도: 높음」 블록은 빠르게 읽고 지나가며, 「중」 또는 「낮음」인 부분만 집중적으로 검증하는 방식으로 운영하고 있습니다. 리뷰 시간이 대략 3~4할 정도 줄어든 체감입니다. 확신도를 반환해 주는 것만으로도 이 정도 효과가 있으니, 우선 이것부터 도입하는 것을 강력히 추천합니다.
가능한 한 정보의 성질을 명시해 주세요:
- 공식 문서 기반
- 일반적인 베스트 프랙티스 (Best Practices)
...
LLM은 「공식 문서를 읽은 기억」과 「Stack Overflow에서 봤을지도 모름」, 그리고 「학습 시에 나오지 않아서 추측함」을 구분할 수 있는 잠재 능력을 가지고 있습니다. 출력 시 구분을 요구하면 그 능력이 끌어올려집니다.
제 감각으로는, 이것은 「내성을 강제하는 (forcing introspection)」 효과에 가깝습니다. 확신도와 정보원을 매번 출력하게 하는 것은 LLM에게 있어 「가만히 앉아 자신만만하게 대답하는 것」보다 한 단계 더 공수가 들어가는 작업입니다. 그 한 단계를 거치게 함으로써, 출력 전 단계에서 자신의 지식 출처를 한 번 정리하는 경로가 실행됩니다. 비용은 출력 토큰 수가 10~20% 증가하는 정도뿐이며, 품질 개선율 측면에서는 상당히 저렴한 투자입니다.
Anthropic의 공식 평가는 아니지만, 저희의 저서 「Context Engineering」에서는 동일한 질문 세트(가공의 서비스에 대한 질문 100개)를 사용하여 4개 축으로 점수화하고 있습니다.
| 모델 | 축 | Before | After | 개선 폭 |
|---|---|---|---|---|
| Claude Sonnet 4 | 성실성 (Integrity) | 0.2 | 3.7 | +1750% |
| ... |
주목해야 할 점은 두 가지입니다.
- 구체성이 떨어진다 — 상세한 거짓말보다 정직한 무지를 선택하고 있으므로 당연한 결과입니다.
- 사실 정확성은 0인 상태 그대로다 — System Prompt만으로는 존재하지 않는 지식을 만들어낼 수 없습니다.
즉, System Prompt는 「상세한 거짓말」을 「정직한 무지」로 바꾸는 기술입니다. 정확한 사실을 보완하기 위해서는 다음 단계(RAG)가 필요합니다.
제가 최근 자사 프로덕트 구현에 사용하고 있는 템플릿입니다.
【역할】
당신은 {domain} 분야의 기술 어드바이저입니다.
【답변 원칙】
...
이 템플릿을 Claude / Cursor / 자사 프로덕트의 커스텀 프롬프트에 붙여넣으면, 출력 말미에 확신도 메타데이터가 붙게 됩니다.
저희 팀에서는 확신도가 「중」 이하인 출력은 자동으로 인간 리뷰 대상으로 만드는 운영 방식을 채택했습니다. LLM의 자기 신고를 믿는다는 전제의 워크플로우로 반년 정도 운영해 본 결과, 치명적인 할루시네이션 (Hallucination)이 겉으로 드러나지 않게 되었다는 실감이 듭니다.
구현하면서 제가 빠졌던 함정들입니다.
「저는 AI이므로 틀릴 수도 있습니다」를 매번 출력에 붙이면, 확실히 알고 있는 기본 지식까지 의심스럽게 보입니다. 확신도 「높음」에서는 단정적으로, 「낮음」에서는 「가능성이 있습니다」, 「불명」에서는 「확인해 주세요」와 같이 확신도에 따라 어미를 바꾸도록 지시합니다.
확신도 평가의 더 세밀한 기준(1-10점 + 소스 신뢰성 + 시계열 타당성...)을 너무 많이 적으면 LLM의 해석이 흔들립니다. 제 체감으로는 4단계가 상한선입니다.
「가급적 정확하게」, 「적당히 자세히」와 같은 주관적인 단어는 의미가 없습니다. LLM에게는 정의가 없는 용어입니다. 「불명이라고 명시할 것」, 「3줄 이내로 작성할 것」과 같이 측정 가능한 지시만을 작성합니다.
참고로 제가 처음 작성했던 System Prompt는 「정확하고, 친절하며, 적절한 깊이로 대답해 주세요」였습니다. 지금 다시 읽어보니 초등학생의 작문 수준의 지시이며, LLM에게 「잘해봐」라고 말하고 있는 것에 불과합니다. LLM은 초우수한 신입 사원과 같아서, 추상적인 정신론이 아니라 구체적인 절차와 포맷으로 지시하지 않으면 폭주합니다.
솔직히 말씀드리겠습니다. System Prompt만으로는 사실 정확성은 0인 상태 그대로입니다.
「PropelAuth의 조직 관리 기능 조작 절차를 알려줘」라는 질문에 대해, System Prompt를 개선하더라도 답변은 「확신도: 불명 / 공식 문서를 확인해 주세요」가 될 뿐입니다. 이것은 「거짓말을 하지 않게 된」 것이지, 「올바른 답을 내놓을 수 있게 된」 것은 아닙니다.
올바른 답을 내놓기 위해서는 다음과 같은 것들이 필요합니다.
- RAG (검색 증강 생성, Retrieval-Augmented Generation) — 공식 문서를 컨텍스트 (Context)에 주입
- Tool Use — API로부터 현재 기능 리스트를 가져옴
- Few-shot — 고품질의 예시로 출력 품질을 끌어올림
이것이 Context Engineering의 「다음 30분」입니다.
하지만, RAG(Retrieval-Augmented Generation)로 넘어가기 전에 System Prompt를 먼저 수정해야 한다고 저는 강력하게 말씀드리고 싶습니다. System Prompt가 제대로 되어 있지 않으면, RAG를 통해 올바른 자료를 전달하더라도 LLM은 추측으로 빈칸을 채워버립니다. 성실성(Integrity)의 토대가 없는 상태에서 검색 기능을 얹는 것은, 거짓말을 '출처가 있는 거짓말'로 만들 뿐입니다. 오히려 '공식적인 인용'과 '추측'이 뒤섞여 검증이 역으로 더 어려워지는 상황까지 발생할 수 있습니다.
순서로 따지자면, (1) System Prompt로 성실성을 주입한다 → (2) RAG로 지식을 전달한다 → (3) Tool Use(도구 사용)로 동적 데이터를 가져온다, 라는 3단 로켓 방식입니다. 첫 번째 단이 빠진 채로 두 번째 단을 점화하면, 추진력이 아닌 출력 품질을 폭발시켜 버립니다. System Prompt는 비용이 저렴하고 빠르며 부작용도 적기 때문에, 가장 먼저 손을 대야 할 곳입니다.
Context Engineering의 첫 30분 동안 해야 할 일을 정리하겠습니다.
"모른다고 말해도 된다"라고 명시하기 — 이것만으로도 성실성은 18.5배 향상됩니다.
반드시 확신도(Confidence)를 출력하게 하기 — 고/중/저/불명 4단계.
정보원을 명시하게 하기 — 공식/일반 지식/추측/불명.
RAG는 그다음 — System Prompt가 약한 상태에서 RAG로 넘어가면 거짓말이 출처를 달고 나옵니다.
"당신의 System Prompt는 거짓말을 조장하고 있지는 않은가", 다시 한번 여러분이 가지고 있는 프롬프트를 열어보시기 바랍니다. 만약 "자세히 대답하라"라고만 적혀 있다면, 그것은 거짓말을 조장하고 있는 것입니다.
당신의 System Prompt에 지금 "모른다고 말해도 된다"라고 적혀 있습니까? 적혀 있지 않다면, 딱 5분만 투자해서 수정해 보세요. Claude나 ChatGPT의 커스텀 지시(Custom Instructions) 기능을 이용하면 무료로 시도해 볼 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기