Retrieval-Augmented Generation (RAG) combines retrieval systems with generative models to provide more accurate, context-rich answers. Deep Seek R1 is a powerful tool that helps us build such systems efficiently by integrating retrieval capabilities with advanced language models. In this blog, we’ll walk through the process of creating a RAG application from scratch using Deep Seek R1.
RAG applications are built around three primary components:
To get started, ensure you have Python installed. Then, set up the required libraries, including Deep Seek R1. Install the dependencies using the following commands:
pip install deep-seek-r1 langchain transformers sentence-transformers faiss-cpu
Create a new project directory and set up a virtual environment for isolation.
mkdir rag-deepseek-app cd rag-deepseek-app python -m venv venv source venv/bin/activate # or venv\Scripts\activate for Windows
The knowledge base is the heart of a RAG system. For this example, we’ll use text documents, but you can extend it to PDFs, databases, or other formats.
Organize your documents in a folder named data.
rag-deepseek-app/ └── data/ ├── doc1.txt ├── doc2.txt └── doc3.txt
Use Deep Seek R1 to embed the documents for efficient retrieval.
from deep_seek_r1 import DeepSeekRetriever from sentence_transformers import SentenceTransformer import os # Load the embedding model embedding_model = SentenceTransformer('all-MiniLM-L6-v2') # Prepare data data_dir = './data' documents = [] for file_name in os.listdir(data_dir): with open(os.path.join(data_dir, file_name), 'r') as file: documents.append(file.read()) # Embed the documents embeddings = embedding_model.encode(documents, convert_to_tensor=True) # Initialize the retriever retriever = DeepSeekRetriever() retriever.add_documents(documents, embeddings) retriever.save('knowledge_base.ds') # Save the retriever state
Now, we’ll set up the pipeline to retrieve relevant documents and generate responses.
retriever = DeepSeekRetriever.load('knowledge_base.ds')
We’ll use OpenAI’s GPT-based models or Hugging Face Transformers for generation.
from transformers import AutoModelForCausalLM, AutoTokenizer # Load the generator model generator_model = AutoModelForCausalLM.from_pretrained("gpt2") tokenizer = AutoTokenizer.from_pretrained("gpt2") def generate_response(query, retrieved_docs): # Combine the query and retrieved documents input_text = query + "\n\n" + "\n".join(retrieved_docs) # Tokenize and generate a response inputs = tokenizer.encode(input_text, return_tensors='pt', max_length=512, truncation=True) outputs = generator_model.generate(inputs, max_length=150, num_return_sequences=1) return tokenizer.decode(outputs[0], skip_special_tokens=True)
Here’s how we put everything together to handle user queries.
def rag_query(query): # Retrieve relevant documents retrieved_docs = retriever.search(query, top_k=3) # Generate a response response = generate_response(query, retrieved_docs) return response
query = "What is the impact of climate change on agriculture?" response = rag_query(query) print(response)
To make the RAG system accessible, you can deploy it using Flask or FastAPI.
Install Flask:
pip install deep-seek-r1 langchain transformers sentence-transformers faiss-cpu
Create a app.py file:
mkdir rag-deepseek-app cd rag-deepseek-app python -m venv venv source venv/bin/activate # or venv\Scripts\activate for Windows
Run the server:
rag-deepseek-app/ └── data/ ├── doc1.txt ├── doc2.txt └── doc3.txt
Use Postman or curl to send a query:
from deep_seek_r1 import DeepSeekRetriever from sentence_transformers import SentenceTransformer import os # Load the embedding model embedding_model = SentenceTransformer('all-MiniLM-L6-v2') # Prepare data data_dir = './data' documents = [] for file_name in os.listdir(data_dir): with open(os.path.join(data_dir, file_name), 'r') as file: documents.append(file.read()) # Embed the documents embeddings = embedding_model.encode(documents, convert_to_tensor=True) # Initialize the retriever retriever = DeepSeekRetriever() retriever.add_documents(documents, embeddings) retriever.save('knowledge_base.ds') # Save the retriever state
The above is the detailed content of Building a RAG (Retrieval-Augmented Generation) Application Using Deep Seek Rrom Scratch. For more information, please follow other related articles on the PHP Chinese website!