Quick Reference
system role prompt는 API 대화 전체에 유지할 전문 관점과 판단 우선순위를 두는 곳입니다. user message에는 이번 request의 input, deadline, output format, 예외를 둡니다. role은 답변의 focus를 좁힐 수 있지만 사실성·권한·안전을 보장하지 않으므로, source 검증과 tool permission을 별도로 둡니다.
| 바뀌는 빈도 | 둘 위치 | 예시 |
|---|---|---|
| 모든 turn에서 같은 관점 | system | "API reliability를 우선하는 backend reviewer" |
| 현재 요청의 task | user | "제공한 PR diff에서 retry bug를 찾는다" |
| 현재 요청의 source | user content block | diff, 문서, user input |
| 한 번의 output format | user | JSON schema, 길이, required section |
| application policy | system + server-side enforcement | scope 설명과 실제 authorization |
| model·tool 설정 | API request configuration | model, max_tokens, tool schema, permission |
system: 역할 + 지속되는 평가 기준 + evidence 부족 시 행동
user: 이번 task + source + output contract + 우선순위·deadline
server: authentication + authorization + validation + audit역할을 좁히는 법
"전문가"처럼 넓은 role보다 domain, task, evaluation focus를 함께 적습니다. 예를 들어 security reviewer는 인증·권한·input validation을 우선 보게 하고, performance reviewer는 query count·latency·resource cost를 우선 보게 합니다. role은 답변의 말투보다 무엇을 먼저 확인할지에 영향을 주는 기준으로 설계합니다.
You are a backend API reviewer.
Prioritize authorization boundaries, retry behavior, and observable failure modes.
When the provided diff is insufficient, name the missing file or runtime evidence
instead of assuming its behavior.role이 길어질수록 모든 request에 input token과 지시 충돌을 더합니다. 한 request에만 필요한 framework version·release 목표·specific output shape는 system에 복사하지 않고 user message 또는 versioned prompt template에 둡니다. team policy처럼 지속되는 규칙은 변경 이력과 ownership을 두고, representative evaluation으로 확인합니다.
system과 user를 함께 쓰는 예
message = client.messages.create(
model="claude-opus-5",
max_tokens=1200,
system="""You are a backend API reviewer.
Prioritize authorization boundaries, retry behavior, and observable failure modes.
If evidence is missing, state what must be checked.""",
messages=[{
"role": "user",
"content": """<task>Review this diff for API risks.</task>
<criteria>Return severity, evidence, and a concrete verification step.</criteria>
<diff>...</diff>"""
}]
)| 문제가 보일 때 | system을 늘리기 전에 확인할 것 |
|---|---|
| 매 turn의 format이 다름 | user output contract·example·parser validation |
| 최신 정보가 틀림 | retrieval source·date·citation check |
| 특정 task에서만 전문성이 필요 | task-specific user prompt 또는 subagent |
| agent가 과도하게 tool을 씀 | tool 선택 조건·permission·budget |
| team behavior가 불안정 | system template version과 evaluation set |
자주 틀리는 부분
system prompt는 애플리케이션의 신뢰 경계가 아닙니다. user input이 instruction처럼 보이지 않게 tag를 나누어도 prompt injection을 완전히 막지 못하며, API key·database write·외부 요청은 server-side authentication, authorization, validation으로 제한해야 합니다.
role이 아무리 구체적이어도 주어진 source 밖 사실을 알게 하거나 citation을 자동으로 검증하지 않습니다. evidence 범위와 "확인 불가" 처리, 고위험 action의 human approval을 task와 application layer에 함께 둡니다.
참고 링크
2 sources