실무 Multi-Agent 오케스트레이션 17장 · 장기 기억 관리 6 / 7 ← 이전목차다음 → TechLead Cro

17장. 장기 기억 관리

정리와 체크리스트

17장에서 배운 것

  • 요약 메모리 — 오래된 이력을 버리는 대신 LLM으로 요약해 남깁니다.
  • 손실 압축 — 요약은 줄이는 과정에서 무언가를 잃습니다. 원문 보존이 아닙니다.
  • 기억의 세 층 — 단기(최근 원문), 중기(대화 안의 요약), 장기(고객 프로필 파일).
  • 고객 프로필 — 대화가 끝날 때 JSON으로 뽑아 고객 ID별로 저장하고, 재방문 때 시스템 프롬프트에 붙입니다.
  • 민감정보 — 저장하지 않습니다. 프롬프트와 코드 검사 두 겹으로 막습니다.
  • 기억의 근거 — 요약과 추출은 대화를 옮겨 적습니다. 그래서 상담원에게 근거를 주고, 기억은 그 위에 얹습니다.

한눈에 보는 핵심

# 대화 안: 과거는 요약, 최근은 원문
context = f"[이전 상담 요약]\n{self.summary}\n\n" + 최근_원문 + f"고객: {text}"

# 대화가 끝날 때: 사실만 뽑아 파일에
profiles[customer_id] = json.loads(r.text)        # JSON 모드로 뽑은 프로필 (덮어쓴다)

# 다음 방문: 프로필을 시스템 프롬프트에
system2 = (SYSTEM_BASE
           + "\n\n[이 고객에 대한 기억] 지난 상담에서 적어 둔 기록입니다. "
             "현재 처리 상태는 아니므로, 지난 상담 내용으로만 말하고 "
             "현재 상태는 확인 후 안내드린다고 답합니다.\n"
           + profile_txt)
층 모양 수명 담는 것
단기 원문 대화 안 최근 몇 턴의 세부
중기 요약 몇 줄 대화 안 오래된 턴의 줄거리
장기 세 칸짜리 JSON 대화가 끝난 뒤에도 다음 방문에 쓸 사실
기억이 맡는 것 다른 곳이 맡는 것
지난번에 무엇을 문의했는지 이어받기 그 건이 지금 어떤 상태인지 — 주문 데이터 조회
고객의 선호를 다음 방문에 반영하기 금액·기간 같은 사실 — 정책 문서

체크리스트

  • [ ] trim과 요약 메모리의 차이를 한 문장으로 말할 수 있다.
  • [ ] 요약 프롬프트에 "사실 위주", "반드시 포함"을 적은 이유를 설명할 수 있다.
  • [ ] keep_recent=2일 때 몇 번째 턴에서 요약이 일하는지 손으로 따라갈 수 있다.
  • [ ] 기억의 세 층이 각각 다른 모양인 이유를 설명할 수 있다.
  • [ ] 프로필을 JSON 모드로 뽑는 이유를 말할 수 있다.
  • [ ] 재방문 때 프로필이 모델에게 어떤 경로로 들어가는지 설명할 수 있다.
  • [ ] 같은 고객의 프로필을 다시 저장하면 어떻게 되는지 안다.
  • [ ] 민감정보를 프롬프트와 코드 두 겹으로 막는 이유를 설명할 수 있다.
  • [ ] 정책 발췌의 6,000원이 세션 2의 답까지 가는 길을 단계별로 말할 수 있다.
  • [ ] 프로필을 프롬프트에 넣을 때 "지난 상담의 기록"이라고 함께 적는 이유를 설명할 수 있다.

한 줄 핵심

기억은 대화에 있던 말을 옮겨 적습니다. 그래서 대화가 근거 위에 있어야 하고, 기억은 그 위에 얹습니다.

← 이전 절따라하기 — 요약 메모리와 고객 프로필다음 절 →실습문제와 해답
오명운 · macro@prag-ai.com