대화 맥락에 따라 AI의 행동을 다르게 만든 방법 (Multi-Role Prompt Engineering)
Source: Dev.to
단순 역할 프롬프트의 문제점
AI에게 “당신은 캐릭터 A다”와 “당신은 캐릭터 B다”를 별개의 프롬프트로만 알려주면, 결국 모두 같은 느낌이 됩니다: 일반적이고, 도움이 되며, 지루한. 구별된 행동을 만들려면 형용사만으로는 부족합니다.
잘못된 예시
You are a friendly witness who is helpful.
개선된 예시
You are a witness being questioned. Rules:
- Only answer what is directly asked.
- If the question is vague, ask for clarification.
- Never volunteer extra information.
- If pressed on a contradiction, become defensive.
제약조건은 단순한 성격 묘사보다 일관된 행동을 만들어냅니다.
모드 파라미터로 행동 전환하기
같은 캐릭터라도 대화 상대에 따라 다르게 행동해야 할 때가 있습니다. 저는 시스템 프롬프트에 mode 파라미터를 전달하는 방식으로 이를 처리합니다.
function buildPrompt(
character: Character,
mode: 'friendly' | 'hostile'
) {
const base = `You are ${character.name}. Background: ${character.bio}`;
if (mode === 'friendly') {
return `${base}\n\nBehavior: Be cooperative. Give detailed answers. Expand on your responses when appropriate.`;
} else {
return `${base}\n\nBehavior: Be defensive. Give minimal answers. Only confirm what you cannot deny. Redirect when possible.`;
}
}
이 작은 스위치만으로도 응답이 자연스러워지는 정도가 크게 달라집니다.
턴마다 컨텍스트 유지하기
가장 어려운 부분은 캐릭터가 이전에 일어난 일을 기억하고 그에 맞게 조정하도록 하는 것입니다. 저는 간소화된 상태 객체를 유지하고, 각 AI 호출 전에 요약을 삽입합니다.
interface ConversationState {
currentSpeaker: string;
previousStatements: string[];
contradictions: string[];
mood: 'neutral' | 'defensive' | 'confident';
}
지금까지의 대화를 요약해서 전달하면, 토큰 수를 과도하게 늘리지 않으면서도 응답이 상황을 인식하게 됩니다.
모델의 기본 “도움이 되는 어시스턴트” 모드 무시하기
LLM은 기본적으로 도움이 되도록 훈련됩니다. 캐릭터가 회피하거나 비협조적이어야 할 때는 이 훈련에 맞서야 합니다.
효과적인 방법
- 캐릭터가 질문자에게 도움을 주고 싶어하지 않는다는 것을 명시적으로 말한다.
- 캐릭터가 까다롭게 행동할 동기를 부여한다.
- 프롬프트에 회피 예시를 추가한다.
You are being questioned about something you want to hide.
Your goal is to answer without revealing [specific fact].
Techniques you use: giving technically true but misleading answers,
answering a different question than what was asked, saying "I don't recall."
다양한 전형에 맞는 온도 설정
- 권위적인 캐릭터(판사, 전문가): 일관성과 결단력을 위해 낮은 온도(0.3–0.5).
- 감정적이거나 예측 불가능한 캐릭터: 무작위성과 인간적인 느낌을 위해 높은 온도(0.7–0.9).
요약
멀티‑롤 AI는 더 나은 캐릭터 설명을 쓰는 것이 아니라 다음을 구현하는 것입니다:
- 명확한 행동 규칙 정의.
- 매 턴마다 올바른 컨텍스트 주입.
- 모델의 기본 친절함을 적극적으로 상쇄.
이것을 깨달은 뒤 모든 것이 연결되었습니다.
다른 분들도 멀티‑에이전트 작업을 하고 있다면, 어떤 패턴을 사용하고 계신가요?