코드 파일 로딩과 분할

LangChain을 활용한 RAG(검색 증강 생성)

Meri Nova

Machine Learning Engineer

더 많은 문서 로더...

여러 파일 형식 모음.

LangChain을 활용한 RAG(검색 증강 생성)

LangChain GitHub 저장소의 README를 생성한 원시 마크다운.

LangChain을 활용한 RAG(검색 증강 생성)

LangChain GitHub의 README.md 렌더링 결과.

LangChain을 활용한 RAG(검색 증강 생성)

마크다운 파일(.md) 로딩

from langchain_community.document_loaders import UnstructuredMarkdownLoader

loader = UnstructuredMarkdownLoader("README.md")
markdown_content = loader.load() print(markdown_content[0])
Document(page_content='# Discord Text Classification ![Python Version](https...'
         metadata={'source': 'README.md'})
LangChain을 활용한 RAG(검색 증강 생성)

파이썬 파일(.py) 로딩

from abc import ABC, abstractmethod

class LLM(ABC):
  @abstractmethod
  def complete_sentence(self, prompt):
    pass

...
  • 코드 작성/수정, 문서 생성 등 RAG 앱에 통합됨
  • import, 클래스, 함수 등
from langchain_community.document_loaders \
    import PythonLoader

loader = PythonLoader('chatbot.py')

python_data = loader.load() print(python_data[0])
Document(page_content='from abc import ABC, ...

class LLM(ABC):
  @abstractmethod
...',
metadata={'source': 'chatbot.py'})
LangChain을 활용한 RAG(검색 증강 생성)

코드 파일 분할

python_splitter = RecursiveCharacterTextSplitter(
    chunk_size=150, chunk_overlap=10
)

chunks = python_splitter.split_documents(python_data) for i, chunk in enumerate(chunks[:3]): print(f"Chunk {i+1}:\n{chunk.page_content}\n")
LangChain을 활용한 RAG(검색 증강 생성)
Chunk 1:
from abc import ABC, abstractmethod

class LLM(ABC):
  @abstractmethod
  def complete_sentence(self, prompt):
    pass

Chunk 2:
class OpenAI(LLM):
  def complete_sentence(self, prompt):
    return prompt + " ... OpenAI end of sentence."

class Anthropic(LLM):

Chunk 3:
def complete_sentence(self, prompt):
    return prompt + " ... Anthropic end of sentence."

LangChain을 활용한 RAG(검색 증강 생성)

언어별 분할

  • separators
    • ["\n\n", "\n", " ", ""]
    • ["\nclass ", "\ndef ", "\n\tdef ", "\n\n", " ", ""]
from langchain_text_splitters import RecursiveCharacterTextSplitter, Language

python_splitter = RecursiveCharacterTextSplitter.from_language(

language=Language.PYTHON, chunk_size=150, chunk_overlap=10
)
chunks = python_splitter.split_documents(data)
for i, chunk in enumerate(chunks[:3]): print(f"Chunk {i+1}:\n{chunk.page_content}\n")
LangChain을 활용한 RAG(검색 증강 생성)
Chunk 1:
from abc import ABC, abstractmethod

Chunk 2:
class LLM(ABC):
  @abstractmethod
  def complete_sentence(self, prompt):
    pass

Chunk 3:
class OpenAI(LLM):
  def complete_sentence(self, prompt):
LangChain을 활용한 RAG(검색 증강 생성)

Vamos praticar!

LangChain을 활용한 RAG(검색 증강 생성)

Preparing Video For Download...