LangChain을 활용하지 않고 RAG 구성해보기

2025. 7. 27. 21:25·RAG 을 활용하여 LLM 만들어보기

이번에는 LangChain을 활용하지 않고 RAG를 구성해보려고 한다.

 

1. 문서 가져오기

먼저 문서를 가져오기 위해 pip install python-docx 이후, 아래와같이 paragraph 단위로 나누어 full_text 변수에 입력한다.

2. 문서 쪼개기

다음으로 tiktoken을 사용하여 문서를 토큰화한다. 내가 사용한 문서의 경우, 총 152700 토큰으로 구성되어 있다.

그러나 gpt-4o 는 128000 context window까지만 지원하기 때문에 토큰 개수를 조절해야 한다.

 

이 때문에 쪼개는것이 중요한데, token의 lenth 를 파악한 뒤 원하는 chunk size 로 쪼개고 문서로 반환한다.

https://platform.openai.com/docs/models/gpt-4o

 

참고로 아래와 같이 encoding 한 것을 다시 문서화(decoding) 함으로써 다시 문자 형태로 되돌릴 수도 있다..

 

그렇다면 아까 인코딩한 문서를 원하는 청크 사이즈 크기로 문서의 처음부터 끝까지 나눌 수 있는데,

나는 각 1500 token으로 진행했고, 출력했을 때 원하는 텍스트가 하나씩 들어있다.

3. 임베딩 진행하기

LangChain chroma 에서 chroma를 가져오지 않고, chroma client 생성 후 collection을 만든다.

collection이 RDB 에서 table 과 같은 역할을 하고있으며, 아래와 같이 로컬에 vector DB 를 만들 수 있다.

 

다음으로는 Upstage 문자를 숫자로 변경하는 embedding model 을 불러온다. 

 

`get_or_create_collection` 을 활용하여 컬렉션 생성 또는 가져온 뒤에 tax_collection에 넣어야 하는데

tax_collection 에 add 할 때, index를 같이 넣어야 하므로 chunk_list만큼 값을 늘려놓는다.

위와같이 두개의 리스트 길이가 동일한 상태에서 Chroma 컬렉션에 문서를 추가할 수 있다.

 

4. 유사도 검색하기

이미 query 에 embedding 이 되어있기 때문에, 아래와 같이 쿼리문을 전달하면 바로 답변을 받을 수 있다.

5. LLM 질의

아래와 같이 query를 날린 뒤 response 를 받을 수 있다. Langchain과 비교했을 때,

embedding, 검색, 질의를 한번에 관리할 수 있지만, 문서 parsing, chunking, embedding 등

관리할 패킷과 코드의 양이 많고 결과적으로는 서버가 불안정해서 memory chroma DB 가 사라진다.

 

반면 LangChain 에서는 자체적으로 관리되는 DB 가 많아서 별도 코드를 작성하지 않고,

Retriever 을 사용한 DB를 통해 다른걸로 변경하는 등 코드 작성이 훨씬 간편해진다는 장점이 있다.

 

'RAG 을 활용하여 LLM 만들어보기' 카테고리의 다른 글

Retrieval 효율 개선을 위한 데이터 전처리  (2) 2025.08.04
Pinecone 과 LangChain을 활용한 Vector Database 변경  (2) 2025.07.30
RAG 을 활용한 LLM 만들기 필수 용어 및 흐름  (0) 2025.07.21
환경설정 및 LangChain과 Chroma를 활용한 검증 및 RAG 구성해보기.  (0) 2025.07.20
LLM에 관심을 가지게 된 계기와 필요 배경 지식  (4) 2025.07.09
'RAG 을 활용하여 LLM 만들어보기' 카테고리의 다른 글
  • Retrieval 효율 개선을 위한 데이터 전처리
  • Pinecone 과 LangChain을 활용한 Vector Database 변경
  • RAG 을 활용한 LLM 만들기 필수 용어 및 흐름
  • 환경설정 및 LangChain과 Chroma를 활용한 검증 및 RAG 구성해보기.
몽자비루
몽자비루
코딩공부 정리용 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (195)
      • python (30)
        • python_selenium (16)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (33)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
        • 제4회 QA conference (3)
      • 에러일기 (1)
      • Server&load (35)
        • AWS (27)
        • load test (5)
        • CI CD (3)
        • Jmeter (0)
      • RAG 을 활용하여 LLM 만들어보기 (12)
      • git&github (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    포스트맨
    애플리케이션로그
    application log
    e2c
    쿠버네티스
    QAKOREA
    .cpu
    python
    앱공존성
    사드웨어리소스
    테스트스크립트
    공존성테스트
    postman
    k8s
    API
    리눅스
    로스트아크api
    qa
    LOSTARK
    로스트아크
    qa 컨퍼런스
    테스트 결과보고서
    cka
    linux
    네트워크 테스트
    qa conference
    개발자에서아키텍트로
    도커
    스터디
    vi에디터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
몽자비루
LangChain을 활용하지 않고 RAG 구성해보기
상단으로

티스토리툴바