콘텐츠로 이동

3.E. 역할 부여하기

3.E. 역할 부여하기🔗

앞서 설명한 '3.C. 구분 기호 사용하기'와 '3.D. 단계적으로 지시하기'는 모두 '3.B. 명확하고 구체적으로 지시하기'라는 기본 원칙에서 나온 방법으로 볼 수 있습니다.

반면 이번에 설명할 '역할(또는 페르소나) 부여하기'는 조금 다른 접근 방식으로, 프롬프트 엔지니어링을 이해하는 데 매우 중요한 기법입니다. 이 방법은 LLM에게 어떤 분야의 전문성이나 특정 성격을 가진 캐릭터의 역할을 맡게 하여, 비교적 간단한 프롬프트만으로도 한결 수준 높고 일관된 답변을 얻게 해줍니다.

* AI 생성 이미지 with Nano Banana Pro

이 기법의 주요 목적(이자 기대효과들)을 정리하면,

  • 특정 상황이나 문제에 대해 더 적절하고 전문적인 답변을 얻기
  • 일관된 톤과 스타일로 응답 받기
  • 추론/답변에 특정 분야나 상황에 특화된 지식을 활용하기

참고로 '역할/페르소나 부여하기'는 상당히 간편하면서도 효과적인 기법이지만, 이는 어떻게 보면 LLM의 출력(=답변)을 특정 캐릭터의 관점, 지식, 경험 등으로 한정 또는 편향시키는 것에 불과합니다. 따라서 원하는 결과물을 얻기까지 다소의 노력이나 추가 기법이 필요할 수 있습니다.

예를 들어, 실제 세계에서 뛰어난 논리력을 가진 캐릭터의 역할을 부여했다고 해서 항상 완벽히 논리적인 답변을 기대하기는 어렵습니다. 이런 경우, 앞 장에서 다뤘던 '단계적 지시'와 같은 기법을 함께 사용함으로써 훨씬 더 효과적인 결과를 얻을 수 있습니다.

이 기법을 사용할 때는 다음과 같은 사항들을 참고/주의해야 합니다.

  • 역할은 구체적이고 명확해야 합니다.

    기법 자체는 간단하다고 소개했습니다만, 막연히 선생님이라는 역할을 부여하기보다는 유치원 선생님이나 대학원 교수님과 같이 구체적인 역할을 부여하는 것이 더 효과적으로 동작합니다. 이는 LLM이 더 정확한 맥락을 이해하고, 그에 맞는 언어, 지식 수준, 교육 방식을 적용할 수 있게 해줍니다. 예를 들어, 대학원 교수님 역할을 부여받은 LLM은 더 전문적인 용어를 사용하고, 깊이 있는 학술적 논의를 할 가능성이 높습니다.

    같은 질문에 대해 위의 두 역할의 답변을 비교해본 예시는 다음 그림(Claude) 또는 여기여기를 참조하기 바랍니다. (로그인 필요)

  • 필요한 경우, 역할에 대한 추가적인 맥락이나 지침을 제공합니다.

    '구체적인 지시'는 진리와도 같습니다. 역할을 부여할 때에도 구체적인 맥락과 세부 정보들을 제공한다면 더욱 더 원하는 방향으로 LLM의 답변을 조정할 수 있습니다. 똑같은 유치원 선생님에 대해서도 유아를 위한 과학 실험을 가르치려는 유치원 선생님야외로 소풍을 나가서 자연을 설명하려는 유치원 선생님은 서로 다르게 응답할 것입니다.

    예를 들면 전자의 경우, LLM은 간단하고 안전한 과학 실험을 설명하며 유아의 호기심을 자극하는 방식으로 대답할 것입니다. 반면 후자의 경우, 자연 현상을 쉽게 설명하고 안전한 야외 활동을 제안하는 식의 답변을 제공할 것입니다. 이처럼 추가적인 맥락은 LLM이 더 정확하고 상황에 맞는 응답을 생성하는 데 도움을 줍니다.

    위의 두 예시에 대한 다른 답변 비교는 다음 그림(Claude) 또는 여기여기를 참조하기 바랍니다. (로그인 필요)

  • 윤리적이고 적절한 역할만을 부여해야 합니다.

    LLM의 성능이 급격히 증가함에 따라 제기되는 다양한 우려 때문에, 최근 등장하는 LLM들은 최소 2~3가지 이상의 '안전장치들'이 내재되어 있습니다. 따라서 비윤리적, 폭력적, 기타 악용될 소지가 있는 응답은 제대로 출력되지 않거나, 아무 응답을 하지 않기도 합니다.

    예를 들어, 불법적인 활동을 조언하는 범죄자 또는 극단적인 정치적 견해를 가진 선동가 같은 역할을 부여하려 하면, LLM은 이를 거부하거나 윤리적인 대안을 제시할 가능성이 높습니다. 대신 범죄 예방 전문가 또는 정치 분석가와 같은 윤리적이고 건설적인 역할을 부여하는 것이 바람직합니다. 이는 LLM을 책임감 있게 사용하고, 유용하면서도 안전한 정보를 얻는 데 도움이 됩니다.

    ⚠️ 주의 : 각 서비스별 이용 약관에 따라 다를 수 있으나, '비윤리적, 부적절한 사용'은 심각할 경우 사용자 계정 자체가 일시 정지 또는 영구 차단될 수 있는 사항입니다.


(고급반) SYSTEM 메시지로 역할 지정하기🔗

앞의 설명과 예시들에서 간혹 언급된 '시스템 메시지'는 대화형 LLM을 API로 사용할 때 지원하는 메시지 타입 중 하나로, OpenAI Playground와 같은 개발 도구에서 시험용으로 사용하거나, 직접 API를 이용하는 코딩을 통해 활용할 수 있습니다. OpenAI 외에도 Anthropic(Claude), Google(Gemini), 그 밖의 대부분 LLM API가 대화를 구조화하기 위해 표준화된 메시지 타입 체계를 사용합니다. 간혹 용어나 세부 구현에 차이가 있는 경우도 있지만, 기본적으로 다음 3가지 핵심 메시지 타입을 공통으로 지원합니다.

메시지 타입 역할 설명
System (시스템) 맥락 설정 모델에게 대화의 맥락, 역할, 규칙을 설정하는 데 사용됩니다. 아래 User 메시지(사용자의 질문이나 요청)보다 높은 우선순위로 더 강력하게 작용합니다.
User (사용자) 질문/요청 사용자가 모델에게 보내는 메시지(질문, 요청, 지시 등)입니다.
Assistant (어시스턴트) 모델 응답 모델의 응답을 나타냅니다. 사용자 메시지에 대한 모델의 답변이나 예시 응답으로 사용됩니다.

📌 참고: 이하의 내용에서는 가장 널리 사용되는 OpenAI의 API와 Playground를 기준으로 설명하겠습니다. 다른 LLM을 사용하는 경우 해당 플랫폼의 문서를 참조하여 적절한 용어와 구현 방식을 확인하기 바랍니다.

참고로 OpenAI의 Playground나 다른 여러(상용) API들은 사용하는 만큼 과금되는 정책이므로 로그인이 필요합니다. 일부 상용 서비스는 연간/월간 구독형 유료 요금제에 소정의 API 사용량을 제공하기도 하지만, 대부분 별도로 과금하는 방식이라 지불 수단(카드) 등록이나 크레딧(사용량) 충전이 필요할 수 있습니다.

일반적으로는 부여하려는 역할/페르소나를 단지 사용자 메시지에 포함시키는 것으로 충분히 동작하지만, 시스템 메시지를 지원하는 LLM에서는 이를 통해 주어진 역할이나 지시를 더 철저히 따르도록 할 수 있습니다.

이 방법은 사용자 메시지를 통한 역할 부여와 비슷하게 보일 수 있지만, 완벽하게 동일하지는 않습니다. 한정된 '컨텍스트 윈도우' 내에서 대화를 계속하다보면 사용자 메시지로 부여한 '역할에 대한 암시'는 점점 희석되지만, 시스템 메시지는 고정된 상수처럼 항상 높은 우선순위로 참조 및 반영됩니다.

그러므로 '역할 부여 기법'을 제대로 사용하고 싶다면 시스템 메시지를 사용하는 방법이 가장 효과적이고, 시스템 메시지를 쓰지 못하거나 이를 지원하지 않는 LLM을 사용하는 경우엔 대화 중간에 반복적으로 '역할/페르소나'를 암시해줘야 합니다.

어느 쪽이 주어진 역할에 더 충실한지는 다음 그림의 답변을 직접 비교해보면 알 수 있습니다.

[ SYSTEM 메시지로 역할을 부여한 경우 ]

[ 일반 대화로 역할을 부여한 경우 ]