Bird
Raised Fist0
LangChainframework~10 mins

Custom document loaders in LangChain - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the base class for creating a custom document loader.

LangChain
from langchain.document_loaders import [1]
Drag options to blanks, or click blank then click option'
ABaseDocumentLoader
BCustomLoaderBase
CDocumentLoaderBase
DLoaderBase
Attempts:
3 left
💡 Hint
Common Mistakes
Using a class name that does not exist in the module.
Confusing the order of words in the class name.
2fill in blank
medium

Complete the method name to override for loading documents in a custom loader class.

LangChain
class MyLoader(BaseDocumentLoader):
    def [1](self):
        # Your code to load documents
        pass
Drag options to blanks, or click blank then click option'
Aload_documents
Bfetch_documents
Cload
Dget_docs
Attempts:
3 left
💡 Hint
Common Mistakes
Using a method name that does not match the base class signature.
Using a generic name like 'load' instead of 'load_documents'.
3fill in blank
hard

Fix the error in the custom loader by completing the return statement to return a list of Document objects.

LangChain
from langchain.schema import Document

class MyLoader(BaseDocumentLoader):
    def load_documents(self):
        text = 'Sample text content'
        return [[1](page_content=text)]
Drag options to blanks, or click blank then click option'
ADoc
BDocumentLoader
CDocument
DDocObject
Attempts:
3 left
💡 Hint
Common Mistakes
Returning a list of strings instead of Document objects.
Using a wrong class name for the document wrapper.
4fill in blank
hard

Fill both blanks to create a custom loader that reads text from a file path and returns a Document.

LangChain
class FileLoader(BaseDocumentLoader):
    def __init__(self, file_path):
        self.file_path = file_path

    def load_documents(self):
        with open(self.file_path, [1]) as f:
            text = f.read()
        return [Document(page_content=[2])]
Drag options to blanks, or click blank then click option'
Ar
Btext
Cw
Dfile_path
Attempts:
3 left
💡 Hint
Common Mistakes
Using write mode 'w' instead of read mode 'r'.
Returning the file path string instead of the file content.
5fill in blank
hard

Fill all three blanks to create a custom loader that filters lines containing a keyword and returns Documents for each matching line.

LangChain
class KeywordLoader(BaseDocumentLoader):
    def __init__(self, file_path, keyword):
        self.file_path = file_path
        self.keyword = keyword

    def load_documents(self):
        docs = []
        with open(self.file_path, [1]) as f:
            for line in f:
                if [2] in line:
                    docs.append(Document(page_content=[3]))
        return docs
Drag options to blanks, or click blank then click option'
Ar
Bself.keyword
Cline
Dw
Attempts:
3 left
💡 Hint
Common Mistakes
Opening the file in write mode instead of read mode.
Checking the wrong variable for the keyword.
Appending the keyword instead of the line content.

Practice

(1/5)
1. What is the main purpose of creating a custom document loader in Langchain?
easy
A. To load and preprocess documents from any data source before use
B. To create user interfaces for document display
C. To train machine learning models directly
D. To manage database connections automatically

Solution

  1. Step 1: Understand the role of document loaders

    Document loaders bring data into Langchain, preparing it for processing.
  2. Step 2: Identify the purpose of custom loaders

    Custom loaders allow loading from any source and preprocessing like cleaning or adding metadata.
  3. Final Answer:

    To load and preprocess documents from any data source before use -> Option A
  4. Quick Check:

    Custom loaders = load + preprocess documents [OK]
Hint: Custom loaders bring in and prep data from any source [OK]
Common Mistakes:
  • Confusing loaders with UI components
  • Thinking loaders train models
  • Assuming loaders manage databases
2. Which of the following is the correct way to start defining a custom document loader class in Langchain?
easy
A. class MyLoader():\n def load(self):\n pass
B. def MyLoader():\n return BaseLoader.load()
C. class MyLoader(BaseLoader):\n def load(self):\n pass
D. class MyLoader(BaseLoader):\n def read(self):\n pass

Solution

  1. Step 1: Check inheritance from BaseLoader

    Custom loaders must inherit from BaseLoader to fit Langchain's pattern.
  2. Step 2: Confirm the method name is load

    The required method to implement is load(), not read().
  3. Final Answer:

    class MyLoader(BaseLoader):\n def load(self):\n pass -> Option C
  4. Quick Check:

    Inherit BaseLoader + define load() method [OK]
Hint: Inherit BaseLoader and implement load() method [OK]
Common Mistakes:
  • Not inheriting from BaseLoader
  • Using wrong method name like read()
  • Defining function instead of class
3. Given this custom loader code snippet, what will print(docs) output?
from langchain.schema import Document
from langchain.document_loaders.base import BaseLoader

class SimpleLoader(BaseLoader):
    def load(self):
        return [Document(page_content='Hello World', metadata={'source': 'test'})]

loader = SimpleLoader()
docs = loader.load()
medium
A. [Document(page_content='Hello World', metadata={'source': 'test'})]
B. ['Hello World']
C. None
D. SyntaxError

Solution

  1. Step 1: Analyze the load method return value

    The load method returns a list with one Document object containing content and metadata.
  2. Step 2: Understand what docs holds

    docs is assigned the list returned, so printing docs shows the list with the Document instance.
  3. Final Answer:

    [Document(page_content='Hello World', metadata={'source': 'test'})] -> Option A
  4. Quick Check:

    load() returns list of Document objects [OK]
Hint: load() returns list of Document objects, not strings [OK]
Common Mistakes:
  • Expecting a list of strings instead of Document objects
  • Thinking load() returns None
  • Assuming syntax error due to imports
4. Identify the error in this custom loader code:
from langchain.document_loaders.base import BaseLoader

class FaultyLoader(BaseLoader):
    def load(self):
        docs = []
        docs.append('Just a string')
        return docs

loader = FaultyLoader()
loader.load()
medium
A. The load method must be named read
B. BaseLoader cannot be inherited directly
C. The class must not have a load method
D. The load method should return Document objects, not strings

Solution

  1. Step 1: Check what load returns

    The load method returns a list with a string instead of Document objects.
  2. Step 2: Recall Langchain expects Document objects

    Custom loaders must return Document instances, not plain strings, for proper processing.
  3. Final Answer:

    The load method should return Document objects, not strings -> Option D
  4. Quick Check:

    load() must return Document objects [OK]
Hint: load() must return Document objects, not plain strings [OK]
Common Mistakes:
  • Returning strings instead of Document objects
  • Misnaming the load method
  • Thinking BaseLoader can't be inherited
5. You want to create a custom loader that reads text files from a folder, adds the filename as metadata, and returns Document objects. Which approach correctly implements this?
hard
A. Use BaseLoader directly without subclassing, call load() with folder path argument
B. Inherit BaseLoader, implement load() to read files, create Document with content and metadata filename, return list
C. Create a function that returns file contents as strings without Document wrapping
D. Subclass BaseLoader but return raw file paths as strings in load()

Solution

  1. Step 1: Confirm inheritance and method implementation

    Custom loaders must subclass BaseLoader and implement load() method.
  2. Step 2: Ensure load reads files and returns Document objects with metadata

    Reading files and wrapping content in Document with filename metadata is correct.
  3. Final Answer:

    Inherit BaseLoader, implement load() to read files, create Document with content and metadata filename, return list -> Option B
  4. Quick Check:

    Subclass + load() returns Document list with metadata [OK]
Hint: Subclass BaseLoader, load files, wrap in Document with metadata [OK]
Common Mistakes:
  • Not subclassing BaseLoader
  • Returning strings instead of Document objects
  • Ignoring metadata addition
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard