- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
137 lines
3.9 KiB
Markdown
137 lines
3.9 KiB
Markdown
# 250919 동적 컨텍스트 엔지니어링 시스템 (업데이트)
|
|
|
|
## 1. 초기 구현 (2025-08-06)
|
|
|
|
### 문제 상황
|
|
|
|
**의도 파악 실패 사례**:
|
|
- "내 이름은?" → AI가 자기소개로 오해
|
|
- "네 이름은?" → 정상 응답
|
|
- 사용자가 부른 이름(베르단디) 기억 못함
|
|
|
|
**원인 분석**:
|
|
1. 캐시 임계값 0.3 (너무 낮음)
|
|
2. 프롬프트 하드코딩 ("당신은 로빙입니다" 고정)
|
|
3. 메모리와 프롬프트 분리
|
|
|
|
### 철학적 재검토
|
|
|
|
**초기 오해**: 로빙의 정체성을 고정된 것으로 이해
|
|
**올바른 이해**: 성장하는 존재, 사용자와 함께 개성 발전
|
|
|
|
**프롬프트 구조 재설계**:
|
|
- Base Layer: 기본 규칙, 윤리 원칙
|
|
- Dynamic Layer: 이름, 레벨, 최근 기억
|
|
|
|
### Intent 패턴 최적화
|
|
|
|
**문제**: 과도한 패턴 매칭이 캐시 우회
|
|
**해결**:
|
|
- greeting 패턴 축소
|
|
- memory_recall 패턴 제거
|
|
- question 패턴 정밀화
|
|
**효과**: 캐시 활성화율 80% 이상
|
|
|
|
### 동적 프롬프트 구현
|
|
|
|
**방법**: 컨텍스트 변수 방식
|
|
|
|
**구현 내역**:
|
|
1. 이름 추출 함수 추가 (_extract_user_name, _extract_my_name)
|
|
2. think() 메서드에서 컨텍스트 변수 설정
|
|
3. 프롬프트 동적 구성 (이름, 레벨 포함)
|
|
4. greeting 개인화
|
|
|
|
### 초기 배포 결과
|
|
|
|
**효과**:
|
|
- "베르단디"로 불리면 기억
|
|
- "내 이름은?" 올바르게 이해
|
|
- 사용자별 맞춤 응답
|
|
- 성장 상태(레벨) 반영
|
|
|
|
## 2. 영속화 문제 해결
|
|
|
|
### 이름 영속화 문제
|
|
|
|
**문제**: "내 이름은 김종태야" 인식 후 다음 대화에서 망각
|
|
**원인**: 매 요청마다 Brain 인스턴스 재생성
|
|
|
|
### ChromaDB Identity 컬렉션 솔루션
|
|
|
|
**구현**:
|
|
1. memory.py에 identity 컬렉션 추가
|
|
2. store_identity() 메서드로 key-value 저장
|
|
3. get_identity() 메서드로 로드
|
|
4. think() 시작 시 identity 로드
|
|
5. Structured Output에서 즉시 저장
|
|
|
|
**효과**:
|
|
- 컨테이너 재시작 후에도 이름 유지
|
|
- Brain 인스턴스 재생성과 무관
|
|
- ChromaDB 백업과 함께 관리
|
|
|
|
## 3. 캐시 시스템 재설계
|
|
|
|
### 캐시 시스템 재설계
|
|
|
|
**문제**:
|
|
- 캐시 임계값 0.1~0.3 (업계 표준 0.8)
|
|
- 3회 사용 제한 (TTL 기반이 표준)
|
|
- 템플릿 응답이 LLM 응답과 충돌
|
|
|
|
**해결**:
|
|
1. 캐시 완전 제거 (USE_CONVERSATION_CACHE: False)
|
|
2. 템플릿 응답 제거, 100% LLM API 사용
|
|
3. 모든 대화 무조건 저장 (User + Assistant 모두)
|
|
|
|
## 4. 현재 상황 (2025-09-19)
|
|
|
|
### 동적 컨텍스트 엔지니어링 필요성
|
|
|
|
**로빙의 성장 = 피드백 루프**:
|
|
- Gateway(감각) → rb8001(뇌) → Skills(운동) → 피드백
|
|
- 각 스킬이 실행 결과를 rb8001에 보고
|
|
- rb8001이 피드백으로 다음 행동 조정
|
|
|
|
**컨텍스트 최적화 방향**:
|
|
1. **RAG 통합**: skill-rag-file로 컨텍스트 확장
|
|
2. **메타데이터 활용**: ChromaDB 메타데이터로 관련성 판단
|
|
3. **동적 우선순위**: 최근성, 중요도, 감정 상태 고려
|
|
4. **피드백 학습**: 성공/실패 패턴을 베이즈 업데이트
|
|
|
|
### 구현 로드맵
|
|
|
|
**Phase 1: 기본 동적 조정** (현재)
|
|
- 사용자/로빙 이름 동적 반영
|
|
- 레벨/스탯 실시간 반영
|
|
- 최근 대화 컨텍스트 포함
|
|
|
|
**Phase 2: RAG 기반 확장** (계획)
|
|
- skill-rag-file 연동으로 장기 기억 검색
|
|
- 문서 기반 컨텍스트 증강
|
|
- 의미적 유사도 기반 우선순위
|
|
|
|
**Phase 3: 피드백 루프 구현** (미래)
|
|
- 스킬 실행 결과를 컨텍스트에 반영
|
|
- 성공 패턴 학습 및 강화
|
|
- 실패 패턴 회피 메커니즘
|
|
|
|
### 기술적 고려사항
|
|
|
|
**컨텍스트 윈도우 관리**:
|
|
- Gemini: 128k 토큰
|
|
- GPT-4: 128k 토큰
|
|
- 효율적 압축과 요약 필요
|
|
|
|
**우선순위 알고리즘**:
|
|
- Recency (최근성): 시간 가중치
|
|
- Relevance (관련성): 벡터 유사도
|
|
- Importance (중요도): 메타데이터 태그
|
|
- Emotion (감정): 현재 감정 상태
|
|
|
|
---
|
|
|
|
작성자: happybell80 & Claude
|
|
프로젝트: rb8001
|
|
주제: 동적 컨텍스트 엔지니어링 시스템 |