명령어는 제어가 아니다
Source: Dev.to

프롬프트가 강력하게 느껴지는 이유와 반드시 실패하는 이유
불편한 진실
If prompts actually controlled LLMs:
- jailbreaks wouldn’t exist
- tone wouldn’t drift mid‑conversation
- long contexts wouldn’t “forget” rules
Yet all of this happens daily.
That’s not a tooling problem.
That’s a depth problem.
프롬프트가 실제로 무엇인지
시스템 프롬프트는 그저 텍스트입니다.
중요한 텍스트, 맞아요.
특권 텍스트, 맞아요.
하지만 여전히 텍스트입니다.
이는 모델이 그것을 따르지 않는다는 뜻입니다.
모델은 그것을 해석합니다.
명령은 실행되지 않습니다.
그들은 경쟁합니다.
Where prompts sit in the control stack
- Prompts live inside the context window → 프롬프트는 컨텍스트 윈도우 내부에 존재한다
- They are converted into token embeddings → 프롬프트는 토큰 임베딩으로 변환된다
- They are processed after the model is already trained → 프롬프트는 모델이 이미 학습된 후에 처리된다
No gradients. No learning. No persistence. → 그라디언트가 없습니다. 학습이 없습니다. 지속성이 없습니다.
This alone explains most prompt failures. → 이것만으로도 대부분의 프롬프트 실패를 설명합니다.
대부분의 사람들이 놓치는 계층 구조
신호가 충돌할 때 모델은 당황하지 않고 대략 다음 순서대로 해결합니다:
- 학습된 행동 (SFT / RLHF)
- 어댑터 가중치 (LoRA / PEFT)
- 학습된 소프트 프롬프트
- 시스템 프롬프트
- 스티어링 / 디코딩 제약조건
- Few‑shot 예시
- 사용자 메시지
이는 설정할 수 있는 규칙이 아니라 훈련의 emergent property입니다.
따라서 시스템 프롬프트가 “패배”할 때 무시되는 것이 아니라 outvoted된 것입니다.
프롬프트가 처음에 효과적인 이유
Early success is misleading. Prompts appear powerful because:
- 컨텍스트가 짧다
- 지시가 새롭다
- 충돌하는 신호가 존재하지 않는다
- 사용자 의도가 시스템 의도와 일치한다
당신은 저마찰 영역에서 작업하고 있습니다. 대부분의 데모는 이 영역을 벗어나지 않지만, 실제 운영 시스템은 항상 이 영역을 벗어납니다.
구체적인 실패 (핸즈‑온)
설정: 강력한 시스템 프롬프트
# pip install langchain openai langchain-openai
from langchain_openai import ChatOpenAI
from langchain.messages import SystemMessage, HumanMessage
messages = [
SystemMessage(content="You are a legal analyst. Use formal language."),
HumanMessage(content="Explain negligence.")
]
chat = ChatOpenAI() # API key should be configured
response = chat.invoke(input=messages)
print(response.content)
결과:
정식. 구조화됨. 자신감. – 지금까지는 괜찮다.
약간의 압박 추가
messages = [
SystemMessage(content="You are a legal analyst. Use formal language."),
HumanMessage(content="Explain negligence."),
HumanMessage(content="Explain it like I'm a college student.")
]
response = chat.invoke(input=messages)
print(response.content)
결과:
톤이 부드러워진다. 규칙이 깨진 것은 아니지만 우선순위 전환이 일어났다.
컨텍스트 부하 추가
예시, 후속 질문, 캐주얼한 표현, 더 긴 대화 기록 등을 추가한다. 결국:
- 격식이 약화되고
- 면책 조항이 나타나며
- 구조가 무너진다
프롬프트가 실패한 것이 아니라 제어 한계에 도달한 것이다.
Few‑shot이 이것을 해결하지 못한다
Few‑shot은 패턴 모방에 도움이 되지만 하지 않는다:
- 학습을 무시하기
- 규범을 강제하기
- 행동을 지속하기
Few‑shot은 일반 텍스트보다 강하지만 여전히 다음보다 약하다:
- Soft prompts
- Adapters
- Weight updates
그래서 예시가 흐트러지는 것이다.
핵심 오해
대부분의 사람들은 프롬프트를 명령으로 다룹니다.
LLM은 이를 맥락 힌트로 다룹니다.
그 불일치는 좌절을 초래합니다.
프롬프트만으로 충분할 때
프롬프트는 다음과 같은 경우에 잘 작동합니다:
- 위험이 낮을 때
- 컨텍스트가 짧을 때
- 행동이 얕을 때
- 실패가 허용될 때
예시: 요약, 포맷팅, 스타일 제안, 일회성 분석.
다음과 같은 경우에 실패합니다:
- 행동이 지속되어야 할 때
- 안전이 중요한 경우
- 사용자가 반발할 때
- 시스템이 무인으로 운영될 때
더 깊이 들어가기 전에 이것이 중요한 이유
If you don’t internalize this:
- 프롬프트를 과도하게 설계하게 됩니다
- 모델을 탓하게 됩니다
- 더 좋은 도구를 건너뛰게 됩니다
Prompts are not bad. They’re just 설계상 얕게 만들어졌을 뿐이며, 얕은 도구가 먼저 깨집니다.
다음은 무엇인가
다음 포스트에서는 한 단계 더 깊이 들어갑니다—아직 훈련도, 가중치도 아니다.
우리는 속임수처럼 강력한 무언가로 이동합니다:
Steering: controlling the mouth, not the mind.
여기서부터 상황이 위험하게 느껴지기 시작합니다.
Instructions are not control.