IT 활용 기술

OpenAI API의 Role 개념 정리 및 사용 예시

glasslego 2025. 3. 1. 13:29

OpenAI API를 사용할 때 가장 중요한 개념 중 하나는 role입니다. OpenAI의 Chat API에서는 대화의 흐름을 정의하기 위해 role을 활용합니다. 이 글에서는 role의 개념과 언제, 어떻게 사용해야 하는지를 예제와 함께 설명하겠습니다.


1. OpenAI API의 role 개념 및 역할

OpenAI API에서 대화(messages 리스트)를 구성할 때, 각 메시지에는 반드시 role이 지정됩니다. role에는 다음과 같은 세 가지 값이 있습니다.

1.1 “system”

“role”: “system”

  • 역할 및 특징
    • 대화 전체의 맥락을 잡아주고, ChatGPT가 어떤 인격(Persona)이나 행동 지침으로 동작해야 하는지 정의하는 메시지입니다.
    • “system” 메시지는 딱 하나만 사용 가능합니다. (추가 작성 시, 앞선 system 메시지가 덮어쓰거나 무시될 수 있음)
    • 만약 명시하지 않으면, 기본값으로 “You are a helpful assistant.” 라고 설정됩니다.
  • 용도
    • 챗봇의 행동 원칙 정의: 예를 들어, “당신은 전문 IT 컨설턴트로, 정확하고 간결한 답변을 제공합니다.”
    • 대화 스타일 및 어조 지정: 예: “당신은 친근하고 가벼운 말투를 사용합니다.”
    • 금지/허용 사항 설정: 예: “욕설이나 차별적 표현을 사용하지 마세요.”
  • 주의할 점
    • system 메시지에 지나치게 복합적이거나 모순되는 지침을 넣으면 모델이 혼란스러워질 수 있습니다.
    • 대화 중간에 system 메시지를 바꾸고 싶다면, 기존 system 메시지를 업데이트(혹은 재생성)하는 방식으로 통째로 바꿔야 합니다.

1.2 “user”

“role”: “user”

  1. 역할 및 특징
    • 사용자가 실제로 입력하는 질문, 요구 사항, 명령 등을 의미합니다.
    • 하나의 대화(Conversation) 안에 여러 개의 user 메시지가 있을 수 있으며, 일반적으로 실제 사용자가 대화창에 입력하는 내용과 동일합니다.
  2. 용도
    • 챗봇에게 묻고자 하는 질문이나 작업 지시를 전달
    • 대화의 문맥을 이어가는 입력: 예를 들어, “조금 더 자세히 알려주세요.”, “이전에 말한 예시를 다시 설명해줘.” 등
    • 예시 작성: 실제 사용자가 묻지 않은 가상의 ‘예시’를 대화에 넣을 수도 있습니다. 이 경우에도 role: "user" 메시지를 사용하여 모델이 미래 대화에서 참고할 수 있도록 합니다.
  3. 주의할 점
    • user 메시지는 대화를 이끄는 주된 질문이나 실제 요구사항을 명시하기 때문에, 여기서 제공하는 정보가 모델이 답변을 생성하는 핵심 근거가 됩니다.
    • 민감 정보(개인정보, 내부 기밀 등)는 오픈 환경에서 바로 노출되지 않도록 주의해야 합니다.

1.3  “assistant”

“role”: “assistant”

  1. 역할 및 특징
    • 모델(챗봇) 자신이 사용자에게 제공하는 실제 답변입니다.
    • 이전에 생성된 답변을 “assistant” 메시지 형태로 저장해두면, 모델이 과거 대화 맥락을 참고할 수 있습니다.
  2. 용도
    • ChatGPT가 user 메시지에 대해 응답할 때, 이 메시지가 assistant 역할로 추가됩니다.
    • 예시 응답: 대화 중간에 “assistant” 역할을 가진 메시지를 미리 배치해놓으면, 모델이 “이전에 이런 식으로 답변한 사례가 있다”고 이해하여 답변 스타일이나 형식 등을 학습할 수 있습니다.
  3. 주의할 점
    • 대화가 진행되는 동안, user 메시지와 assistant 메시지를 교대로 쌓아가면서 맥락을 형성합니다.
    • 이전 assistant 메시지를 의도적으로 편집하거나 삭제해버리면, 챗봇에게서 맥락이 사라질 수 있으므로, 버전 관리를 신중히 해야 합니다.

2. role 사용 예시

이제 OpenAI API에서 각 role을 어떻게 사용하는지 구체적인 예제를 살펴보겠습니다.

기본 사용 예제

import openai

openai.api_key = "your-api-key"

response = openai.ChatCompletion.create(
    model="gpt-4-turbo",
    messages=[
        {"role": "system", "content": "당신은 친절한 인공지능 비서입니다."},
        {"role": "user", "content": "OpenAI API에서 role이 뭔가요?"}
    ]
)

print(response["choices"][0]["message"]["content"])

설명:

  • system: 모델이 친절하게 응답하도록 설정
  • user: 사용자가 API에 질문을 입력
  • assistant: OpenAI API가 자동으로 생성한 응답을 반환

특정 역할을 부여하는 예제

messages = [
    {"role": "system", "content": "당신은 데이터 분석 전문가입니다. Python과 Pandas를 사용하여 데이터를 분석하는 방법을 설명해주세요."},
    {"role": "user", "content": "데이터 프레임에서 null 값을 제거하는 방법은?"}
]

response = openai.ChatCompletion.create(
    model="gpt-4-turbo",
    messages=messages
)

print(response["choices"][0]["message"]["content"])

설명:

  • system: AI에게 "데이터 분석 전문가"라는 역할을 부여
  • user: 특정 기술 질문 입력
  • assistant: Pandas에서 dropna() 함수를 사용하는 방법을 설명하는 답변을 생성

문맥을 유지하는 대화 예제

messages = [
    {"role": "system", "content": "당신은 역사 전문가입니다."},
    {"role": "user", "content": "로마 제국의 멸망 원인은?"},
    {"role": "assistant", "content": "로마 제국의 멸망 원인에는 경제적 어려움, 군사적 패배, 정치적 불안 등이 있습니다."},
    {"role": "user", "content": "경제적 어려움에 대해 더 자세히 설명해줘."}
]

response = openai.ChatCompletion.create(
    model="gpt-4-turbo",
    messages=messages
)

print(response["choices"][0]["message"]["content"])

설명:

  • 이전 assistant 응답을 그대로 유지한 상태에서 새로운 질문을 추가
  • 모델이 문맥을 기억하고 연속적인 대화를 이어나갈 수 있도록 함

3. 효과적인 역할(Role) 활용 전략

처음부터 명확하게 지정

system을 적극 활용하세요. system 메시지에 최대한 구체적인 목표(어조, 스타일, 전문 분야, 업무 범위 등)를 적어두면, 대화 전체가 한결같은 톤 목적을 유지합니다.

  • "너는 엄격한 교수야. 정확하고 간결하게 대답해줘."
  • "너는 아이들에게 친절하게 설명하는 선생님이야."
중간에 예시(샘플) 추가

user 메시지와 assistant 메시지를 예시 쌍으로 넣어주면, 모델이 “이 상황에서 이런 질문이 오면 이런 식으로 답변하는구나”라고 학습 효과를 얻을 수 있습니다.

  • 이 기법은 few-shot learning이라고도 하며, 복잡한 맥락을 전달할 때 유용합니다.
역할 간 모순 피하기

 

  • system 메시지에서는 “타인을 비하하는 표현은 절대 쓰지 말라”고 했는데, user 메시지 예시(또는 future prompt)에서 “약간 과격한 표현으로 답변해달라”고 하는 식으로 서로 모순되면 혼란이 발생합니다.
  • 가급적 system의 지침이 user 메시지나 assistant 메시지의 예시와 충돌하지 않도록 설계하세요.
과거 대화 맥락 관리

 

  • ChatGPT API는 이전 대화에서 주고받은 user/assistant 메시지를 모두 함께 전송해 맥락을 이어갑니다.
  • 이 때, 너무 많은 대화를 한 번에 전송하면 토큰 소모가 많아지므로, 불필요한 내용은 생략(요약해서 저장)하는 것도 방법입니다.

 

 


4. 관련 링크 및 참고 자료


5. 결론

OpenAI API에서 role을 잘 활용하면 보다 자연스럽고 일관된 대화를 생성할 수 있습니다. system을 적절히 사용하면 모델의 성격과 답변 스타일을 조정할 수 있으며, user와 assistant 메시지를 활용하면 대화의 흐름을 유지할 수 있습니다. API를 사용할 때 role을 효과적으로 활용하여 원하는 대화를 만들어 보세요!