vectorstore 12

[LangChain RAG 구축 시리즈 Ep.29] 🧠 멀티 문서 기반 답변 생성 시 참조 문서 요약 전략

RAG 시스템이 문서를 검색해 답변을 생성할 때,단일 문서만 참조하는 것이 아니라 여러 문서를 동시에 참조하는 경우가 많습니다.하지만 GPT가 3~5개 문서를 한꺼번에 받게 되면,핵심 내용이 흐려지거나전체 내용을 단순 나열하거나응답 길이가 길어지고 요점을 놓치게 됩니다.그래서 이번 글에서는:✅ LangChain의 stuff, map_reduce, refine 체인 전략을 이해하고✅ 멀티 문서에 대한 요약을 보다 효과적으로 수행할 수 있도록✅ 실제 체인 구조를 비교하고 선택하는 기준을 제시합니다.🎯 목표여러 문서를 입력받아 GPT가 요약한 응답을 생성하는 구조 설계stuff, map_reduce, refine 체인 방식 비교실무에서 적용 가능한 요약 전략 예제 구현🧠 Step 1. 체인 비교를 위한 기..

카테고리 없음 2025.04.05

[LangChain RAG 구축 시리즈 Ep.28] 🧵 멀티 테이블 + 대화형 흐름을 위한 Memory 설계 전략

지금까지 우리는 사용자 질문을 기반으로적절한 Iceberg 테이블을 선택하고, 해당 문서에서 정보를 검색해GPT가 정답을 생성하는 단발성 RAG 시스템을 구축해왔습니다.하지만 실제 업무에서 사용자가 묻는 방식은 이렇습니다:“상품 목록 알려줘”(이후) “그 중에서 가격이 가장 높은 건 뭐야?”(이후) “그 상품의 고객 리뷰는 있어?”이처럼 대화 흐름이 이어지는 구조에서는이전 질문과 응답이 다음 질문에 영향을 주어야 합니다.이번 글에서는 이러한 흐름을 구현하기 위해ConversationBufferMemory를 기반으로 대화 상태를 유지하는 구조를 설계합니다.🎯 목표LangChain의 Memory 기능을 이해하고 적용질문-응답의 히스토리를 유지한 대화형 RAG 구현다양한 테이블에서 이어지는 질의를 자연스럽게..

[LangChain RAG 구축 시리즈 Ep.23] 🔧 FastAPI 기반 RAG 서버 구성하기 (엔드포인트 설계)

이제까지 우리는 LangChain을 사용해 문서를 임베딩하고,ChromaDB에 저장하며,Retriever → QA Chain → Conversational QA Chain으로 이어지는전체 RAG 시스템의 기본 구조를 구현해왔습니다.이번 글에서는 이 구조를 FastAPI 웹 서버 형태로 감싸서📡 외부에서 HTTP 요청을 통해 RAG 시스템을 호출할 수 있도록 구성합니다.사용자는 /rag/query로 질문을 보내면서버는 문서를 검색하고 GPT가 응답을 생성하여응답과 함께 참조 문서까지 반환합니다🎯 목표LangChain QA 체인을 FastAPI로 래핑/rag/query POST API 구현질문, 응답, 참조 문서를 포함한 JSON 응답 반환🗂️ 디렉토리 구조 예시rag-iceberg-project/├─..

[LangChain RAG 구축 시리즈 Ep.21] 🧬 멀티 문서 및 멀티 컬렉션 처리 전략 설계하기

이 글에서는 여러 Iceberg 테이블 정보를 다루는 상황을 가정하여멀티 문서, 멀티 컬렉션, 문서 메타데이터 기반 필터링 전략을 구성해봅니다.모든 코드는 초보자도 이해할 수 있도록 주석을 보강했습니다.🎯 목표여러 문서를 벡터로 임베딩하여 저장하는 방법 학습문서마다 메타데이터를 지정하여 검색 시 필터링 가능하도록 구성테이블별 컬렉션으로 분리하여 관리하는 구조 설계🧪 예시 1: 멀티 문서 단일 컬렉션 구성하기# src/embed_documents.pyfrom langchain.vectorstores import Chroma # ChromaDB를 위한 모듈from langchain.embeddings import OpenAIEmbeddings # Open..

[LangChain RAG 구축 시리즈 Ep.18] 💬 RetrievalQA 체인을 통해 문서 기반 답변 생성하기

이 글에서는 앞에서 구축한 **Retriever(문서 검색기)**와OpenAI GPT 모델을 연결하여,**문서 기반의 자동 응답 시스템(RetrievalQA Chain)**을 구성합니다.🎯 목표Retriever + LLM(OpenAI) 결합문서 기반 질문 응답 흐름 구성참조 문서와 함께 GPT 응답 출력🛠️ Step 1. RetrievalQA 체인 구성 함수 만들기# src/qa_chain.pyfrom langchain.chains import RetrievalQA # Retrieval QA 체인 클래스from langchain.chat_models import ChatOpenAI # OpenAI GPT 모델from langchain.vectorstores im..

[LangChain RAG 구축 시리즈 Ep.16] 🧠 변환된 텍스트 문서를 OpenAI Embedding으로 벡터화하기

이 글에서는 이전에 생성한 .txt 형식의 자연어 문서를 OpenAI의 임베딩 모델을 활용해벡터로 변환하고 ChromaDB에 저장하는 과정을 실습합니다.이 벡터는 향후 검색(Retrieval)에서 핵심적인 역할을 하게 됩니다.🎯 목표.txt 문서를 읽어 자연어 텍스트로 로딩OpenAI 임베딩 모델을 통해 벡터 생성ChromaDB에 벡터를 저장하여 추후 검색 가능하도록 구성🗂️ 파일 구성 예시rag-iceberg-project/├── docs/products.txt ← 이전 글에서 생성된 자연어 문서├── chroma_db/ ← 벡터 DB 저장 디렉토리└── src/embed_documents.py ← 이번 글..

[LangChain RAG 구축 시리즈 Ep.09] 🗂️ ChromaDB로 벡터 저장소 구성하기

이 글에서는 앞에서 생성한 임베딩 벡터를 ChromaDB에 저장하고,이 벡터들을 기반으로 문서 검색이 가능하도록Retriever 객체를 구성하는 전체 과정을 실습합니다.🎯 목표LangChain에서 ChromaDB 벡터 저장소 구성하기JSON → 자연어 문서 → 벡터 → Chroma 저장저장된 벡터에 대해 질문(query)으로 검색 테스트🔧 ChromaDB란?Chroma는 로컬에서 작동하는 빠르고 간단한 벡터 DB입니다. 장점 설명 ✅ 설치 필요 없음LangChain과 함께 자동 동작✅ 검색 속도 빠름작은 실습/PoC에 적합✅ 오픈소스커스터마이징 가능📝 Step 1. 문서 벡터화 후 ChromaDB에 저장하기from langchain.vectorstores import Chroma ..

[LangChain RAG 구축 시리즈 Ep.07] 💬 사용자 질문을 벡터와 어떻게 매칭할까?

이 글에서는 RAG 시스템에서 사용자 질문을 어떻게 벡터로 변환하고,그 벡터가 문서와 어떤 방식으로 매칭되는지를 실제 원리와 예시를 통해 쉽게 설명합니다.🎯 오늘의 주제 요약“사용자 질문도 벡터로 바꾼 다음,이미 저장된 문서 벡터들과 비교해서가장 유사한 것(top-k)을 고른다.”이 과정을 정확히 이해하면 RAG 검색기의 작동 방식이 명확해집니다.🔢 Step 1: 사용자 질문 → 벡터로 변환사용자가 "상품 정보를 담고 있는 테이블이 뭐야?"라고 질문하면,이 문장은 아래처럼 벡터로 변환됩니다. (예시)[0.124, -0.554, 0.223, ..., 0.039] # 1536차원의 벡터➡️ 이 벡터는 embedding.embed_query()를 통해 생성됩니다.🧠 Step 2: 문서 벡터들과 거리 계..

[LangChain RAG 구축 시리즈 Ep.06] 📝 텍스트 vs 구조형 데이터: 어떻게 임베딩할까?

이 글에서는 자연어 텍스트와 구조형 JSON 데이터를 임베딩할 때어떻게 접근 방식이 달라야 하는지,그리고 각각 어떤 방식으로 가공해야 검색 성능을 극대화할 수 있는지를 실습과 함께 알아보겠습니다.🤖 임베딩은 텍스트 기반이다우리가 사용하는 임베딩 모델 대부분은텍스트의 의미를 숫자로 표현하는 것에 최적화돼 있습니다.즉, 단순한 숫자 나열이나 키-값 구조보다는사람이 이해할 수 있는 문장 구조를 더 잘 이해합니다.🔍 구조형 데이터 vs 자연어 텍스트 항목 구조형(JSON 등) 자연어 텍스트 예시{"name": "product", "type": "string"}"product라는 이름의 문자열 컬럼"임베딩 적합도❌ 낮음✅ 높음추천 처리 방식자연어로 가공 필요그대로 사용 가능🧪 실습: 같은 정보를 임베딩했..

[LangChain RAG 구축 시리즈 Ep.05] 🧩 왜 metadata.json을 문서처럼 다뤄야 할까?

이 글에서는 RAG 시스템에 Iceberg의 metadata.json을 입력으로 활용할 때,왜 이 구조화된 JSON 파일을 자연어 기반 문서처럼 가공해야 하는지, 그리고어떻게 가공해야 검색 성능이 좋아지는지를 실제 예시와 함께 알아보겠습니다.❓ JSON 그대로 임베딩하면 안 되나요?많은 분들이 처음엔 이렇게 생각할 수 있습니다:“metadata.json은 구조가 잘 되어 있는데, 그냥 통째로 벡터화하면 되는 거 아냐?”하지만 실제로는 그대로 벡터화하면 RAG 성능이 매우 떨어집니다.🧱 구조적 JSON → 의미 중심 텍스트로 바꿔야 하는 이유 문제 설명 ⚠️ 벡터가 정보의 핵심을 놓침“field-id”, “source-id” 같은 키워드가 의미를 흐림⚠️ LLM이 이해하기 어려움LLM은 자연어 문맥에 ..

728x90