결론부터 말하면:
지금까지가 "ChromaDB 기반 장기기억의 기본 동작을 완성하는 과정"이었다면, 다음 단계가 이 학습 단계에서의 마지막 핵심 단계라고 보는 것이 좋습니다.
다만 AI Agent의 장기기억 시스템 전체로 보면 이후에 중복 기억 방지, 기억 수정/삭제, 중요도 관리, PostgreSQL↔ChromaDB 불일치 복구 같은 고급 단계가 더 있습니다.
그리고 저는 지금은 그런 고급 기능으로 바로 넘어가지 않고, 한 단계 더 정리해서 현재 시스템을 완성된 구조로 이해하는 것을 추천합니다.
1. 우선 이번 테스트 결과를 해석해 봅시다
이번 결과는 사실상 우리가 목표로 했던 것을 거의 모두 보여줬습니다.
첫 번째 질문:
"나는 앞으로 AI Agent 공부를 계속할 생각이야."
에 대해서:
LLM Memory Extraction 결과
goal
"사용자는 앞으로 AI Agent 공부를 계속할 생각이다."
importance: 9
가 나왔습니다.
그리고 PostgreSQL:
memory_id=42
그리고:
memory_id=43
까지 저장됐습니다.
그 다음 바로:
🔎 새로운 Memory를 ChromaDB에 동기화하는 중...
☑️ ChromaDB에 2개 동기화 완료
가 나왔습니다.
즉,
LLM
↓
Memory 추출
↓
PostgreSQL
↓
memory_id 생성
↓
ChromaDB
가 실제로 작동했습니다.
2. 더 중요한 것은 두 번째 테스트입니다
두 번째 질문은:
"내가 요즘 공부하고 있는 분야가 뭐였지?"
였습니다.
그런데 AI는:
"현재 공부하고 있는 분야는 자동으로 저작권 안내 전화를 걸고 구매 요청을 하는 AI를 만드는 것과 관련된 Python 프로그래밍입니다."
라고 답했습니다.
여기서 중요한 것은 단순히 답변이 맞았다는 것이 아닙니다.
우리가 만든 Agent는 질문이 들어오면 먼저:
사용자 질문
↓
ChromaDB semantic search
↓
관련 Memory 검색
↓
Memory Context 생성
↓
LLM
↓
답변
을 수행합니다.
즉 기억을 먼저 검색한 후 답변하는 구조가 실제로 작동한 것입니다.

3. 그런데 이번 결과에서 재미있는 부분이 하나 있습니다
두 번째 질문을 했더니 오히려 새로운 Memory가 또 만들어졌습니다.
memory_id=44
내용은:
사용자는 Python을 이용하여
자동으로 저작권 안내 전화를 걸고 구매 요청을 하는 AI를
만드는 분야에 관심이 있다.
입니다.
이것은 현재 시스템에서 정상적인 현상입니다.
하지만 동시에 앞으로 해결해야 할 중요한 문제가 드러났습니다.
4. 바로 "Memory 중복" 문제입니다
현재 Agent는 매번:
질문
↓
답변
↓
대화 전체를 extract_memory()
↓
새 Memory 발견
↓
저장
합니다.
따라서 이미 있는 기억과 거의 똑같은 기억이 또 만들어질 수 있습니다.
예를 들어:
memory_id 27
사용자는 Python과 AI Agent 공부에 관심이 있다.
memory_id 42
사용자는 앞으로 AI Agent 공부를 계속할 생각이다.
memory_id 44
사용자는 Python을 이용하여 AI를 만드는 분야에 관심이 있다.
이런 식으로 기억이 계속 쌓일 수 있습니다.
처음에는 괜찮습니다.
하지만 대화를 1,000번 하면?
Memory
Memory
Memory
Memory
Memory
...
가 계속 늘어날 수 있습니다.
그러면 장기기억이 아니라 장기기억 쓰레기통이 될 수 있습니다. 😄
5. 그래서 "진짜 마지막 핵심 단계"가 이것입니다
제가 추천하는 다음 단계는:
Memory 저장 전 중복/유사 기억을 검사하는 단계
입니다.
현재 구조:
extract_memory()
↓
save_memories()
↓
PostgreSQL
↓
ChromaDB
를
extract_memory()
↓
Memory 정제
↓
중복/유사 기억 검사
↓
┌───────┴───────┐
↓ ↓
중복 새로운 기억
↓ ↓
저장하지 않음 PostgreSQL
↓
ChromaDB
로 바꾸는 겁니다.
이 단계까지 하면 "기억을 저장할 줄 아는 Agent"에서 "기억을 관리하는 Agent"로 한 단계 올라갑니다.
6. 그런데 여기서 중요한 학습 포인트
중복 검사를 PostgreSQL의 문자열 완전 일치로 하면 부족합니다.
예를 들어:
A:
나는 Python과 AI Agent 공부에 관심이 있다.
B:
나는 Python을 활용해서 AI Agent 개발을 계속 공부하고 있다.
문자열은 다릅니다.
하지만 의미는 상당히 비슷합니다.
따라서 ChromaDB가 아주 적합합니다.
새 Memory
↓
Embedding
↓
ChromaDB 검색
↓
가장 유사한 기존 Memory
↓
distance 확인
예를 들어:
distance = 0.08
라면 거의 같은 기억일 수 있고,
distance = 0.75
라면 상당히 다른 기억일 가능성이 있습니다.
물론 정확한 threshold는 우리가 테스트하면서 결정해야 합니다.
7. 그러면 우리가 지금까지 만든 것의 의미가 더 명확해집니다
현재 프로젝트가 단순히:
PostgreSQL + ChromaDB를 붙여봤다.
가 아닙니다.
우리가 실제로 다음 구조를 만들고 있습니다.
┌──────────────────────┐
│ 사용자 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ AI Agent │
└──────────┬───────────┘
│
┌──────────▼──────────┐
│ Memory 검색 │
└──────────┬──────────┘
│
▼
┌───────────┐
│ ChromaDB │
│ 검색 Index │
└─────┬─────┘
│
▼
관련 Memory
│
▼
LLM
│
▼
답변
│
▼
Memory Extraction
│
▼
중복 / 유사성 검사
│
▼
새로운 Memory
┌───────┴───────┐
▼ ▼
PostgreSQL ChromaDB
원본 저장 검색 Index
이게 우리가 지금 만들고 있는 Long-term Memory Architecture입니다.
8. 그래서 다음 단계에서는 무엇을 할까요?
저는 다음 순서로 가는 것을 강력하게 추천합니다.
STEP 1 — 현재 구조 정리
먼저 지금 만든 것을 한번 정리합니다.
각 파일의 역할을 확실히 합니다.
database.py
→ PostgreSQL
vector_store.py
→ ChromaDB
memory.py
→ Memory 관리
agent_with_memory.py
→ Agent 전체 orchestration
그리고 함수 간 데이터가 어떻게 이동하는지 이해합니다.
STEP 2 — Memory 중복 검사
다음으로:
is_duplicate_memory()
같은 기능을 추가합니다.
ChromaDB semantic search를 이용해서
"이 기억이 이미 존재하는가?"
를 판단하게 합니다.
STEP 3 — 중복이면 새로 저장하지 않기
예:
새 Memory
↓
ChromaDB 검색
↓
유사도 높음?
│
YES
↓
저장하지 않음
반대로:
유사도 낮음
↓
PostgreSQL 저장
↓
ChromaDB 저장
9. 그리고 그 다음은 "고급 단계"입니다
여기부터는 선택적으로 갈 수 있습니다.
고급 ① Memory Update
예를 들어:
예전:
사용자는 Python을 공부하고 있다.
나중:
사용자는 Python 공부를 마치고
AI Agent 개발 프로젝트를 시작했다.
그러면 새로운 Memory를 무조건 추가하는 것이 아니라
기존 Memory 수정
할 수 있습니다.
고급 ② Memory 삭제
사용자가:
"그 기억은 잊어줘."
라고 하면:
PostgreSQL 삭제
↓
ChromaDB 삭제
를 해야 합니다.
고급 ③ Memory 중요도 관리
현재:
importance = 1~10
을 사용하고 있습니다.
이것을 실제 검색 결과에 반영할 수도 있습니다.
예:
semantic similarity
+
importance
+
recency
를 합쳐서 최종 Memory Ranking을 만드는 겁니다.
이렇게 되면 꽤 수준 높은 Memory 시스템이 됩니다.
10. 하지만 지금 당장은 여기까지 갈 필요 없습니다
제가 지금 사용자님께 권하고 싶은 학습 순서는:
지금까지
│
▼
┌────────────────────┐
│ Memory 기본 구조 │
│ │
│ PostgreSQL │
│ + │
│ ChromaDB │
└─────────┬──────────┘
│
▼
⭐ 다음 단계
중복 / 유사 Memory 검사
│
▼
┌────────────────────┐
│ Memory 관리 │
│ │
│ 저장 │
│ 검색 │
│ 중복방지 │
└─────────┬──────────┘
│
▼
여기까지를 1차 완성
│
▼
이후 고급 Agent 설계
따라서 "다음 단계가 마지막이냐?"에 대한 제 답은:
네. 지금 배우고 있는 PostgreSQL + ChromaDB 기반 Long-term Memory의 1차 완성 단계로는 다음 '중복/유사 Memory 관리'가 마지막 핵심 단계입니다.
그 후에는 이미 만든 것을 기반으로 Memory Update/Delete/Importance/Recency/자동 요약/장기기억 정책 등으로 확장할 수 있습니다.
그리고 한 가지 더
이번 결과를 보면 저는 지금 바로 코드를 추가하기보다 잠깐 멈추는 것이 좋다고 봅니다.
왜냐하면 이제까지는 각각의 함수를 하나씩 배웠습니다.
database.py
↓
save_memory()
↓
save_memories()
↓
vector_store.py
↓
add_memory()
↓
add_memories()
↓
search_similar_memories()
↓
memory.py
↓
search_memory()
↓
agent_with_memory.py
↓
전체 연결
지금은 처음으로 이 모든 조각이 하나의 Agent로 연결되어 실제 대화 속에서 작동했습니다.
그래서 다음 단계에 들어가기 전에 제가 추천하는 것은:
현재 4개 파일의 전체 구조와 데이터 흐름을 한 번 크게 복습한 뒤 → 중복 Memory 방지 기능을 추가하는 것
입니다.
그렇게 하면 단순히 코드를 따라가는 것이 아니라, "내가 지금 AI Agent의 장기기억 시스템을 직접 설계하고 있구나"라는 감각이 확실히 잡힐 겁니다.
'Agentic AI > Memory' 카테고리의 다른 글
| 16. 장기기억(12)- PostgreSQL의 memories 테이블과 ChromaDB연결 단계(4.3) (0) | 2026.09.12 |
|---|---|
| 15. 장기기억(11)- PostgreSQL의 memories 테이블과 ChromaDB연결 단계(4.2) (0) | 2026.09.12 |
| 14. 장기기억(10) - PostgreSQL의 memories 테이블과 ChromaDB연결 단계(4.1) (0) | 2026.09.12 |
| 13. 중간 점검(1) (0) | 2026.09.12 |
| 12. 장기기억(9) - PostgreSQL의 memories 테이블과 ChromaDB연결 단계(3) (0) | 2026.09.12 |