hmk run dev
랭체인과 database로 RAG 구현하기 본문
LangChain과 Pinecone으로 구현하는 RAG 패턴
LangChain과 Pinecone을 사용하여 RAG 패턴을 구현하는 방법에 대해 알아보겠습니다.
RAG는 대규모 언어 모델(LLM)의 응답을 더욱 정확하고 신뢰성 있게 만들어주는 핵심 패턴입니다.
RAG는 대규모 언어 모델(LLM)의 응답을 더욱 정확하고 신뢰성 있게 만들어주는 핵심 패턴입니다.
1. 데이터 준비 및 임베딩 단계
먼저 데이터를 벡터 형태로 변환하여 저장하는 과정이 필요합니다.
이 단계에서는:
- OpenAI의 임베딩 모델을 초기화하여 텍스트를 벡터로 변환할 준비를 합니다
- Pinecone 벡터 스토어를 설정하여 벡터화된 데이터를 저장할 공간을 마련합니다
# OpenAI의 임베딩 모델 초기화
embeddings = OpenAIEmbeddings(openai_api_key=os.getenv("OPENAI_API_KEY"))
# Pinecone 벡터 저장소 초기화
vectorstore = PineconeVectorStore(
index_name=os.getenv("INDEX_NAME"),
embedding=embeddings
2. 검색 단계
사용자의 질문을 받아 관련 정보를 검색하는 단계입니다.
이 단계에서는:
- 사용자의 쿼리를 벡터로 변환합니다
- Pinecone에서 유사도 기반으로 관련 문서를 검색합니다
# 벡터 스토어의 검색 기능 초기화
retriever = vectorstore.as_retriever()
# 검색 체인 생성
retrieval_chain = create_retrieval_chain(
retriever=retriever,
combine_docs_chain=combine_docs_chain
)
3. 문서 처리 단계
검색된 문서들을 처리하고 결합하는 단계입니다.
이 단계에서는:
- 검색된 여러 문서들을 하나의 문맥으로 결합합니다.
- 결합된 문서를 LLM이 이해할 수 있는 형태로 포맷팅합니다.
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# 문서 결합 체인 생성
combine_docs_chain = create_stuff_documents_chain(llm, retrieval_qa_chat_prompt)
4. 응답 생성 단계
LLM을 사용하여 최종 응답을 생성하는 단계입니다.
검색된 데이터 기반으로 프롬프트에 추가해 LLM에 다시한번 검색후 근거에 있는 답변을 받고 사람에게 익숙한 자연어 처리를 수행합니다.
이 단계에서는:
- 검색된 문서와 사용자의 질문을 포함한 프롬프트를 생성합니다.
- LLM이 검색된 문서를 기반으로 정확한 응답을 생성합니다
- 응답을 지정된 형식(3문장 이내, 감사 인사 포함)에 맞게 출력합니다
template = """
Use the following pieces of retrieved context to answer the question at the end.
If you don't know the answer, just say that you don't know. don't try to make up an answer.
Use three sentence maximum and keep the answer concise as possible.
Always say "thank for your asking" at the end of the answer.
{context}
Question: {question}
Helpful Answer:
"""
custom_rag_prompt = PromptTemplate.from_template(template)
rag_chain = (
{"context": vectorstore.as_retriever() | format_docs, "question": RunnablePassthrough()}
| custom_rag_prompt
| llm
| StrOutputParser()
)
결론
RAG 패턴은 LLM의 한계를 보완하고 더 신뢰할 수 있는 응답을 생성하는 강력한 방법입니다. LangChain과 Pinecone을 사용하면 이러한 RAG 패턴을 쉽게 구현할 수 있으며, 특히:
- 벡터 데이터베이스를 통한 효율적인 정보 검색
- 관련 문서 기반의 정확한 응답 생성
- 커스터마이즈 가능한 응답 형식
등의 장점을 활용할 수 있습니다. 이상으로 RAG 패턴 구현에 대한 설명을 마치겠습니다. 실제 프로젝트에 적용하실 때 참고가 되셨기를 바랍니다.
'AI' 카테고리의 다른 글
LangChain으로 AI 애플리케이션 (0) | 2025.02.01 |
---|
Comments