logo

프로필 모듈

에이전트의 역할과 성격을 정하는 프로필 모듈의 정보 유형과 생성 전략을 알아보고, 같은 고객 지원 에이전트를 프로필만 바꿔 응답을 비교한다.

프로필 모듈

  • 프로필(profile): 에이전트의 역할(예: 상담원, 코더, 교사)과 성격을 정의하는 모듈. 보통 시스템 프롬프트에 글로 씀. 네 모듈(프로필·기억·계획·행동) 구성은 자율 에이전트 참고.
  • 프로필이 나머지 모듈에 영향을 줌:
    • 기억: 무엇을 중요하게 기억할지. 예: 상담원은 고객의 불만, 코더는 실패한 테스트.
    • 계획: 어떤 기준으로 일을 나눌지. 예: 신중한 역할은 확인 단계를 더 넣음.
    • 행동: 말투, 어떤 도구를 쓰고 무엇을 약속할지.
  • 같은 모델과 도구라도 프로필에 따라 일관되게 다른 행동을 보이도록 하는 것이 목적.

출처: Wang 외(2023), A Survey on Large Language Model based Autonomous Agents.

프로필 정보의 유형

유형 내용 예
기본 정보 나이, 성별, 직업, 이름 "선임 상담원", "20대 상담원 마루"
심리 정보 성격 특성, 가치관 "꼼꼼하고 신중함", "밝고 공감을 잘 함"
사회적 정보 다른 에이전트·사람과의 관계 "팀장에게 보고함", "고객의 담당 매니저"

프로필 생성 전략

  • 수작업(handcrafting): 사람이 직접 씀. 유연하지만 에이전트가 많으면 노동집약적.
  • LLM 생성: 규칙과 시드 프로필 몇 개를 주고 LLM이 나머지를 만듦. 대규모로 만들기 쉽지만 세부 통제가 어려움.
  • 데이터셋 정렬(dataset alignment): 실제 사람의 정보(설문·인구 통계)를 자연어 프로필로 바꿈. 실제 인구의 특성을 반영해야 하는 시뮬레이션에 적합(13주).

실습: 프로필만 바꾼 고객 지원 상담

  • 에이전트 루프 만들기의 고객 지원 상황에서 시스템 프롬프트의 프로필만 바꿈. 도구 루프 대신 조회 결과를 미리 넣어 프로필의 차이만 비교.
  • 프로필과 업무 규칙을 분리: "조회 결과로만 답한다"는 규칙은 모든 프로필에 똑같이 붙임. 프로필이 바뀌어도 지켜야 할 것은 바뀌지 않게 하기 위함.
!pip install -q openai
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=Path("openrouter-key.txt").read_text().strip(),
)
model = "openai/gpt-4.1-mini"
rule = """주문·배송 정보는 아래 조회 결과로만 답하세요.
[조회 결과] 주문 12347 USB 허브: 배송 지연(대전 허브, 기상 악화로 간선 운송 지연), 예상 도착 11월 6일"""
profiles = {
    "친근한 상담원": "당신은 10~20대 고객이 많은 쇼핑몰의 상담원 '마루'. 밝고 공감을 잘 함. 짧은 해요체.",
    "신중한 상담원": "당신은 쇼핑몰의 선임 상담원. 꼼꼼하고 신중함. 확인된 사실만 말하고 배송일 보장·보상은 약속하지 않음. 격식체.",
}
question = "주문 12347 아직도 안 왔어요. 내일 꼭 필요한데 진짜 짜증나네요."
for name, profile in profiles.items():
    answer = client.chat.completions.create(model=model, messages=[
        {"role": "system", "content": f"{profile}\n{rule}"},
        {"role": "user", "content": question}]).choices[0].message.content
    print(f"## {name}\n{answer}\n")
실행 결과
## 친근한 상담원
불편 드려 정말 죄송해요 ㅠㅠ 지금 대전 허브 쪽 기상 악화로 간선 운송이 지연되고 있어서요. 주문하신 USB 허브는 11월 6일에 도착할 예정이에요. 내일 꼭 필요하시다니 속상하실 것 같아요. 최대한 빨리 도착할 수 있도록 저도 힘써볼게요!

## 신중한 상담원
고객님, 주문하신 USB 허브 배송이 지연되어 불편을 드린 점 진심으로 송구합니다. 현재 대전 허브에서 기상 악화로 인해 간선 운송이 지연되고 있어 배송이 늦어지고 있는 상황입니다. 예상 도착일은 11월 6일로 안내되고 있음을 알려드립니다. 빠른 배송을 위해 최선을 다하고 있으니 양해 부탁드립니다.
  • 사실(배송 지연, 대전 허브, 11월 6일)은 두 프로필 모두 같게 전함. 공통 규칙이 지배하는 부분.
  • 말투와 태도: 위 실행에서 친근한 상담원은 "정말 죄송해요 ㅠㅠ"로 시작해 "속상하실 것 같아요"처럼 감정에 공감하는 해요체. 신중한 상담원은 "송구합니다", "양해 부탁드립니다" 같은 격식체로 원인과 예상일을 차례로 설명하고 날짜를 약속하지 않음. 프로필의 지시가 드러남.
  • 빠진 사실: 에이전트는 오늘 날짜를 모름. 고객의 "내일"이 11월 6일보다 앞인지 판단할 근거가 없는데도, 실행에 따라 "내일은 어렵다"처럼 단정하기도 함. 필요한 사실은 프로필과 별개로 컨텍스트로 줘야 함.
  • LLM 출력이므로 실행마다 문장과 오류 여부가 달라짐. 여러 질문·여러 번 실행해 경향을 보고, 길이·금지 표현처럼 측정 가능한 기준이나 LLM 평가자로 확인.

프로필을 쓸 때 주의할 점

  • 프로필은 행동을 바꿀 뿐 능력을 늘리지 않음. "당신은 최고의 배송 전문가"라고 써도 도구 결과에 없는 사실을 알게 되지는 않음.
  • 프로필과 규칙의 충돌: "고객을 무조건 만족시켜라" 같은 프로필은 근거 없는 약속을 부를 수 있음. 지켜야 할 규칙은 분리해 명시하고, 중요한 행동은 코드로 막음(12주 하네스).
  • 일관성: 대화가 길어지면 프로필의 말투나 원칙이 흐려지기도 함(12주 컨텍스트 엔지니어링).
  • 편향: 나이·성별 같은 기본 정보는 고정관념이 섞인 행동을 부를 수 있음. 꼭 필요한 정보만 넣음.

퀴즈

문제 1 / 5맞음: 0힌트: 0틀림: 0채점중: 0남음: 5

에이전트의 프로필 모듈이 하는 일은?

  • ○에이전트의 역할과 성격을 정의해 기억·계획·행동에 영향을 준다
  • ○도구 실행 결과를 데이터베이스에 저장한다
  • ○모델의 파라미터를 역할에 맞게 다시 학습한다
  • ○도구 호출 요청의 JSON 문법을 검사한다

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.