AI Agent/AI Agent의 이해

2. 메모리, RAG 개념 이해

427paul 2026. 5. 26. 00:39

Memory란 무엇인가

메모리

  • 대화의 맥락을 이어가려면
    • 사람 : 이전 대화를 기억하면서 현재 대화를 진행
    • 챗봇 : 이전 대화를 기억, 이전 질문 답변을 Memory에 저장하고 이를 Prompt에 포함
  • 메모리를 사용하기 위해서는 Chain으로 엮어야 함
    • LLM과 메모리 엮기

Memory 종류

메모리 특징 언제 적합한가
ConversationBufferMemory 모든 대화를 순차적으로 저장 대화 길이가 짧고, 단순한 맥락 유지에 적합
ConversationSummaryMemory 대화를 요약해서 저장 긴 대화, 리소스 절약 필요할 때
ConversationBufferWindowMemory 최근 N턴만 기억 최신 문맥만 중요할 때(챗봇)

ConversationBufferMemory

  • 모든 대화 내용을 그대로 저장
  • 텍스트 누적 방식으로 LLM에 전달
  • 가장 기본적인 메모리로 대화 맥락이 적은 상황에 적합

ConversationSummaryMemory

  • 대화 내용을 요약해 저장
  • 긴 대화를 다룰 때 적합(프롬프트 전체 내용을 붙이지 않아 토큰 절약 가능)
  • 내부적으로 요약용 LLM이 호출됨
    • 요약은 두번째 대화부터 진행
    • 요약 범위 : 이전 요약 + 새 메시지들만 요약해서 업데이트

ConversationBufferWindowMemory

  • 최근 N턴의 대화만 기억
  • 메모리 용량 조절 가능(k=숫자)
  • 과거 내용은 자동 삭제됨(메모리에는 k턴의 대화 내용만 저장)
  • 챗봇처럼 최신 대화만 중요한 경우 적합

LCEL

  • 체인, 모델, 파서, 프롬프트 등 여러 구성요소를 파이프라인처럼 연산자로 연결할 수 있는 표현식 기반 체인 구성 방식
  • input | Runnable1 | Runnable2 | Runnable3
    • input : prompt
    • Runnable1 객체 :
      • LangChain에서 데이터를 받아 처리하고, 다음 단계로 넘겨주는 연결 가능한 처리 단위

RAG

LLM

  • 학습하지 않은 내용은 모름

LLM with RAG

  1. 사용자 질문을 받음
    • 임베딩 : 벡터로 변환(질문 벡터)
  2. 지식DB에서 답변에 필요한 문서 검색
    • [질문 벡터]와 DB내 저장된 [문서 벡터]와 유사도 계산
    • 가장 유사도가 높은 문서 n개 찾기
  3. 필요한 문서를 포함한 프롬프트 생성
  4. LLM이 답변 생성

Vector DB

  • 대규모 텍스트 데이터 및 임베딩 벡터를 저장, 검색용

구축 절차

  • 텍스트 추출 : Loader
    • 다양한 문서(word, pdf, web page 등)로부터 텍스트 추출
  • 텍스트 분할 : Splitter
    • chunk 단위로 분할
    • Document 객체로 만들기
  • 텍스트 벡터화 : Text Embedding
  • Vector DB로 저장 : Vector Store

Loader

다양한 소스에서 문서를 불러오고 처리하는 과정 담당

  • 사전지식이 필요한 지식 기반의 태스크, 정보 검색, 데이터 처리 작업 등을 처리할 때 필요
  • 다양한 소스 지원
    • 웹 페이지, PDF 파일, 데이터베이스 등 다양한 소스에서 문서를 불러올 수 있음
  • 데이터 변환 및 정제
    • 불러온 문서 데이터를 분석하고 처리하여, 랭체인의 다른 모듈이나 알고리즘이 처리하기 쉬운 형태로 변환
    • 불필요한 데이터를 제거하거나, 구조를 변경할 수도 있음
  • 효율적인 데이터 관리
    • 대량의 문서 데이터를 효율적으로 관리하고, 필요할 때 쉽게 접근할 수 있도록 합니다.
    • 이를 통해 검색 속도를 향상시키고, 전체 시스템의 성능을 높일 수 있습니다.

Splitter

긴 문서를 작은 단위인 Chunk로 나누는 텍스트 분리 도구

  • 텍스트를 분리하는 작업 : 청킹(Chunking)
  • 청킹하는 이유
    • LLM 모델의 입력 토큰의 개수가 정해져 있기 때문
    • 텍스트가 너무 긴 경우에는 핵심 정보 이외에 불필요한 정보들이 많이 포함됨 → RAG 품질 저하 요인
    • 핵심 정보가 유지될 수 있는 적절한 크기로 나누는 것이 중요
  • 분할 시 고려사항
    • 텍스트 분할 의미
      • 텍스트를 나눌 때 각 청크가 독립적으로 의미를 갖도록 나눠야 한다.
      • 이를 위해 문장, 구절, 단락 등 문서 구조를 기준으로 나눌 수 있다.
    • 청크 크기
      • 각 청크의 크기를 직접 조정
      • LLM 모델의 입력 크기와 비용 등을 종합적으로 고려하여 애플리케이션에 적합한 최적 크기를 결정하는 기준
      • 예 : 단어 수, 문자 수 등 기준

Embedding

텍스트 데이터를 숫자로 이루어진 벡터로 변환하는 과정

이때, 의미적인 정보를 보존하도록 설계

  • 목적
    • 벡터 표현을 사용하면, 텍스트 데이터를 벡터 공간 내에서 수학적으로 다룰 수 있게 됨
    • 이를 통해 텍스트 간의 유사성을 계산 가능
    • 텍스트 데이터를 기반으로 하는 다양한 머신러닝 및 자연어 처리 작업 수행
  • 모델
    • Openai : text-embedding-ada-002(or text-embedding-3-small)
    • Micorsoft : e5-large-v2

Vector Store

벡터 저장소

  • 벡터 형태로 표현된 데이터, 즉 임베딩 벡터들을 효율적으로 저장하고 검색할 수 있는 DB
  • Vector DB라고 불림
    • 대표적인 Vector DB : Chroma, FAISS
    • Chroma
      • 빠르게 RAG 시스템을 구축하고 싶을 때
      • 메타 데이터 기반 검색이 필요할 때
      • Python 기반 프로젝트에서 간단히 사용하고 싶을 때
    • FAISS
      • 수백만 개 이상의 벡터를 빠르게 검색해야 할 때
      • GPU를 활용한 대량의 유사도 검색이 필요할 때
      • 검색 속도를 극한으로 최적해야 할 때

https://github.com/427paul/AI_Agent/blob/main/AI_Agent_Basic/03_LangChain_%EA%B8%B0%EC%B4%882.ipynb

 

AI_Agent/AI_Agent_Basic/03_LangChain_기초2.ipynb at main · 427paul/AI_Agent

Contribute to 427paul/AI_Agent development by creating an account on GitHub.

github.com

 

'AI Agent > AI Agent의 이해' 카테고리의 다른 글

6. LangGraph 기초1 기본 그래프2  (0) 2026.05.30
5. LangGraph 기초1 기본 그래프  (0) 2026.05.29
4. Memory  (1) 2026.05.28
3. RAG 개념 이해  (0) 2026.05.27
1. LangChain 기초  (0) 2026.05.24