영리의 테크블로그

Agent 만들기 [6] - 사용자 프로필 기반 개인화된 페르소나 생성 시스템 본문

dev/AI

Agent 만들기 [6] - 사용자 프로필 기반 개인화된 페르소나 생성 시스템

영리0 2024. 11. 4. 21:09

1. 개요

사용자의 MBTI, 성격, 관심사 등 다양한 개인 특성을 학습하여 그 사람만의 고유한 AI 분신을 생성하는 시스템을 구현했음

2. 시스템 아키텍처

2.1 핵심 컴포넌트

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# GPT-4 모델 초기화
gpt4_model = ChatOpenAI(model="gpt-4", temperature=0.7)

다음 주요 컴포넌트들을 활용했음:

  • LangChain: 프롬프트 관리 및 LLM 연동 담당
  • Firestore: 사용자 프로필 및 페르소나 데이터 저장소로 활용
  • GPT-4: 페르소나 생성 엔진으로 사용

3. 프로필 학습 시스템

3.1 학습 데이터 구조

class UserProfile:
    mbti: str
    personality: List[str]
    interests: List[str]
    communication_style: str
    speaking_style: str
    emoji_style: str
    values: List[str]
    decision_style: str

3.2 프롬프트 엔지니어링

profile_persona_template = """
사용자 프로필:
MBTI: {mbti}
성격: {personality}
관심사: {interests}
대화 스타일: {communication_style}
말투: {speaking_style}
이모티콘 사용: {emoji_style}
가치관: {values}
의사결정 스타일: {decision_style}
응답 형식:
description: 성격과 특성 설명
tone: 말투와 의사소통 스타일
example: 대화 예시
"""

4. 페르소나 생성 프로세스 구현

4.1 데이터 처리 로직

result = profile_chain.invoke({
    "mbti": profile.mbti,
    "personality": ", ".join(profile.personality),
    "interests": ", ".join(profile.interests),
    "communication_style": profile.communication_style,
    "speaking_style": profile.speaking_style,
    "emoji_style": profile.emoji_style,
    "values": ", ".join(profile.values),
    "decision_style": profile.decision_style
})

4.2 응답 파싱 및 구조화 방식

sections = {}
current_section = None
for line in response_text.split('\n'):
    if line.startswith('description:'):
        current_section = 'description'
        sections[current_section] = line.replace('description:', '').strip()
    # ... 다른 섹션들도 유사하게 처리함

5. 페르소나 업데이트 구현

5.1 기존 페르소나 업데이트 로직

for persona in personas:
    if persona.get('Name') == 'clone':
        updated_persona = persona.copy()
        updated_persona.update({
            "DPNAME": f"{user_name}의 분신",
            "description": sections.get('description', ''),
            "tone": sections.get('tone', ''),
            "example": sections.get('example', '')
        })

6. 구현의 특징과 장점

  1. 개인화된 학습 구현
    • MBTI 기반 성격 특성을 반영했음
    • 개인의 의사소통 스타일을 학습하도록 함
    • 관심사와 가치관을 통합적으로 처리함
  2. 적응형 페르소나 개발
    • 사용자 프로필 변화에 따라 자동 업데이트되도록 구현함
    • 기존 페르소나 특성을 유지하면서 발전하는 구조로 설계함
  3. 구조화된 출력 시스템
    • 명확한 성격 설명을 제공함
    • 일관된 의사소통 스타일을 유지함
    • 실제 대화 예시를 포함시킴

7. 코드 분석

7.1 프로필 체인 구성

profile_chain = profile_prompt | gpt4_model
  • 프롬프트 템플릿과 GPT-4 모델을 파이프라인으로 연결했음
  • 일관된 출력 형식을 보장하도록 설계함

7.2 데이터 지속성 확보

user_ref.update({
    'persona': updated_personas
})
  • Firestore를 통해 안정적인 데이터 저장을 구현함
  • 트랜잭션 안정성을 보장하도록 함

8. 향후 개선 방향

  1. 학습 데이터 확장 계획
    • 대화 이력 분석을 추가할 예정임
    • 감정 상태 트래킹을 구현할 계획임
  2. 페르소나 진화 시스템
    • 시간에 따른 성격 발전을 구현할 예정임
    • 상황 적응형 응답을 개발할 계획임
  3. 성능 최적화 방안
    • 캐싱 시스템을 도입할 예정임
    • 비동기 처리를 강화할 계획임

9. 결론

이 시스템을 통해 단순한 챗봇을 넘어서는 진정한 '디지털 분신'을 구현했음.

지속적인 학습과 업데이트를 통해 더욱 자연스럽고 개인화된 상호작용을 제공할 수 있게 됨.

앞으로도 계속해서 발전시켜 나갈 예정임.