본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 13:36

지시사항을 어디에 두느냐가 무엇을 말하느냐보다 더 중요합니다

요약

Claude와 Qwen 모델을 대상으로 지시사항을 시스템 메시지, 사용자 메시지, 도구 설명 중 어디에 배치하느냐에 따른 성능 차이를 실험한 연구입니다. 지시사항의 내용보다 API 페이로드 내의 구조적 위치가 모델의 지시 이행 능력에 미치는 영향을 분석합니다.

핵심 포인트

  • 지시사항의 위치(슬롯)가 모델의 지시 이행 성능에 결정적 영향을 미침
  • 시스템 메시지, 사용자 메시지, 도구 설명은 모델 학습 단계부터 다르게 취급됨
  • 단순한 문구 수정보다 API 구조에 맞는 적절한 슬롯 배치가 중요함

Claude와 Qwen을 대상으로 시스템 프롬프트(System Prompts), 사용자 프롬프트(User Prompts), 도구 설명(Tool Descriptions)을 비교한 실험

원래 Medium에 게시됨: https://medium.com/@rajkundalia/where-you-put-the-instruction-matters-more-than-what-it-says-2d5ffcdd9369

좋은 프롬프트를 작성하는 방법에 대한 많은 조언이 있습니다:

  • 생각의 사슬 (Chain-of-thought) 사용
  • 예시 추가
  • 구체적으로 작성

하지만 저는 다른 질문에 대한 실질적인 증거는 많이 보지 못했습니다:

LLM 에이전트에게 지시사항을 줄 때, 어느 슬롯(Slot)에 넣느냐가 중요할까요?

저는 문구나 어조에 대해 말하는 것이 아닙니다. 구조적 슬롯인 시스템 메시지 (System message), 사용자 메시지 (User message), 또는 **도구 설명 (Tool description)**을 의미합니다.

이것들은 단순히 문자열 내의 서로 다른 위치가 아닙니다. 이들은 API 페이로드(Payload)의 서로 다른 필드이며, 모델들은 이들을 다르게 취급하도록 훈련되었습니다.

저는 다음과 같은 점을 알고 싶었습니다:

슬롯이 실제로 모델이 지시사항을 따르는지 여부에 영향을 미칠까?

그래서 이를 알아내기 위해 실험을 설계했습니다.

GitHub Repository: https://github.com/rajkundalia/prompt-placement-anatomy

Prompt Placement Anatomy

실험 (The Experiment)

설계는 의도적으로 단순합니다.

에이전트의 임무는 두 가지 파일 시스템 도구를 사용하여 5개의 마크다운 (Markdown) 파일 전체에서 TODO 마커를 세는 것입니다:

  • list_files
  • read_file

테스트 대상이 되는 지시사항은 다음과 같습니다:

최종 답변을 [DONE] 마커로 끝내세요.

해당 지시사항은 실행당 다음 세 가지 슬롯 중 정확히 하나에 배치됩니다:

  1. 시스템 메시지 (System message) — 일반적으로 페르소나와 행동 규칙을 위해 예약됨
  2. 사용자 메시지 (User message) — 작업 자체가 위치하는 곳
  3. 도구 설명 (Tool description) — 도구 스키마 (Schema)에 첨부된 메타데이터로, read_file 도구 설명에 추가됨

세 가지 변형 모두에서 작업은 동일하게 유지됩니다.

유일한 변수는 [DONE] 지시사항이 어디에 위치하느냐입니다.

submit_answer 도구가 없는가?

언급할 만한 한 가지 설계 결정이 있습니다:

submit_answer 또는 final_response 도구는 존재하지 않습니다.

에이전트(Agent)는 추가적인 도구 호출(Tool call) 없이 일반 텍스트를 반환함으로써 종료됩니다.

준수 여부(Compliance)는 해당 자유 형식 텍스트(Free-text) 응답의 마지막 80자 내에서 대소문자를 구분하지 않고 [DONE]을 검색하여 확인합니다.

이는 의도된 사항이었습니다.

저는 모델이 구조화된 도구 인자(Tool argument)를 올바르게 채울 수 있는지 여부가 아니라, 모델이 자신의 자연스러운 출력물 내에서 서식 지시사항(Formatting instruction)을 따르는지를 측정하고 싶었습니다.

이것들은 서로 다른 기술입니다.

각 배치(Placement)는 여러 번 실행되었습니다.

수집된 지표(Metrics):

  • 준수율 (Compliance rate) ([DONE]을 추가했는가?)
  • 완료율 (Completion rate) (15턴 제한 내에 완료했는가?)
  • 완료까지의 턴 수 (Turns to completion)
  • 총 토큰 사용량 (Total token usage)

준수율(Compliance)이 핵심 지표(Headline metric)입니다.

다른 지표들은 에이전트의 행동을 설명하는 데 도움을 주지만, 주요 결과물은 아닙니다.

왜 프레임워크를 사용하지 않았는가?

에이전트 루프(Agent loop)는 Python의 while 루프입니다:

  1. 메시지 전송
  2. 도구 호출(Tool calls) 확인
  3. 도구 실행
  4. 결과 추가
  5. 반복

모델이 도구 호출 없이 텍스트를 생성하면 실행이 종료됩니다.

저는 의도적으로 프레임워크를 피했습니다.

프레임워크는 다음과 같은 것들을 자체적으로 추가합니다:

  • 시스템 메시지 (System messages)
  • 도구 스키마 수정 (Tool schema modifications)
  • 숨겨진 지시사항 (Hidden instructions)

배치 효과(Placement effects)를 측정하려면, 각 슬롯에 정확히 무엇이 들어있는지, 그리고 그 외에는 아무것도 없다는 것을 알아야 합니다.

전체 구현은 약 300줄의 Python 코드로 이루어져 있으며 agent_loop.py에서 모두 확인할 수 있습니다.

결과: Qwen 2.5-Coder 3B (Ollama)

배치당 50회 실행

배치 (Placement)준수율 (Compliance Rate)완료율 (Completion Rate)
System8%100%
...

모델은 매번 최종 답변을 생성했습니다.

전반적으로 100%의 완료율을 보였습니다.

하지만 [DONE]을 추가하는 것을 기억하느냐는 거의 전적으로 지시사항이 어디에 위치하느냐에 달려 있었습니다.

사용자 메시지 배치(User message placement)가 다른 두 가지 대안보다 훨씬 더 효과적이었습니다.

사용자(64%)와 시스템(8%) 사이의 격차는 Wilson 95% 신뢰 구간 (confidence intervals)이 겹치지 않을 정도로 충분히 커서, 샘플링 노이즈가 아닌 실제적인 차이가 있음을 시사합니다.

도구 설명 (Tool description) 배치는 2%로 사실상 무용지물이었습니다.

시스템 메시지 (System message) 또한 8%로 크게 나을 것이 없었습니다.

이 모델의 경우, 이 작업에서 오직 사용자 메시지 슬롯 (user message slot)만이 신뢰할 수 있는 지시사항 전달 능력을 보여주었습니다.

결과: Claude Sonnet 4.6 (Anthropic API)

배치당 20회 실행

배치 (Placement)준수율 (Compliance Rate)평균 턴 (Mean Turns)
시스템 (System)100%3
...
배치에 완전히 무관함 (Completely placement-insensitive).

세 가지 슬롯 모두에서 100% 준수율을 기록함.

이 모델은 지시사항이 어디에 위치하든 [DONE] 지시를 따랐습니다.

또한 매번 도구 (tools)를 올바르게 사용했습니다:

  1. 파일 목록 나열 (List files)
  2. 파일 읽기 (Read files)
  3. 답변 생성 (Produce answer)

차트는 생성되지 않았습니다; 100%에서 평탄한 직선은 아무런 정보도 담고 있지 않습니다.

결과: Claude Haiku 4.5 (Anthropic API)

배치당 50회 실행

배치 (Placement)준수율 (Compliance Rate)평균 턴 (Mean Turns)
시스템 (System)100%3
...
동일함.

이 모델은 Anthropic의 가장 작고 저렴한 모델임에도 불구하고, Sonnet과 동일한 배치 견고성 (placement robustness)을 보여주었습니다.

Haiku조차 배치 민감도 (placement sensitivity)가 전혀 나타나지 않았습니다.

차트는 생성되지 않았습니다; 100%에서 평탄한 직선은 아무런 정보도 담고 있지 않습니다.

"턴 (turns)"이 무엇인지 궁금하다면, Anthropic의 Agent SDK 문서에서 에이전트 루프 (agent loop)를 잘 설명하고 있습니다:

https://code.claude.com/docs/en/agent-sdk/agent-loop#the-loop-at-a-glance

요약

모델 (Model)유형 (Type)시스템 (System)사용자 (User)도구 설명 (Tool Desc)
qwen2.5-coder:3b소형 로컬 (Ollama)8%64%2%
...
가장 큰 차이점은 시스템, 사용자, 도구 슬롯 사이의 차이가 아니었습니다.

그것은 모델 클래스 (model classes) 사이의 차이였습니다.

두 Anthropic 모델은 배치와 상관없이 지시사항을 따랐습니다.

3B 파라미터 오픈 웨이트 (open-weight) 모델은 그렇지 않았습니다.

해당 모델의 경우, 사용자 메시지가 의미 있는 준수율을 만들어낸 유일한 배치였습니다.

이러한 결과에 기반할 때, 배치 민감도(placement sensitivity)는 3B 오픈 웨이트 (open-weight) 모델에게는 주요한 요인이었으나, 테스트된 두 개의 프런티어 (frontier) 모델들에게는 사실상 고려 대상이 아니었습니다.

Results Summary

실무적 의미

많은 팀이 다음과 같은 이유로 작은 로컬 모델을 선택합니다:

  • 비용
  • 지연 시간 (Latency)
  • 개인정보 보호 (Privacy)

만약 당신이 이 중 하나에 해당한다면, 지시사항 배치 (instruction placement)는 단순히 스타일의 문제가 아닙니다.

그것은 신뢰성의 문제입니다.

이번 실험에서, 시스템 메시지 (system message)나 도구 설명 (tool description)에 중요한 지시사항을 배치하는 것은 그것을 완전히 생략하는 것만큼이나 효과가 없었습니다.

사용자 메시지 (user message)만이 일관되게 의미 있는 준수율을 제공하는 유일한 슬롯이었습니다.

프런티어 모델을 사용하여 구축하고 있다면, 이러한 조건 하에서 배치는 중요하지 않았습니다.

주의 사항

  • 프롬프트는 짧았습니다 (Ollama의 경우 약 300 토큰, 도구 호출을 포함한 Claude의 경우 약 6,000 토큰).
  • 작업 정확도 (Task accuracy)는 측정되지 않았습니다.
  • 카운팅 작업은 멀티 턴 (multi-turn) 도구 사용을 강제하기 위해 설계된 방해 요소 (distractor)입니다.
  • 정확한 백분율은 이 작업에 대한 qwen2.5-coder:3b에만 적용됩니다.
  • 서로 다른 모델, 양자화 (quantizations), 그리고 작업은 다른 결과를 생성할 수 있습니다.

더 폭넓게 일반화될 수 있는 것은 다음과 같은 순위입니다:

유사한 작은 오픈 웨이트 (open-weight) 모델의 경우, 이점의 크기가 변하더라도 사용자 메시지가 계속해서 가장 효과적인 배치로 남을 수 있습니다.

그러한 주의 사항에도 불구하고, 핵심적인 결과는 무시하기 어렵습니다:

3B 모델의 경우, 동일한 지시사항이 오로지 그것이 배치된 위치에 따라 극적으로 다른 동작을 생성했습니다.

다음 단계: 지시사항 충돌 (Part 2)

이 실험은 배치의 강도를 독립적으로 측정합니다:

  • 하나의 지시사항
  • 하나의 슬롯
  • 경쟁하는 신호 없음

자연스러운 후속 연구는 지시사항 충돌 (instruction conflict)입니다.

상상해 보세요:

시스템 프롬프트 (System prompt)

[DONE]을 추가하세요

사용자 메시지 (User message)

[FINISHED]를 추가하세요

도구 설명 (Tool description)

[COMPLETE]를 추가하세요

그다음 최종 답변에 어떤 마커가 나타나는지 관찰합니다.

이를 통해 슬롯(slots)이 단순히 읽히는지 여부를 넘어, 슬롯 간의 우선순위 순서(priority ordering)를 확인할 수 있습니다.

탐구해 볼 만한 질문들:

  • 시스템 프롬프트 (System prompt)가 사용자 메시지 (User message)보다 우선하는가?
  • 최첨단 모델 (Frontier models)은 계층 구조 (Hierarchy)를 따르는가?
  • 소형 모델 (Small model)은 충돌을 인지하기나 하는가?
  • 아니면 단순히 모델이 이미 주의를 기울이고 있던 (Attending to) 슬롯을 따르는 것뿐인가?

관련 읽을거리

왜 95개의 리뷰가 20개의 리뷰보다 나은가 — 두 경우 모두 95% 점수일 때조차

이 실험에서 사용된 Wilson 신뢰 구간 (Wilson confidence intervals) 뒤에 숨겨진 통계적 기초.

연결

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0