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
- 사용자 질문을 받음
- 임베딩 : 벡터로 변환(질문 벡터)
- 지식DB에서 답변에 필요한 문서 검색
- [질문 벡터]와 DB내 저장된 [문서 벡터]와 유사도 계산
- 가장 유사도가 높은 문서 n개 찾기
- 필요한 문서를 포함한 프롬프트 생성
- 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 |