[PYTHON/LANGCHAIN] BaseLoader 클래스 : 커스텀 문서 로더 만들기
■ BaseLoader 클래스를 사용해 커스텀 문서 로더를 만드는 방법을 보여준다. ▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
from typing import AsyncIterator from typing import Iterator from langchain_core.document_loaders import BaseLoader from langchain_core.documents import Document class CustomDocumentLoader(BaseLoader): """파일을 한 줄씩 읽는 예제 문서 로더이다.""" def __init__(self, filePath : str) -> None: """파일 경로로 로더를 초기화한다. 인자: filePath : 로드할 파일의 경로이다. """ self.filePath = filePath def lazy_load(self) -> Iterator[Document]: # <-- 인자를 사용하지 않는다. """파일을 한 줄씩 읽는 지연 로더이다. 지연 로드 메소드를 구현할 때 생성기를 사용하여 문서를 하나씩 생성해야 한다. """ with open(self.filePath, encoding = "utf-8") as textIOWrapper: lineNumber = 0 for line in textIOWrapper: yield Document(page_content = line, metadata = {"line_number" : lineNumber, "source" : self.filePath}) lineNumber += 1 # alazy_load는 선택사항이다. # 구현을 생략하면 lazy_load에 위임하는 기본 구현이 사용된다! async def alazy_load(self,) -> AsyncIterator[Document]: # <-- 인자를 사용하지 않는다. """파일을 한 줄씩 읽는 비동기 지연 로더이다.""" # aiofile이 필요하다. # `pip install aiofiles`로 설치한다. # https://github.com/Tinche/aiofiles import aiofiles async with aiofiles.open(self.filePath, encoding = "utf-8") as asyncTextIOWrapper: lineNumber = 0 async for line in asyncTextIOWrapper: yield Document(page_content = line, metadata = {"line_number" : lineNumber, "source" : self.filePath}) lineNumber += 1 with open("./meow.txt", "w", encoding="utf-8") as textIOWrapper: fileContent = "meow meow\nmeow meow\nmeow" textIOWrapper.write(fileContent) customDocumentLoader = CustomDocumentLoader("./meow.txt") documentList = customDocumentLoader.lazy_load() for document in documentList: print(document.page_content) """ meow meow meow meow meow """ |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
aiofiles==24.1.0 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 async-timeout==4.0.3 attrs==23.2.0 certifi==2024.6.2 charset-normalizer==3.3.2 dataclasses-json==0.6.7 frozenlist==1.4.1 greenlet==3.0.3 idna==3.7 jsonpatch==1.33 jsonpointer==3.0.0 langchain==0.2.6 langchain-community==0.2.6 langchain-core==0.2.10 langchain-text-splitters==0.2.2 langsmith==0.1.82 marshmallow==3.21.3 multidict==6.0.5 mypy-extensions==1.0.0 numpy==1.26.4 orjson==3.10.5 packaging==24.1 pydantic==2.7.4 pydantic_core==2.18.4 PyYAML==6.0.1 requests==2.32.3 SQLAlchemy==2.0.31 tenacity==8.4.2 typing-inspect==0.9.0 typing_extensions==4.12.2 urllib3==2.2.2 yarl==1.9.4 |
※ pip install langchain-community aiofiles 명령을