title: "Building Your First AI App with LangChain in 30 Minutes" publishedAt: "2025-01-11" summary: "Learn how to build a powerful PDF Q&A chatbot with LangChain in just 30 minutes. This hands-on LangChain quickstart guide shows you exactly how to create, deploy, and share your first AI application." tags: ["langchain", "ai", "python", "tutorial", "chatbot"] keywords: ["langchain quickstart", "langchain example", "build ai app", "pdf chatbot", "langchain tutorial", "ai application development"] author: "Fenil Sonani" readTime: "12 min"
Ready to build something amazing? In the next 30 minutes, you'll create a fully functional AI application that can answer questions about any PDF document. No extensive AI experience required – just bring your enthusiasm and follow along!
What We're Building Today
We're creating a PDF Q&A chatbot – upload any PDF document, and your AI app will instantly understand it and answer questions about its content. Think of it as having a super-smart assistant who can read and comprehend any document in seconds.
Here's what makes this LangChain example perfect for beginners:
- Practical and useful – Everyone works with PDFs
- Impressive results – Show it off to friends and colleagues
- Foundation for more – Extend it to build even cooler apps
Your 30-Minute Timeline
Let's break down our journey:
- Minutes 0-5: Setup and installation
- Minutes 5-15: Core coding
- Minutes 15-20: Adding the UI
- Minutes 20-25: Testing and deployment
- Minutes 25-30: Making it awesome
Prerequisites (2 minutes to check)
Before we dive in, ensure you have:
- Python 3.8 or higher installed
- A code editor (VS Code recommended)
- Basic Python knowledge (if you can write a function, you're ready!)
- An OpenAI API key (Get one here)
Phase 1: Lightning-Fast Setup (5 minutes)
Let's get your development environment ready. Open your terminal and run these commands:
# Create a new directory for your project
mkdir pdf-qa-chatbot
cd pdf-qa-chatbot
# Create a virtual environment
python -m venv venv
# Activate it (Windows)
venv\Scripts\activate
# Activate it (Mac/Linux)
source venv/bin/activate
# Install required packages
pip install langchain langchain-openai streamlit pypdf chromadb tiktoken
Now create a .env
file for your API key:
# Create .env file
echo "OPENAI_API_KEY=your-api-key-here" > .env
Pro tip: Replace your-api-key-here
with your actual OpenAI API key!
Phase 2: Building the AI Brain (10 minutes)
Time to write some code! Create a file called app.py
and let's build our AI app step by step.
Step 1: Import the Magic
import os
import streamlit as st
from dotenv import load_dotenv
from PyPDF2 import PdfReader
from langchain.text_splitter import CharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
# Load environment variables
load_dotenv()
These imports give us superpowers:
streamlit
creates our web interfacePyPDF2
reads PDF fileslangchain
components handle the AI magicChroma
stores document embeddings for fast retrieval
Step 2: PDF Processing Function
def process_pdf(pdf_file):
"""Extract text from PDF and prepare it for AI processing"""
# Read the PDF
pdf_reader = PdfReader(pdf_file)
text = ""
# Extract text from each page
for page in pdf_reader.pages:
text += page.extract_text()
# Split text into chunks (LangChain's secret sauce!)
text_splitter = CharacterTextSplitter(
separator="\n",
chunk_size=1000,
chunk_overlap=200,
length_function=len
)
chunks = text_splitter.split_text(text)
return chunks
Why chunks? LLMs have token limits. By splitting documents into overlapping chunks, we ensure nothing important gets lost between splits!
Step 3: Create the Q&A Chain
def create_qa_chain(text_chunks):
"""Create a conversational chain for Q&A"""
# Create embeddings (numerical representations of text)
embeddings = OpenAIEmbeddings()
# Store embeddings in a vector database
vectorstore = Chroma.from_texts(
texts=text_chunks,
embedding=embeddings
)
# Create memory for conversation history
memory = ConversationBufferMemory(
memory_key='chat_history',
return_messages=True
)
# Create the conversational chain
qa_chain = ConversationalRetrievalChain.from_llm(
llm=ChatOpenAI(temperature=0),
retriever=vectorstore.as_retriever(),
memory=memory
)
return qa_chain
This function creates the heart of our application – a chain that can:
- Convert text to embeddings
- Store them for fast retrieval
- Remember conversation history
- Generate intelligent responses
Phase 3: Building the User Interface (5 minutes)
Now let's create a beautiful Streamlit interface:
def main():
# Page configuration
st.set_page_config(
page_title="PDF Q&A Chatbot",
page_icon="📚",
layout="wide"
)
# Header
st.title("📚 PDF Q&A Chatbot")
st.markdown("Upload a PDF and ask questions about it!")
# Initialize session state
if "conversation" not in st.session_state:
st.session_state.conversation = None
if "chat_history" not in st.session_state:
st.session_state.chat_history = []
# Sidebar for PDF upload
with st.sidebar:
st.header("Upload PDF")
pdf_file = st.file_uploader(
"Choose a PDF file",
type="pdf",
help="Upload a PDF to start asking questions"
)
if pdf_file is not None:
with st.spinner("Processing PDF... This might take a moment!"):
# Process the PDF
text_chunks = process_pdf(pdf_file)
# Create QA chain
st.session_state.conversation = create_qa_chain(text_chunks)
st.success("PDF processed successfully! Ask away!")
# Main chat interface
if st.session_state.conversation:
# Chat history display
for message in st.session_state.chat_history:
with st.chat_message(message["role"]):
st.write(message["content"])
# User input
user_question = st.chat_input("Ask a question about your PDF")
if user_question:
# Add user message to chat
st.session_state.chat_history.append({
"role": "user",
"content": user_question
})
with st.chat_message("user"):
st.write(user_question)
# Get AI response
with st.chat_message("assistant"):
with st.spinner("Thinking..."):
response = st.session_state.conversation({
"question": user_question
})
answer = response["answer"]
st.write(answer)
# Add assistant message to chat
st.session_state.chat_history.append({
"role": "assistant",
"content": answer
})
else:
# Welcome message
st.info("👈 Upload a PDF in the sidebar to get started!")
# Example questions
st.markdown("### Example Questions You Can Ask:")
st.markdown("""
- What is the main topic of this document?
- Summarize the key points
- What are the conclusions?
- Explain [specific concept] mentioned in the document
""")
if __name__ == "__main__":
main()
Phase 4: Testing Your Creation (5 minutes)
Time to see your app in action! Run this command:
streamlit run app.py
Your browser should open automatically. If not, navigate to http://localhost:8501
.
Test It Out:
- Upload any PDF document
- Wait for processing (larger PDFs take longer)
- Start asking questions!
Sample Questions to Try:
- "What is this document about?"
- "Summarize the main points"
- "What are the key findings?"
- "Explain [any concept from the PDF]"
Phase 5: Making It Production-Ready (5 minutes)
Let's add some professional touches:
Error Handling
Add this to your process_pdf
function:
def process_pdf(pdf_file):
"""Extract text from PDF with error handling"""
try:
pdf_reader = PdfReader(pdf_file)
if len(pdf_reader.pages) == 0:
raise ValueError("The PDF file is empty")
text = ""
for page in pdf_reader.pages:
text += page.extract_text()
if not text.strip():
raise ValueError("No text could be extracted from the PDF")
# Rest of the function...
except Exception as e:
st.error(f"Error processing PDF: {str(e)}")
return None
Performance Optimization
Add caching to speed up repeated operations:
@st.cache_resource
def create_embeddings():
"""Cache embeddings model for better performance"""
return OpenAIEmbeddings()
Enhanced UI Features
Add a clear chat button:
# In the sidebar, after PDF upload
if st.button("Clear Chat History"):
st.session_state.chat_history = []
st.rerun()
Deployment: Share Your App with the World!
Option 1: Deploy to Streamlit Cloud (Recommended)
- Push your code to GitHub:
git init
git add .
git commit -m "Initial commit: PDF Q&A Chatbot"
git remote add origin YOUR_GITHUB_REPO_URL
git push -u origin main
- Create
requirements.txt
:
pip freeze > requirements.txt
- Go to share.streamlit.io
- Connect your GitHub repo
- Deploy! Your app will be live in minutes
Option 2: Deploy to Heroku
Create a Procfile
:
web: streamlit run app.py --server.port $PORT
Then deploy:
heroku create your-app-name
heroku config:set OPENAI_API_KEY=your-key
git push heroku main
Common Errors and Quick Fixes
Error: "No module named 'langchain'"
Fix: Make sure you activated your virtual environment and ran pip install
Error: "Invalid API Key"
Fix: Check your .env
file and ensure your OpenAI API key is correct
Error: "Rate limit exceeded"
Fix: Add rate limiting to your app:
import time
# Add delay between requests
time.sleep(1)
Error: "PDF processing failed"
Fix: Ensure the PDF isn't password-protected and contains extractable text
Extending Your App: What's Next?
Congratulations! You've built a powerful AI application. Here are exciting ways to extend it:
1. Multi-Document Support
# Allow multiple PDFs
pdf_files = st.file_uploader(
"Choose PDF files",
type="pdf",
accept_multiple_files=True
)
2. Add Document Summarization
# Add a summary button
if st.button("Summarize Document"):
summary = qa_chain({"question": "Provide a comprehensive summary"})
st.write(summary["answer"])
3. Export Conversations
# Save chat history
if st.button("Export Chat"):
chat_text = "\n".join([f"{m['role']}: {m['content']}"
for m in st.session_state.chat_history])
st.download_button("Download", chat_text, "chat_history.txt")
4. Support More File Types
- Add support for Word documents, text files, and more
- Use different parsers for different file types
Video Tutorial Placeholder
[Demo Video Coming Soon - See Your PDF Q&A Chatbot in Action!]
Advanced Resources
Ready to dive deeper? Check out these resources:
- LangChain Documentation - The official docs
- Building Advanced RAG Systems - Take your app to the next level
- LangChain + Vector Databases - Scale to millions of documents
- Production LangChain Apps - Best practices for production
Final Thoughts
You did it! In just 30 minutes, you've built a sophisticated AI application that would have been impossible just a few years ago. This PDF Q&A chatbot is just the beginning – with LangChain, you can build AI apps that:
- Analyze code repositories
- Create custom AI assistants
- Process and understand images
- Generate content automatically
- And so much more!
The key to mastering LangChain is to keep building. Try modifying this app, add new features, and most importantly – have fun with it!
Quick Reference Checklist
- Set up Python environment
- Install required packages
- Add OpenAI API key
- Create PDF processing function
- Build Q&A chain with LangChain
- Design Streamlit interface
- Test with sample PDFs
- Deploy to cloud
- Share with friends!
Remember: Every expert was once a beginner. You've just taken your first step into the exciting world of AI application development. Keep building, keep learning, and keep pushing the boundaries of what's possible!
Happy coding! 🚀