PDF 전처리 해보기

2026. 2. 21. 22:52·AI/LangGraph
반응형

👋 들어가기 전

 

인프런 제이쓴님의 강의 코드를 분석하며, 개념을 정리해보자.


🏁 학습할 내용

  • 필요한 의존성
  • 새로운 개념
  • 꿀팁

📦의존성

 

1. pypdf

  • 랭체인에서 기본적으로 제공하는 PDF 로더가 포함된 패키지
  • pdf안에 이미지 데이터를 읽지 못하는 단점 존재

 

2. zerox

  • llm을 활용하여 ocr을 돌려 문서를 인식하는 패키지
  • 다양한 llm 지원
  • markdown 형태로 output
💡 ocr이란??

Optical Character Recognitio
의 약자
이미지(사진, 스캔 문서) 속에 들어있는 글자를 컴퓨터가 읽을 수 있는 텍스트 데이터로 추출하는 기술

 

3. UnstructedMarkdownLoader

  • 랭체인에서 제공하는 MarkdownLoader
  • PDF와 다르게 별도로 split을 해줘야함
  • 정확한 컨텍스트가 전달되지 않을 수 있음
  • 이 때, txt로 변환하는게 안전함
    • markdown, html2text, beautifulsoup4 이ㅛ 
    • markdown -> html -> BeautifulSoup을 이용한 텍스트 추출

 

4. RecursiveCharacterTextSpliter

  • 문서 split에 사용됨

 

5.TextLoader

  • txt 파일 읽기 위한 Loader

⭐ 새로운 개념

 

1️⃣ Retrieve

  • LLM이 학습하지 않은 외부 데이터를 찾아오는 과정
  • RAG의 핵심 패턴

 

2️⃣ RAG(Retrieval-Augmented Generation, 검색 증강 생성)

  • LLM이 아는체하며, 환각을 발생시키지 않도록, 신뢰할 수 있는 외부 문서를 찾아보고 답변하는 기술
  • 과정
    • Retrieval: 찾아오는 과정
    • Augmentation: 찾아온 정보를 사용자의 질문을 하나로 합침
    • Generatation: 결합된 정보를 바탕으로 LLM이 최종 답변 생성

 

3️⃣Vector Store(Vector Database)

  • 유사도 검색에 많이 쓰임
    • 사과 -> "빨간 과일", "맛있는 과일", "애플"등 맥락이 비슷한 결과를 함께 찾아줌
  • 문서, 이미지, 음성, 영상 같은데이터를 숫자 배열인  저장하는 특수 저장소
  • 변환 그러면 누가하냐?? 바로 AI모델이 담당함, 이걸 임베딩이라 함 (변환 == 임베딩)
  • LangGraph에서는 Chroma를 대표적으로 씀

 


🍯 꿀팁

 

1️⃣ sequence 이용



그래프 형태는 같은데 더 간단히 만들 수 있음

 

  • graph_builder 만들 때 add_sequence이용
  • 아래 두 코드가 같은 그래프 형태임
graph_builder.add_node('retrieve', retrieve)
graph_builder.add_node('generate', generate)

from langgraph.graph import START, END

graph_builder.add_edge(START, 'retrieve')
graph_builder.add_edge('retrieve', 'generate')
graph_builder.add_edge('generate', END)
graph = graph_builder.compile()


# ======================== 시퀀스 이용 ========================

sequence_graph_builder = StateGraph(AgentState).add_sequence([retrieve, generate])
sequence_graph_builder.add_edge(START, 'retrieve')
sequence_graph_builder.add_edge('generate', END)
sequence_graph = sequence_graph_builder.compile()

 

2️⃣ chain

 

🧱 구성 요소

구성 요소 역할 입력 (Input) 출력 (Output)
Prompt 질문 템플릿 생성 딕셔너리 ({var: val}) PromptValue (완성된 문장)
LLM 언어 모델 (뇌) 문장 또는 메시지 목록 BaseMessage (AI의 답변)
Output Parser 답변 정제 (포맷팅) 메시지 또는 문자열 구조화된 데이터 (JSON, List 등)
Retriever 관련 문서 검색 검색어 (String) 문서 목록 (List of Documents)

 

 

✏️ 문법

리닉스 파이프라인과 똑같다.

from langchain import hub
from langchain_openai import ChatOpenAI

prompt = hub.pull("rlm/rag-prompt") # https://smith.langchain.com/hub 에서 찾을 수 있다.
llm = ChatOpenAI(model='gpt-4o')


rag_chain = prompt | llm # prompt 아웃풋 -> llm 인풋

출처

https://github.com/jasonkang14/inflearn-langgraph-agent/blob/main/2.2%20%EA%B0%84%EB%8B%A8%ED%95%9C%20Retrieval%20%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%20(feat.%20PDF%20%EC%A0%84%EC%B2%98%EB%A6%AC%20%EA%BF%80%ED%8C%81).ipynb

 

inflearn-langgraph-agent/2.2 간단한 Retrieval 에이전트 (feat. PDF 전처리 꿀팁).ipynb at main · jasonkang14/inflearn

인프런의 "LangGraph를 활용한 AI Agent 개발" 강의 소스코드입니다. Contribute to jasonkang14/inflearn-langgraph-agent development by creating an account on GitHub.

github.com

 

반응형

'AI > LangGraph' 카테고리의 다른 글

SubGraph와 Router  (0) 2026.02.22
Corrective RAG  (0) 2026.02.22
Self RAG  (0) 2026.02.22
Conditional Edge  (0) 2026.02.22
랭그래프 시작  (0) 2026.02.21
'AI/LangGraph' 카테고리의 다른 글
  • Corrective RAG
  • Self RAG
  • Conditional Edge
  • 랭그래프 시작
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (339)
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (134)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (34)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (21)
        • 어노테이션 (6)
        • 튜토리얼 (14)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (21)
        • 이론 (10)
        • MCP (1)
        • LangGraph (10)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SwiftUI
    백준
    dp
    투포인터
    dispatch
    concurrency
    프로그래머스
    boostcamp
    Tuist
    property
    Spring
    CS
    IOS
    Swift
    dfs
    protocol
    GIT
    lifecycle
    UIKit
    AVFoundation
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
PDF 전처리 해보기
상단으로

티스토리툴바