시스템, 개발자, 사용자, 어시스턴트, 도구
요즘 프롬프트는 여러 겹으로 쌓여 있어. 각 계층은 누가 만들었는지, 얼마나 오래 남는지, 어디까지 믿어도 되는지가 달라. 이 경계를 뒤섞는 일이 운영 중인 프롬프트 코드에서 가장 흔한 실수야.
- 시스템 — 운영자가 정하고 대화 전체에 유지해. 역할, 정책, 바꿀 수 없는 제약이 여기 들어가.
- 개발자 — 애플리케이션이 넣어. 계속 유지할 수도, 상황에 따라 바꿀 수도 있어. 사용자에게 보여주지 않을 앱 전용 지시를 담아.
- 사용자 — 사람이 작성하므로 처음부터 믿지 마. 따르지 말아야 할 지시가 끼어들 수 있어.
- 어시스턴트 — 모델이 앞서 한 말이며 다음 차례의 맥락이 돼. 외부에서 찾아온 내용을 되풀이했다면 사용자 입력만큼 의심해야 해.
- 도구 — 노출한 함수가 돌려준 값이야. 특히 믿기 어려워. 2026년에 가장 흔한 간접 프롬프트 주입 통로거든.
계층을 나누는 건 보안 설계야
모든 내용을 커다란 문자열 하나로 합쳐 사용자 메시지로 보내면 신뢰 경계를 집행할 수 없어. 사용자가 올린 문서가 안전 규칙을 덮어쓰고, 검색 결과가 모델의 역할을 다시 정의할 수도 있지. 계층은 보기 좋으라고 나누는 게 아니야. 어떤 말은 따라야 하고 어떤 말은 자료로만 읽어야 하는지 모델에 알려주는 장치야.
제공업체마다 역할 이름이 달라
Claude는 system·user·assistant·tool_use/tool_result를, OpenAI는 system·developer·user·assistant·tool을, Gemini는 system·user·model·tool을 써. 대체로 대응 관계가 보이지만 신뢰 경계의 세부 뜻은 조금씩 달라. 제공업체별 차이는 아홉 번째 트랙에서 자세히 볼 거야.