프롬프트를 길게 쓸수록 결과가 나빠지는 경우
지시를 더 넣었는데 품질이 떨어진다면, 대개 지시끼리 충돌하고 있거나 모델이 이미 아는 걸 다시 말하고 있습니다.
프롬프트를 다듬다 보면 자연스럽게 길어집니다. 결과가 마음에 안 들 때마다 규칙을 하나씩 추가하기 때문입니다. 그런데 어느 시점부터는 규칙을 더해도 좋아지지 않고, 오히려 나빠지기 시작합니다.
이 사이트의 도구들을 만들면서도 같은 일을 겪었습니다. 처음에 200자였던 지시가 3,000자가 됐는데 결과는 초기 버전이 더 나은 경우가 있었습니다. 원인을 하나씩 뜯어보니 대체로 아래 네 가지였습니다.
1. 지시끼리 충돌하고 있다
가장 흔합니다. 다른 시점에 추가한 규칙이 서로 반대 방향을 가리키는 경우입니다.
- "구체적인 근거를 충분히 제시하라"
- "간결하게 작성하라"
둘 다 맞는 말이지만 같이 있으면 모델은 어느 쪽을 따라야 할지 모릅니다. 그러면 대개 양쪽을 조금씩 만족시키는 어중간한 결과가 나옵니다. 근거는 부족한데 길이는 긴 글입니다.
해결은 우선순위를 명시하는 것입니다. "근거가 우선이며, 근거를 줄여서 분량을 맞추지 말 것" 처럼 충돌 상황에서 무엇을 택할지를 적어 두면 결과가 안정됩니다.
2. 모델이 이미 하는 일을 다시 지시하고 있다
"문법에 맞게 작성하세요", "존댓말을 사용하세요", "이해하기 쉽게 설명하세요". 요즘 모델은 이런 지시가 없어도 그렇게 합니다. 그런데 프롬프트에 이런 문장이 쌓이면 정말 중요한 지시의 비중이 상대적으로 줄어듭니다.
지시문은 예산이라고 생각하는 편이 낫습니다. 당연한 것에 예산을 쓰면 중요한 것에 쓸 몫이 줄어듭니다. 지우고 나서 결과가 나빠지지 않으면 애초에 필요 없던 지시입니다. 실제로 지워 보면 상당수가 그렇습니다.
3. 하지 말라는 지시가 하라는 지시보다 많다
금지 목록이 길어지면 모델은 조심스러워집니다. 그 결과 판단이 필요한 자리에서 아무 말도 안 하는 쪽을 택합니다.
자소서 첨삭 도구를 만들 때 이걸 확실히 봤습니다. "인신공격하지 말 것", "단정하지 말 것", "지나치게 비판적이지 말 것"을 넣었더니 지적이 사라지고 칭찬만 남았습니다. 첨삭 도구인데 첨삭을 안 하게 된 것입니다.
지금은 반대로 씁니다. "대부분의 신입 자소서는 45~70점 사이다", "근거 없는 주장이 많으면 50점 이하를 준다"처럼 해야 할 일을 기준과 함께 적습니다. 금지는 정말 필요한 하나만 남깁니다.
4. 예시가 오히려 답을 좁힌다
few-shot 예시를 넣으면 형식은 확실히 안정됩니다. 그런데 예시가 구체적일수록 모델이 그 예시의 내용까지 흉내 냅니다. 입력이 달라도 결과가 비슷해지는 현상이 생깁니다.
형식만 잡고 싶다면 예시 대신 구조를 글로 설명하는 편이 낫습니다. "## 총평 / ## 문단별 코멘트 / ## 고쳐 쓴 예시 순서로" 라고 적는 것이 전체 예시 하나를 넣는 것보다 다양성을 덜 해칩니다.
정리하는 방법
프롬프트가 길어졌을 때 저는 이렇게 정리합니다.
| 순서 | 하는 일 |
|---|---|
| 1 | 지시를 한 줄씩 분리해 목록으로 만든다 |
| 2 | 서로 충돌하는 쌍을 찾아 우선순위를 정한다 |
| 3 | 지워도 결과가 안 바뀌는 줄을 실제로 지워 본다 |
| 4 | 금지("~하지 말 것")를 기준("~일 때는 ~한다")으로 바꾼다 |
| 5 | 남은 지시를 역할·기준·형식 순으로 재배치한다 |
3번은 귀찮지만 효과가 가장 큽니다. 같은 입력으로 지시를 하나 뺀 버전과 비교해 보면, 절반 가까이는 있으나 없으나 같습니다.
하나 더
길이 자체가 문제인 건 아닙니다. 판단 기준을 적은 긴 프롬프트는 잘 작동합니다. 문제가 되는 건 규칙만 쌓인 긴 프롬프트입니다.
기준과 규칙의 차이는 이렇습니다. "짧게 쓰라"는 규칙이고, "읽는 사람이 1분 안에 판단할 수 있어야 한다"는 기준입니다. 기준을 주면 모델이 상황에 맞게 판단하고, 규칙만 주면 상황과 안 맞을 때 그대로 따릅니다. 프롬프트를 줄이라는 말보다 규칙을 기준으로 바꾸라는 말이 더 정확합니다.