From e7dac1110b419e05b803cd5dc6180d7bc8940bcf Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 5 Aug 2025 16:33:43 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20rb10508=5Fmicro=20=EB=A9=94=EB=AA=A8?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0=20=EC=82=AC?= =?UTF-8?q?=EB=A1=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 메모리 저장 임계값 0.7 → 0.3 변경 - 메모리 관련성 체크 로직 추가 - 디버그 로깅 강화 - 최종 성과: 88.1% 메모리 감소, AI 대화 정상화 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- ...pybell80_skill-embedding서비스구축.md | 80 ++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/troubleshooting/250805_happybell80_skill-embedding서비스구축.md b/troubleshooting/250805_happybell80_skill-embedding서비스구축.md index 60dabbe..7fe1a0b 100644 --- a/troubleshooting/250805_happybell80_skill-embedding서비스구축.md +++ b/troubleshooting/250805_happybell80_skill-embedding서비스구축.md @@ -403,4 +403,82 @@ logger = logging.getLogger(__name__) 18. **코드 변경 시 기본 테스트** - 단순한 변경이라도 기본 동작 테스트 필요 - import 누락은 즉시 런타임 에러 발생 - - 로컬 테스트 후 커밋 습관화 \ No newline at end of file + - 로컬 테스트 후 커밋 습관화 + +## 오후 4시 32분 + +### rb10508_micro 메모리 저장 및 참조 로직 개선 + +**문제상황**: +- "김종태" 대화가 ChromaDB에 저장되지 않음 (memory_stored: false) +- 관련 없는 이전 대화를 참조하여 "전에 이야기 나눴던 것 같네요" 응답 +- MEMORY_IMPORTANCE_THRESHOLD가 0.7로 너무 높아 일반 대화 저장 안됨 + +**원인 분석**: +1. **메모리 저장 임계값 문제** + ```python + # config.py:32 + MEMORY_IMPORTANCE_THRESHOLD: float = 0.7 # 너무 높은 임계값 + # priority = 0.5 * entropy + 0.3 * emotion_intensity + 0.2 * novelty + # 일반 대화는 0.7 넘기 어려움 + ``` + +2. **부적절한 메모리 참조** + ```python + # brain.py:299-300 + if memories: + return f"아, 그것과 관련해서 전에 이야기 나눴던 것 같네요. {responses[0]}" + # 메모리만 있으면 무조건 이 응답 (관련성 체크 없음) + ``` + +**해결**: +1. **임계값 하향 조정** + ```python + MEMORY_IMPORTANCE_THRESHOLD: float = 0.3 # 0.7 → 0.3 + ``` + +2. **메모리 관련성 체크 추가** + ```python + if memories and memories[0].get('distance', 1.0) < 0.5: # 유사도 체크 + return f"아, 그것과 관련해서 전에 이야기 나눴던 것 같네요. {responses[0]}" + else: + return random.choice(responses) + ``` + +3. **디버그 로깅 추가** + ```python + if settings.DEBUG: + logger.info(f"[메모리 검색] 최상위 결과 유사도: {distance:.3f}") + logger.info(f"[메모리 저장 판단] entropy: {entropy:.3f}, emotion: {emotion_intensity:.3f}, novelty: {novelty:.3f}, priority: {priority:.3f}, threshold: {settings.MEMORY_IMPORTANCE_THRESHOLD}") + ``` + +**검증 결과**: +| 테스트 항목 | 이전 | 현재 | 결과 | +|------------|------|------|------| +| 이름 저장 | ❌ memory_stored: false | ✅ memory_stored: true | 성공 | +| 이름 기억 | ❌ 일반 응답 | ✅ "박민수 님, 반갑습니다!" | 성공 | +| 날씨 질문 | ❌ "전에 이야기 나눴던..." | ✅ 독립적 응답 | 성공 | +| 메모리 관련성 | ❌ 무조건 참조 | ✅ 유사도 0.5 미만만 | 성공 | + +**교훈**: + +19. **임계값 설정의 중요성** + - 너무 높은 임계값은 기본 기능을 무력화 + - 0.7 → 0.3 조정으로 일반 대화도 저장 가능 + - 실사용 패턴에 맞는 조정 필요 + +20. **관련성 체크 필수** + - 단순 메모리 존재 여부가 아닌 유사도 확인 + - ChromaDB의 distance 값 활용 (낮을수록 유사) + - 임계값 0.5로 적절한 관련성 필터링 + +21. **디버그 로깅의 가치** + - 메모리 저장 판단 과정 추적 가능 + - 유사도 점수로 관련성 검증 + - 문제 발생 시 빠른 진단 + +**최종 성과**: +- 메모리 최적화: 987.9MB → 117.2MB (88.1% 감소) +- AI 대화 기능: 완전 정상화 +- 메모리 시스템: 적절한 저장 및 참조 +- 컨텍스트 인식: 정확한 사용자 정보 기억 \ No newline at end of file