Skip to content

RAG

RAG(Retrieval-Augmented Generation) 란

LLM의 응답을 외부 지식으로 보강하여 더 정확하고 신뢰할 수 있는 응답을 생성하는 기술

주요 구성 요소

  1. 문서 로딩 (Document Loading)
  2. 다양한 형식의 문서를 로드
  3. PDF, TXT, HTML, DB 등 지원

    from langchain.document_loaders import TextLoader
    loader = TextLoader('data.txt')
    documents = loader.load()
    

  4. 텍스트 분할 (Text Splitting)

  5. 긴 문서를 적절한 크기로 분할
  6. 컨텍스트 윈도우 제한 고려

    from langchain.text_splitter import CharacterTextSplitter
    text_splitter = CharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=200
    )
    texts = text_splitter.split_documents(documents)
    

  7. 임베딩 생성 (Embedding)

  8. 텍스트를 벡터로 변환
  9. 의미적 유사도 계산을 위해 필요

    from langchain.embeddings import OpenAIEmbeddings
    embeddings = OpenAIEmbeddings()
    

  10. 벡터 저장소 (Vector Store)

  11. 임베딩을 저장하고 검색
  12. 유사도 기반 검색 지원

    from langchain.vectorstores import Chroma
    db = Chroma.from_documents(texts, embeddings)
    

  13. 검색 및 생성 (Retrieval & Generation)

  14. 관련 문서 검색
  15. 컨텍스트를 포함한 응답 생성
    # 검색
    query = "인공지능의 미래"
    docs = db.similarity_search(query)
    
    # 생성
    from langchain.chains import RetrievalQA
    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=db.as_retriever()
    )
    result = qa_chain.run(query)
    

장점

  1. 정확성 향상
  2. 최신 정보 활용 가능
  3. 도메인 특화 지식 활용
  4. 환각(hallucination) 감소

  5. 투명성

  6. 응답의 출처 추적 가능
  7. 신뢰성 검증 용이

  8. 유연성

  9. 다양한 데이터 소스 활용
  10. 지속적인 지식 업데이트 가능

사용 사례

  1. 고객 지원
  2. 제품 문서 기반 응답
  3. FAQ 자동 응답

  4. 연구 지원

  5. 논문 검색 및 요약
  6. 연구 데이터 분석

  7. 교육

  8. 교재 기반 학습 지원
  9. 맞춤형 교육 콘텐츠

  10. 기업 지식 관리

  11. 내부 문서 검색
  12. 지식 베이스 구축