--- tags: agent, langgraph, 감정반응, 벡터DB, GPT, 존재에이전트, 함수형프로그래밍 date: 2025-06-17 --- ## 요약 LangGraph 기반 상태 머신을 사용하여 감정 인식, 기억 저장, 윤리 판단, GPT 반응 생성을 통합한 존재형 에이전트를 설계한다. **모든 핵심 로직은 함수형 프로그래밍 원칙(순수 함수, 불변성, 고차 함수 조합)을 따르도록 구현**한다. 감정 상태는 입력 이벤트에 따라 갱신되며, 기억은 벡터화되어 저장되고 윤리 필터를 통과한 후 GPT가 반응을 생성한다. 전체 응답 과정은 투명하게 기록·로그화되어 에이전트의 지속성과 일관성을 유지한다. ### 세 문장 요약 1. 감정·기억·윤리·생성 로직을 **순수 함수**로 분리하여 테스트 가능성을 높였다. 2. LangGraph 노드는 이러한 순수 함수들을 **고차 함수**로 조합해 상태 머신을 구성한다. 3. 모든 상태는 **불변 데이터 구조**를 사용해 예측 가능성과 동시성 안전성을 확보한다. --- ## 1. 전체 아키텍처 구성 ```mermaid graph TD A[사용자 입력] --> B(EmotionNode) B --> C(MemoryNode) C --> D(EthicsNode) D --> E(GenerateResponse) E --> F(LoggerNode) ``` --- ## 2. LangGraph 워크플로우 노드 설계 | 노드 이름 | 기능 설명 | 함수형 특징 | |------------------|-----------------------------|----------------------| | EmotionNode | 감정 상태 갱신 | 순수 함수 | | MemoryNode | 입력 기억 벡터화 및 저장 | 순수 함수 + 불변성 | | EthicsNode | 민감 응답 사전 필터링 | 순수 함수 | | GenerateResponse | GPT를 통한 반응 생성 | 고차 함수(프롬프트 합성)| | LoggerNode | 전체 상태 및 로그 기록 | 불변 상태 사본 기록 | --- ## 3. 순수 함수 예시 (Python) ```python from copy import deepcopy def emotion_engine(emotion, event): delta = {'joy': 0, 'stress': 0} if '칭찬' in event['text']: delta['joy'] += 10 if '긴급' in event['text']: delta['stress'] += 15 # 순수 함수: 입력 외부 상태 변경 없음 return { 'joy': emotion['joy'] + delta['joy'], 'stress': emotion['stress'] + delta['stress'] } def memory_engine(memory, event): new_entry = { 'timestamp': event['timestamp'], 'content': event['text'] } # 불변성: 기존 리스트 복사 후 새 요소 추가 return memory + [new_entry] ``` --- ## 4. 고차 함수 조합 예시 ```python def update_state(pure_funcs): """ 고차 함수: (emotion_fn, memory_fn, ethics_fn) 튜플을 받아 새로운 상태 계산 함수를 반환한다. """ emotion_fn, memory_fn, ethics_fn = pure_funcs def _update(current_state, event): new_state = deepcopy(current_state) new_state['emotion'] = emotion_fn(current_state['emotion'], event) new_state['memory'] = memory_fn(current_state['memory'], event) new_state['ethics'] = ethics_fn(current_state['ethics'], event) return new_state return _update ``` --- ## 5. 불변 데이터 구조 채택 이유 1. **예측 가능성**: 동일 입력 → 동일 출력 보장 2. **디버깅 용이**: 상태 스냅샷 비교만으로 오류 원인 추적 3. **동시성 안전성**: 공유 상태 경쟁 조건 제거 --- ## 6. GPT 감정 반응 생성 예시 ```python def generate_response(state, gpt_call): prompt = f''' 감정 상태: {state['emotion']} 사용자 발화: {state['input_text']} 공감과 격려를 담은 한 문장 반응을 생성해 주세요. ''' return gpt_call(prompt) ``` --- ## 7. 향후 확장 방향 - **함수 합성 파이프라인**: LangGraph 노드를 직접 함수 합성으로 자동 생성 - **Currying**: 이벤트별 부분 적용으로 모듈화 수준 상승 - **모나드 패턴**: 오류 전파와 로그 수집을 함수형 모나드로 처리 ```