Close Menu
    Facebook LinkedIn YouTube WhatsApp X (Twitter) Pinterest
    Trending
    • Ensembles of Ensembles of Ensembles: A Guide to Stacking
    • This region in space poses the greatest danger in our Solar System
    • Practical info and special tips for the EU-Startups Summit 2026 in Malta – look inside!
    • Your Phone Notifications Reveal More Than You Realize. Here’s How to Lock Them Down
    • Why a recent supply-chain attack singled out security firms Checkmarx and Bitwarden
    • iPad Pro M5 Review: Closer Than Ever to the Future Mac
    • How AI Policy in South Africa Is Ruining Itself
    • Dual iris laser projector offers theater blacks
    Facebook LinkedIn WhatsApp
    Times FeaturedTimes Featured
    Wednesday, April 29
    • Home
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    • More
      • AI
      • Robotics
      • Industries
      • Global
    Times FeaturedTimes Featured
    Home»Artificial Intelligence»Hitchhiker’s Guide to RAG: From Tiny Files to Tolstoy with OpenAI’s API and LangChain
    Artificial Intelligence

    Hitchhiker’s Guide to RAG: From Tiny Files to Tolstoy with OpenAI’s API and LangChain

    Editor Times FeaturedBy Editor Times FeaturedJuly 12, 2025No Comments10 Mins Read
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr WhatsApp Email
    Share
    Facebook Twitter LinkedIn Pinterest Telegram Email WhatsApp Copy Link


    , I walked you through setting up a very simple RAG pipeline in Python, utilizing OpenAI’s API, LangChain, and your native information. In that publish, I cowl the very fundamentals of making embeddings out of your native information with LangChain, storing them in a vector database with FAISS, making API calls to OpenAI’s API, and finally producing responses related to your information. 🌟

    Picture by writer

    Nonetheless, on this easy instance, I solely display how one can use a tiny .txt file. On this publish, I additional elaborate on how one can make the most of bigger information together with your RAG pipeline by including an additional step to the method — chunking.

    What about chunking?

    Chunking refers back to the means of parsing a textual content into smaller items of textual content—chunks—which can be then reworked into embeddings. This is essential as a result of it permits us to successfully course of and create embeddings for bigger information. All embedding fashions include varied limitations on the scale of the textual content that’s handed — I’ll get into extra particulars about these limitations in a second. These limitations enable for higher efficiency and low-latency responses. Within the case that the textual content we offer doesn’t meet these dimension limitations, it’ll get truncated or rejected.

    If we wished to create a RAG pipeline studying, say from Leo Tolstoy’s War and Peace textual content (a reasonably massive ebook), we wouldn’t be capable of straight load it and rework it right into a single embedding. As an alternative, we have to first do the chunking — create smaller chunks of textual content, and create embeddings for every one. Every chunk being under the scale limits of no matter embedding mannequin we use permits us to successfully rework any file into embeddings. So, a considerably extra practical panorama of a RAG pipeline would look as follows:

    Picture by writer

    There are a number of parameters to additional customise the chunking course of and match it to our particular wants. A key parameter of the chunking course of is the chunk dimension, which permits us to specify what the scale of every chunk can be (in characters or in tokens). The trick right here is that the chunks we create need to be sufficiently small to be processed inside the dimension limitations of the embedding, however on the similar time, they need to even be massive sufficient to include significant data.

    For example, let’s assume we wish to course of the next sentence from Struggle and Peace, the place Prince Andrew contemplates the battle:

    Picture by writer

    Let’s additionally assume we created the next (reasonably small) chunks :

    picture by writer

    Then, if we have been to ask one thing like “What does Prince Andrew imply by ‘all the identical now’?”, we could not get an excellent reply as a result of the chunk “However isn’t all of it the identical now?” thought he. doesn’t include any context and is obscure. In distinction, the which means is scattered throughout a number of chunks. Thus, regardless that it’s just like the query we ask and could also be retrieved, it doesn’t include any which means to provide a related response. Subsequently, choosing the suitable chunk dimension for the chunking course of according to the kind of paperwork we use for the RAG, can largely affect the standard of the responses we’ll be getting. Generally, the content material of a bit ought to make sense for a human studying it with out some other data, to be able to additionally be capable of make sense for the mannequin. Finally, a trade-off for the chunk dimension exists — chunks should be sufficiently small to fulfill the embedding mannequin’s dimension limitations, however massive sufficient to protect which means.

    • • •

    One other important parameter is the chunk overlap. That’s how a lot overlap we wish the chunks to have with each other. For example, within the Struggle and Peace instance, we’d get one thing like the next chunks if we selected a bit overlap of 5 characters.

    Picture by writer

    That is additionally a vital determination we’ve to make as a result of:

    • Bigger overlap means extra calls and tokens spent on embedding creation, which suggests dearer + slower
    • Smaller overlap means a better likelihood of dropping related data between the chunk boundaries

    Selecting the proper chunk overlap largely is dependent upon the kind of textual content we wish to course of. For instance, a recipe ebook the place the language is easy and easy likely received’t require an unique chunking methodology. On the flip aspect, a basic literature ebook like Struggle and Peace, the place language could be very advanced and which means is interconnected all through totally different paragraphs and sections, will likely require a extra considerate strategy to chunking to ensure that the RAG to provide significant outcomes.

    • • •

    However what if all we’d like is a less complicated RAG that appears as much as a few paperwork that match the scale limitations of no matter embeddings mannequin we use in only one chunk? Will we nonetheless want the chunking step, or can we simply straight make one single embedding for the complete textual content? The brief reply is that it’s all the time higher to carry out the chunking step, even for a data base that does match the scale limits. That’s as a result of, because it seems, when coping with massive paperwork, we face the issue of getting lost in the middle — lacking related data that’s included in massive paperwork and respective massive embeddings.

    What are these mysterious ‘dimension limitations’?

    Generally, a request to an embedding mannequin can embrace a number of chunks of textual content. There are a number of totally different sorts of limitations we’ve to think about comparatively to the scale of the textual content we have to create embeddings for and its processing. Every of these several types of limits takes totally different values relying on the embedding mannequin we use. Extra particularly, these are:

    • Chunk Measurement, or additionally most tokens per enter, or context window. That is the utmost dimension in tokens for every chunk. For example, for OpenAI’s text-embedding-3-small embedding mannequin, the chunk size limit is 8,191 tokens. If we offer a bit that’s bigger than the chunk dimension restrict, normally, will probably be silently truncated‼️ (an embedding goes to be created, however just for the primary half that meets the chunk dimension restrict), with out producing any error.
    • Variety of Chunks per Request, or additionally variety of inputs. There’s additionally a restrict on the variety of chunks that may be included in every request. For example, all OpenAI’s embedding fashions have a restrict of two,048 inputs — that’s, a maximum of 2,048 chunks per request.
    • Whole Tokens per Request: There’s additionally a limitation on the overall variety of tokens of all chunks in a request. For all OpenAI’s fashions, the total maximum number of tokens across all chunks in a single request is 300,000 tokens.

    So, what occurs if our paperwork are greater than 300,000 tokens? As you might have imagined, the reply is that we make a number of consecutive/parallel requests of 300,000 tokens or fewer. Many Python libraries do that routinely behind the scenes. For instance, LangChain’s OpenAIEmbeddings that I exploit in my earlier publish, routinely batches the paperwork we offer into batches underneath 300,000 tokens, provided that the paperwork are already supplied in chunks.

    Studying bigger information into the RAG pipeline

    Let’s check out how all these play out in a easy Python instance, utilizing the War and Peace textual content as a doc to retrieve within the RAG. The information I’m utilizing — Leo Tolstoy’s Struggle and Peace textual content — is licensed as Public Area and could be present in Project Gutenberg.

    So, initially, let’s attempt to learn from the Struggle and Peace textual content with none setup for chunking. For this tutorial, you’ll have to have put in the langchain, openai, and faiss Python libraries. We are able to simply set up the required packages as follows:

    pip set up openai langchain langchain-community langchain-openai faiss-cpu

    After ensuring the required libraries are put in, our code for a quite simple RAG seems like this and works tremendous for a small and easy .txt file within the text_folder.

    from openai import OpenAI # Chat_GPT API key 
    api_key = "your key" 
    
    # initialize LLM
    llm = ChatOpenAI(openai_api_key=api_key, mannequin="gpt-4o-mini", temperature=0.3)
    
    # loading paperwork for use for RAG 
    text_folder =  "RAG information"  
    
    paperwork = []
    for filename in os.listdir(text_folder):
        if filename.decrease().endswith(".txt"):
            file_path = os.path.be part of(text_folder, filename)
            loader = TextLoader(file_path)
            paperwork.lengthen(loader.load())
    
    # generate embeddings
    embeddings = OpenAIEmbeddings(openai_api_key=api_key)
    
    # create vector database w FAISS 
    vector_store = FAISS.from_documents(paperwork, embeddings)
    retriever = vector_store.as_retriever()
    
    
    def predominant():
        print("Welcome to the RAG Assistant. Sort 'exit' to stop.n")
        
        whereas True:
            user_input = enter("You: ").strip()
            if user_input.decrease() == "exit":
                print("Exiting…")
                break
    
            # get related paperwork
            relevant_docs = retriever.invoke(user_input)
            retrieved_context = "nn".be part of([doc.page_content for doc in relevant_docs])
    
            # system immediate
            system_prompt = (
                "You're a useful assistant. "
                "Use ONLY the next data base context to reply the consumer. "
                "If the reply just isn't within the context, say you do not know.nn"
                f"Context:n{retrieved_context}"
            )
    
            # messages for LLM 
            messages = [
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_input}
            ]
    
            # generate response
            response = llm.invoke(messages)
            assistant_message = response.content material.strip()
            print(f"nAssistant: {assistant_message}n")
    
    if __name__ == "__main__":
        predominant()

    However, if I add the Struggle and Peace .txt file in the identical folder, and attempt to straight create an embedding for it, I get the next error:

    Picture by writer

    ughh 🙃

    So what occurs right here? LangChain’s OpenAIEmbeddingscan’t cut up the textual content into separate, lower than 300,000 token iterations, as a result of we didn’t present it in chunks. It doesn’t cut up the chunk, which is 777,181 tokens, resulting in a request that exceeds the 300,000 tokens most per request.

    • • •

    Now, let’s attempt to arrange the chunking course of to create a number of embeddings from this massive file. To do that, I can be utilizing the text_splitter library supplied by LangChain, and extra particularly, the RecursiveCharacterTextSplitter. In RecursiveCharacterTextSplitter, the chunk dimension and chunk overlap parameters are specified as numerous characters, however different splitters like TokenTextSplitter or OpenAITokenSplitter additionally enable to arrange these parameters as numerous tokens.

    So, we are able to arrange an occasion of the textual content splitter as under:

    splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)

    … after which use it to separate our preliminary doc into chunks…

    split_docs = []
    for doc in paperwork:
        chunks = splitter.split_text(doc.page_content)
        for chunk in chunks:
            split_docs.append(Doc(page_content=chunk))

    …after which use these chunks to create the embeddings…

    paperwork= split_docs
    
    # create embeddings + FAISS index
    embeddings = OpenAIEmbeddings(openai_api_key=api_key)
    vector_store = FAISS.from_documents(paperwork, embeddings)
    retriever = vector_store.as_retriever()
    
    .....

    … and voila 🌟

    Now our code can successfully parse the supplied doc, even when it’s a bit bigger, and supply related responses.

    Picture by writer

    On my thoughts

    Selecting a chunking strategy that matches the scale and complexity of the paperwork we wish to feed into our RAG pipeline is essential for the standard of the responses that we’ll be receiving. For positive, there are a number of different parameters and totally different chunking methodologies one must consider. Nonetheless, understanding and fine-tuning chunk dimension and overlap is the inspiration for constructing RAG pipelines that produce significant outcomes.

    • • •

    Beloved this publish? Bought an attention-grabbing information or AI undertaking? 

    Let’s be pals! Be a part of me on

    📰Substack 📝Medium 💼LinkedIn ☕Buy me a coffee!

    • • •



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Editor Times Featured
    • Website

    Related Posts

    Ensembles of Ensembles of Ensembles: A Guide to Stacking

    April 29, 2026

    How AI Policy in South Africa Is Ruining Itself

    April 29, 2026

    PyTorch NaNs Are Silent Killers — So I Built a 3ms Hook to Catch Them at the Exact Layer

    April 28, 2026

    Correlation Doesn’t Mean Causation! But What Does It Mean?

    April 28, 2026

    Let the AI Do the Experimenting

    April 28, 2026

    The Next Frontier of AI in Production Is Chaos Engineering

    April 28, 2026

    Comments are closed.

    Editors Picks

    Ensembles of Ensembles of Ensembles: A Guide to Stacking

    April 29, 2026

    This region in space poses the greatest danger in our Solar System

    April 29, 2026

    Practical info and special tips for the EU-Startups Summit 2026 in Malta – look inside!

    April 29, 2026

    Your Phone Notifications Reveal More Than You Realize. Here’s How to Lock Them Down

    April 29, 2026
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    About Us
    About Us

    Welcome to Times Featured, an AI-driven entrepreneurship growth engine that is transforming the future of work, bridging the digital divide and encouraging younger community inclusion in the 4th Industrial Revolution, and nurturing new market leaders.

    Empowering the growth of profiles, leaders, entrepreneurs businesses, and startups on international landscape.

    Asia-Middle East-Europe-North America-Australia-Africa

    Facebook LinkedIn WhatsApp
    Featured Picks

    Premier League Soccer: Stream Chelsea vs. Man United From Anywhere Live

    April 18, 2026

    Best VPN for Mac for 2025: Stay Private While Streaming, Torrenting, Browsing the Web and More

    July 6, 2025

    These 9 Hidden Apple Watch Health Features Could Change How You Use Yours

    August 20, 2025
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    Copyright © 2024 Timesfeatured.com IP Limited. All Rights.
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us

    Type above and press Enter to search. Press Esc to cancel.