Building a RAG System with LangChain

Enhancing LLM responses using document retrieval and generative AI.

Introduction

Retrieval-Augmented Generation (RAG) improves AI-generated responses by incorporating external documents during inference. In this blog, we will build a simple RAG system using **LangChain** and **OpenAI** models.

Pre-requisites

Install the necessary dependencies:

pip install langchain langchain-community langchain-openai faiss-cpu

Store API keys in a .env file for security.

Setting Up Environment Variables

import os
from dotenv import load_dotenv
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["LANGCHAIN_API_KEY"] = os.getenv("LANGCHAIN_API_KEY")
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = os.getenv("LANGCHAIN_PROJECT")

Setting Up the LLM

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="o1-mini")
print(llm)

Creating a Chat Prompt

from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "You are an expert AI Engineer. Provide an answer based on the question."),("user", "{input}")])

Implementing RAG

from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://python.langchain.com/docs/tutorials/llm_chain/")
document = loader.load()

Splitting Documents

from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
documents = text_splitter.split_documents(document)

Creating a Vector Store

from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)

Implementing a Retriever

retriever = vectorstore.as_retriever()

Creating the Retrieval Chain

from langchain.chains import create_retrieval_chain
retrieval_chain = create_retrieval_chain(retriever, chain)

Running the RAG Pipeline

result = retrieval_chain.invoke({"input": "Note that ChatModels receive message objects as input"})
print(result['answer'])

Conclusion

This RAG system enhances LLMs by integrating document retrieval with generative AI. Applications include AI search engines, customer support, and research assistants.

Learn more at LangChain Documentation