DeepSeek의 추론 모델로 RAG 파이프라인 강화하기

채널 아이콘
Prompt Engineering 구독자 190,000명

요약

이 영상은 DeepSeek R1 추론 모델을 활용하여 RAG(Retrieval-Augmented Generation) 파이프라인을 구축하고 강화하는 과정을 상세히 설명합니다. 영상에서는 PDF 문서에서 텍스트를 추출하여 청킹하고 임베딩 모델로 벡터화한 후, 벡터 저장소에 저장하는 지식 생성 단계와 사용자 질의를 받아 관련 청크를 추출한 후 추론 모델로 최종 응답을 생성하는 생성 단계를 다룹니다. sambba NOA Cloud를 통한 API 설정 및 모델 스위칭, 그리고 추론 모델이 수행하는 재정렬 과정과 고급 응용 사례를 함께 소개합니다. 이 과정을 통해 RAG 파이프라인의 효율성과 확장 가능성을 높이는 방법을 제시합니다.

주요 키워드

RAG DeepSeek R1 추론 모델 임베딩 청킹 벡터 저장소 sambba NOA Cloud 재정렬 API

하이라이트

  • 🌟 RAG 파이프라인은 지식 생성 단계와 생성 단계, 두 가지 주요 구성 요소로 이루어집니다.
  • 🚀 DeepSeek R1 추론 모델은 단순 검색 뿐만 아니라, 재정렬 및 응답 생성을 위한 Chain of Thought 추론을 수행합니다.
  • ⚡ PDF 문서들을 청킹(문자 단위 분할)하여 임베딩 후 벡터 저장소에 저장하는 과정을 코드 예제로 상세히 보여줍니다.
  • 📌 sambba NOA Cloud를 통한 API 설정 및 모델 스위칭 방법이 설명되며, 빠른 추론 성능(초당 높은 토큰 처리 속도)이 강조됩니다.
  • 🔑 추론 모델을 재정렬 단계로 활용하여 관련 문서를 효과적으로 선별하는 방식이 데모를 통해 시연됩니다.
  • 🚀 영상 후반부에서는 agentic 시스템 등 고급 응용 사례에 대한 가능성을 제시하며, 시청자들의 의견과 아이디어를 댓글로 공유하도록 유도합니다.

용어 설명

RAG

Retrieval-Augmented Generation의 약자로, 검색과 생성 단계를 결합하여 정보를 효율적으로 처리하는 시스템입니다.

임베딩

텍스트 데이터를 수치화하는 기법으로, 의미 기반 검색을 가능하게 함으로써 벡터 비교를 수행합니다.

청킹(Chunking)

큰 문서를 일정한 길이의 작은 단위로 분할하는 전략으로, 문서의 의미 단위별 처리를 돕습니다.

벡터 저장소

임베딩된 데이터를 저장하고, 유사도 검색을 수행할 수 있도록 최적화된 데이터베이스 시스템을 의미합니다.

Chain of Thought

추론 모델이 문제 해결 과정을 단계별로 풀어내어 관련 정보를 선별하고 결합하는 과정을 나타냅니다.

[00:00:00] RAG 파이프라인 소개

영상은 DeepSeek R1 추론 모델을 활용하여 RAG 파이프라인을 강화하는 방법을 소개합니다. 스폰서인 sambba NOA Cloud에 대해 간략히 언급합니다.

RAG 파이프라인 강화를 위해 DeepSeek R1 추론 모델을 활용하는 방법을 소개합니다. LangChain이나 LlamaIndex 없이 간단한 RAG 파이프라인을 구축할 예정입니다.
RAG 파이프라인의 두 가지 주요 구성 요소인 지식 베이스 생성 단계와 생성 단계에 대해 설명합니다. PDF 파일을 청크로 나누고 임베딩하여 벡터 저장소에 저장하는 과정을 다룹니다.
[00:00:25] 파이프라인 구성 요소 및 지식 생성 단계

RAG 파이프라인은 지식 기반 생성과 최종 응답 생성을 위한 두 단계로 구성됩니다. PDF 파일을 청킹하고 임베딩하는 과정을 설명합니다.

코드 구현을 위한 두 개의 주요 파일(indexing.py, retrieval.py)을 소개하고, 세 가지 다른 연구 논문(COVID-19 감지, 바이트 무게 추정, 웨어러블 센서)을 데이터셋으로 사용합니다.
문서 처리를 위한 indexing.py 파일의 구현을 설명하며, PDF 파일 로딩과 기본적인 청킹 전략(500자 크기, 50자 중첩)을 적용하는 과정을 상세히 다룹니다.
[00:02:18] 문서 청킹 및 임베딩 프로세스

코드를 통해 문서의 청킹 전략과 임베딩 모델을 이용한 텍스트 변환 과정을 시연합니다. Naive chunking 방식의 장점과 한계를 언급합니다.

추론 모델 사용시 고려사항과 'RAG Beyond Basics' 강좌 추천에 대해 설명합니다.
문서 청크의 임베딩 계산과 벡터 저장소 구현 과정을 설명하며, 오픈웨이트 임베딩 모델 사용법을 소개합니다.
FAISS 벡터 저장소 선택과 전체적인 RAG 파이프라인 구현 흐름을 설명합니다.
생성 프로세스에서 쿼리 처리와 추론 모델을 통한 응답 생성 방식을 설명합니다.
[00:04:38] Retrieval 및 질문 처리

사용자 질의를 받아 벡터 저장소에서 유사한 청크를 검색하고, 이를 기반으로 최종 응답을 생성하는 과정을 다룹니다. 추론 모델이 질문에 맞는 정보를 선별하는 방식이 핵심입니다.

사용자 쿼리 처리와 벡터 검색 과정, 그리고 랭킹 시스템에 대해 상세히 설명합니다.
추론 모델의 Chain of Thought 기능을 활용한 관련 청크 선별 과정을 설명합니다.
LLM이 응답을 생성하기 위한 지시사항 설정에 대해 설명합니다. 증강된 프롬프트를 통해 컨텍스트 기반 답변과 정보 부재시 응답 방식을 정의합니다.
DeepSeek R1 모델을 SambaNova 클라우드에서 사용하는 방법과 OpenAI 파이썬 클라이언트를 통한 간편한 모델 전환 과정을 설명합니다.
[00:07:00] DeepSeek R1 및 sambba NOA Cloud 활용

DeepSeek R1 모델의 높은 추론 속도와 sambba NOA Cloud의 API 설정 과정을 설명합니다. API 키와 엔드포인트 설정에 대한 정보를 제공합니다.

SambaNova의 RDU 기술과 DeepSeek R1 모델의 성능에 대해 설명합니다. 초당 198 토큰의 처리 속도와 전체 모델 호스팅의 장점을 강조합니다.
SambaNova 플랫폼 사용 방법과 API 접근에 대해 설명하며, OpenAI 파이썬 클라이언트를 통한 구현 방법을 상세히 다룹니다.
검색 코드 실행 과정을 시연하고, 구체적인 질문을 통해 시스템의 실제 사용 예시를 보여줍니다.
DeepSeek R1 모델이 문자 기반 청킹 전략을 사용하여 문서를 분석하고, 저작 속도와 섭취량 감소의 관계를 파악하는 과정을 설명합니다.
[00:10:24] 재정렬 및 최종 결과 생성

추론 모델이 각 문서를 재정렬하여 관련성이 높은 청크를 선택하는 과정을 데모로 보여줍니다. 여러 문서 중에서 올바른 응답을 도출하는 과정을 설명합니다.

모델이 여러 문서를 참조하여 한입당 씹는 횟수 증가가 한입 크기 감소와 에너지 섭취 감소로 이어진다는 연관성을 파악하는 과정을 보여줍니다.
추론 모델을 재순위 모델로 활용하는 방법을 설명하며, 문서의 관련성에 따른 점수 부여와 분석 과정을 자세히 다룹니다.
문서 분석을 통해 섭취 속도와 에너지 섭취량의 상관관계를 설명하고, 20개 문서 중 5개를 선별하여 관련성 점수를 제시했습니다.
추론 모델을 활용한 순위화 과정이 RAG 파이프라인의 핵심 단계임을 설명하고, 이를 통한 시스템 강화 방법을 소개했습니다.
[00:13:01] 고급 응용 및 마무리

추론 모델을 이용한 고급 agentic 시스템 구축 가능성을 언급하며 영상을 마무리합니다. 시청자에게 의견과 아이디어 공유를 요청합니다.

추론 모델을 에이전트 워크플로우에 적용하는 방안과 빠른 추론 API의 필요성을 설명하고, SambaNova와 같은 서비스 제공자를 소개했습니다.
추론 모델을 사용하여
DeepSeek R1과 같은 모델로 RAG 파이프라인을 강화하는 방법을
이번 영상에서 살펴보겠습니다.
LangChain이나 LlamaIndex 같은 외부 프레임워크 없이
간단한 RAG 파이프라인을 구축할 예정입니다.
이 파이프라인은 추론 LLM으로 구동되는데,
이를 위해 오늘의 스폰서인
SambaNova Cloud를 활용하겠습니다.
자세한 내용은 뒤에서 다루겠습니다.
우리의 RAG 파이프라인은
두 가지 주요 구성 요소로 이루어집니다.
첫 번째는 지식 베이스 생성 단계이고,
두 번째는 생성 단계입니다.
지식 베이스 생성 과정에서는
여러 PDF 파일을 작은 청크로 나누고,
임베딩 모델을 사용하여
각 청크의 임베딩을 계산한 다음,
이를 벡터 저장소에 저장합니다.
생성 단계에서는
사용자의 질의를 받아
동일한 임베딩 모델로 질의를 임베딩하고,
관련된 청크들을 검색한 뒤,
이 관련 청크들과
원래 질의를 함께
추론 모델에 전달하여 최종 응답을 생성합니다.
일반적으로 검색된 청크들을
재순위화하는 단계가 추가되지만,
추론 모델을 사용하면
이 부분을 자동으로 처리할 수 있습니다.
이에 대한 예시는
나중에 보여드리겠습니다.
자, 이제 코드를 살펴보겠습니다.
두 개의 주요 파일이 있는데,
하나는 지식 베이스 생성을 위한 indexing.py이고,
다른 하나는 생성을 위한 retrieval.py입니다.
이 코드는 GitHub에서 확인할 수 있으며,
링크는 영상 설명란에 있습니다.
우선 데이터셋이 필요한데,
이번에는 서로 다른 주제의 세 논문을 사용합니다.
첫 번째는 X-ray 이미지를 통한
COVID-19 감지에 관한 논문이고,
두 번째는 상용 이어버드를 이용한
바이트 무게 추정에 관한 논문입니다.
이것은 웨어러블 센서를 사용해
씹는 동작을 감지하고
이를 통해 음식 섭취량을 추정하는 내용입니다.
세 번째 논문은 또 다른 웨어러블 센서에 관한 것으로,
마찬가지로 씹는 동작을 감지하고
신호 처리 기술을 통해
이를 분석하여
씹는 동작을 세그먼트화하는 방법을 다룹니다.
논문의 세부 내용은 중요하지 않으며,
이는 제가 대학원 시절에 수행했던
연구 작업의 일부입니다.
이제 코드를 자세히 살펴보겠습니다.
먼저 지식 베이스 생성을 위한
indexing.py부터 시작하겠습니다.
첫 번째 단계로
문서를 로드해야 합니다.
Data라는 폴더가 있는데,
이 폴더에서 각 PDF 파일을 읽어
각 페이지의 텍스트를 추출합니다.
메타데이터로는 파일 이름만 포함됩니다.
다음 단계는 문서를 청크로 나누는 것입니다.
여기서는 단순한 청킹 전략을 사용하여
500자 크기의 청크와
50자의 중첩을 사용합니다.
이는 매우 기본적인 청킹 전략이며,
의미 기반 청킹이나
재귀적 문자 텍스트 분할기 같은
다른 청킹 전략들도 있습니다.
이러한 다른 방법들도 살펴보시는 것을 추천드립니다.
이 예제에서는 기본적인 청킹 전략으로도
좋은 결과를 얻을 수 있다는 것을
보여드리고자 합니다.
간단한 청킹 전략으로도
추론 모델을 사용하는 경우
하지만 만약 여러분이
이 주제에 대해 더 심도 있게 알고 싶다면
제가 강력히 추천하는 'RAG Beyond Basics' 강좌를
확인해보시기 바랍니다.
이 강좌에서는 RAG 파이프라인의
다양한 컴포넌트의 고급 기술들을 다룹니다.
링크는 영상 설명란에 있을 거예요.
그다음으로 이 청크들의
임베딩을 계산하여 벡터 저장소에 넣습니다.
여기서도 여러분은
다양한 임베딩 모델 옵션을
선택할 수 있는데, 저는 허깅페이스에서
사용 가능한 오픈웨이트
임베딩 모델을 사용하고 있습니다.
외부 API를 사용해도 코드는 여전히 작동합니다.
여기서는 청크들을 받아서
모든 청크에 대한 임베딩을 계산하여 반환합니다.
다음으로 모든 것을 벡터 저장소에
넣어야 하는데,
이 경우 벡터 저장소로
FAISS를 선택했습니다. 이는 오픈소스 벡터 저장소입니다.
이를 Chroma DB나
Pinecone으로 대체할 수 있습니다. 전체적인
흐름을 보면,
먼저 문서를 가져와서 청크로 나누고
이 청크들은
임베딩 모델에 전달되어 임베딩이 생성되며
그다음 FAISS를 사용하여
인덱스를 생성합니다. 또한
임베딩을 NumPy 배열로 저장하고
원본 청크들을
JSON 파일로 저장합니다. JSON은
이런 식으로 생겼는데, 예를 들어 이건 하나의 청크입니다.
저장되는 메타데이터는
파일 이름과 청크의 텍스트뿐입니다.
이제 생성 부분에 대해 설명하겠습니다.
여기서는
쿼리와 관련된 청크들을 검색하고
추론 모델을 사용하여
최종 응답을 생성합니다.
검색 과정에서는
저장했던 임베딩이 필요하고,
JSON 파일에 저장된 청크들도 불러와야 합니다.
그리고 쿼리의 임베딩을
계산해야 하므로 원본 임베딩 모델도
불러와야 합니다.
사용자로부터 입력 쿼리를 받고
이 쿼리 RAG 시스템을 사용하여
최종 응답을 생성할 것입니다.
내부적으로는 사용자 쿼리를 받아
쿼리의 임베딩을 계산한 다음
그 임베딩을 사용하여 벡터 검색을 수행합니다.
이 경우에는
임베딩 모델이 사용자 쿼리와 가장 유사하다고 판단한
상위 20개의 청크를
검색하려고 합니다. 일반적으로는
50개나 100개처럼 더 많은 청크를
검색하고
중간에 랭킹 모델을 사용하여
사용자 쿼리와의 유사도를 기준으로
반환된 청크들을 다시 순위를 매깁니다.
하지만 우리는
추론 모델을 사용하고 있기 때문에
체인 오브 소트(Chain of Thought)
추론을 통해 어떤 청크가
사용자 쿼리와 더 관련이 있는지 판단할 수 있습니다.
이에 대한 예시는
나중에 보여드리겠습니다.
인덱스를 가져온 다음
해당 인덱스를 사용하여 관련 텍스트 청크들을 가져오고
이들을 하나의 텍스트로 합칩니다.
그런 다음 이 텍스트 블록과
사용자 쿼리를 함께 출력합니다.
이것이 컨텍스트로 사용될 것입니다.
LLM이 응답을 생성하기 위해서는
우리가 몇 가지 지시사항을
제공해야 합니다. 영상의 첫 부분에서
지시사항은 매우 간단할 것입니다.
증강된 프롬프트는 다음과 같습니다.
"제공된 컨텍스트를 바탕으로
다음 질문에 대한 답변을 제공해 주세요.
만약 컨텍스트에 답변이 없다면
다음과 같이 응답해 주세요: '죄송하지만
제공된 컨텍스트에는 귀하의 질문에 대한
정보가 포함되어 있지 않습니다'
그리고 컨텍스트와 함께
사용자의 원래 질문을 추가합니다. 이제 우리가 사용하고자 하는
LLM은 DeepSeek R1이지만, SambaNova 클라우드를 사용하고 있고
좋은 점은 OpenAI 파이썬 클라이언트를
사용하고 있다는 것입니다.
이는 모델 전환을 매우 쉽게 만들어 줍니다.
필요한 것은 단지
SambaNova API 기본 URL과
API 키를 제공하는 것뿐입니다.
클라이언트를 생성하면
사용자 쿼리가 포함된
증강된 프롬프트를 모델에 전달하여
최종 응답을 얻을 수 있습니다.
그렇다면 SambaNova는 무엇일까요?
이들은 GPU의 대안인 RDU의
제작자입니다.
이를 재구성 가능한 데이터
흐름 유닛이라고 부르는데
GPU의 대안으로 생각하면 되지만, GPU와는 달리
전체 DeepSeek R1 모델을 호스팅하고 있습니다.
축소된 버전이 아닌 전체 버전을 제공하며
실제로 그들은 가장 빠른
DeepSeek R1 추론 제공자 중 하나입니다.
초당 198 토큰까지 처리할 수 있는데
이는 정말 놀라운 속도이며
그들의 플랫폼에서 DeepSeek R1에
플레이그라운드와 API를 통해
접근할 수 있습니다.
여기 다양한 오픈웨이트 모델 목록이 있고
전체 DeepSeek R1이 맨 위에 있습니다.
이것을 선택하고 쿼리를 보내면
속도가 정말 놀랍습니다.
여기 생성되는 사고 과정과
최종 출력을 보여드리겠습니다.
거의 초당 160 토큰의 속도로 실행되는 것을 볼 수 있습니다.
다시 한 번 보시면,
꽤 상세한 추론 과정이 있고
최종 출력이 나옵니다.
무료로 가입하여
여기서 모델을 실험해볼 수 있고
관심이 있다면 API 접근을 위한
대기자 명단에 등록할 수도 있습니다.
모델명을 R1으로 지정해야 하며
가장 좋은 점은 여전히
OpenAI 파이썬 클라이언트를 사용한다는 것입니다.
API 키에 접근하면
새로운 API 키를 생성할 수 있고, 개발자는
무료로 시작할 수 있습니다.
제 구성은 이렇게 되어 있습니다.
API 키를 저장하는 ENV 파일이 있고
SambaNova 기본 URL과 모델명이 있습니다.
제가 다른 API 엔드포인트를 사용하고 있는 것을
보실 수 있는데, 이는 초기 접근 단계이기 때문입니다.
DeepSeek R1 모델이 정식으로 출시되면
일반 API 엔드포인트를
사용할 수 있게 될 것입니다.
이제 검색 코드를 실행해 보겠습니다.
이미 인덱스를 생성했기 때문에
검색 부분을 실행하기 위해
Python retrieval.py를 실행하겠습니다.
자, 이제 질문을 해볼 수 있습니다.
"음식 크기가 섭취에 미치는 영향은 무엇인가요?"
라고 매우 구체적인 질문을 해보겠습니다.
답을 찾을 수 있는지 보겠습니다.
자, 실제로 답을 찾을 수 있는지 확인해보겠습니다.
먼저 반환된 컨텍스트를 보여드리겠습니다.
여러 문서들이 있는데,
문자 기반 청킹 전략을 사용하고 있어서
일부 경우에는 단어가 중간에 잘리는 것을 볼 수 있습니다.
첫 번째 청크는
관련성이 있는데, 왜냐하면
섭취량 감소에 대한
저작 속도와 그 영향에 대해 다루고 있기 때문입니다.
하지만 다른 청크들도 있는데,
단순히 논문 참조인 것들도 있고,
다른 논문을 참조하는 것들도 있습니다.
일부 청크는 관련이 있지만
전혀 관련 없는 것들도 있죠.
논문들은 한입 크기에 대해서는 언급하지 않고
오히려 저작 속도나
한입당 씹는 횟수에 대해 이야기합니다.
DeepSeek R1의 내부 사고 과정을 살펴보겠습니다.
사용자가 한입 크기가 섭취량에 미치는 영향에 대해 물었으니
제공된 컨텍스트에서 관련 정보를 확인해야 한다고 합니다.
그리고 여러 문서를 검토하는데,
예를 들어 첫 번째 문서는
저작 속도를 줄이는 것이
에너지 섭취를 줄일 수 있다고 언급합니다.
또한 섭취 속도를
높이거나 낮추는 것이
에너지 섭취에 영향을 미친다는
연구들을 언급하고 있어 올바른 방향으로 가고 있습니다.
주목할 만한 점은
여러 문서를 참조하고 있다는 것입니다.
만약 랭커로서 프롬프트를 주면
추론 모델이 이를 수행할 수 있습니다.
이에 대한 예시를
나중에 보여드리겠습니다.
모델은 핵심 포인트로
한입당 씹는 횟수를 늘리는 것이
실질적으로 한입 크기를 줄이고
이는 에너지 섭취 감소로 이어진다고 봅니다.
정말 똑똑하게도,
컨텍스트가 직접적으로
한입 크기를 언급하지는 않지만
한입당 씹는 횟수와 관련이 있다는 것을 파악했습니다.
더 작은 모델은
이런 연관성을 완전히 놓칠 수 있죠.
이를 바탕으로 최종 응답을 도출합니다.
만약 질문을 '저작 속도가 섭취에 미치는 영향은 무엇인가'로 바꾸면
비슷한 과정을 거치지만
이번에는 직접적으로 저작 속도를 다루고 있어서
제공된 컨텍스트에서 직접 논의되지 않았다는 언급을 하지 않습니다.
이제 추론 모델을
재순위 모델로 사용할 수 있습니다.
방법은 다음과 같습니다.
원래 증강된 프롬프트에
답변하기 전에 각 문서를 분석하고
질문에 대한 답변이 포함되어 있는지
확인하라는 내용을 추가했습니다.
그리고 관련성에 따라
점수를 부여하도록 했습니다.
또한 가장 관련성 높은 문서를 먼저 나열하고
해당 문서들만을 기반으로
질문에 답하도록 했습니다.
동일한 질문을 했을 때
어떻게 되는지 살펴보겠습니다.
이 경우 사고 과정에서
각 문서를 개별적으로 검토하고
답변하기 전에
이 목록을 반환합니다.
첫 번째 문서는
사고 과정에서 각 문서를 개별적으로 검토하지만
마지막에는 이 목록을 반환합니다.
질문에 답하기 전에
문서 1이 10점을 받았는데,
이는 저작 속도를 줄이면
직접적으로 에너지 섭취가 줄어든다고
명시하고 있기 때문입니다.
문서에 따르면 에너지 섭취량이
두 번째 문서는 섭취 속도를 늦추면
에너지 섭취가 감소한다는 연구를 인용하고 있는데,
이는 제시된 맥락과 관련이 있는
연구입니다. 15번 문서는
한 입당 씹는 횟수를 늘리면
비만인과 정상인 모두에서
전체 에너지 섭취량이 감소한다고 강조합니다.
이 경우 제공된 20개의 문서 중
관련성을 기준으로 5개의 문서를
선택했으며, 관련성 점수도
함께 제공했습니다. 이것이 바로
전용 재순위화 모델이 수행할 작업입니다.
실제로 추론 모델을 직접 사용하여
순위화를 수행할 수 있으며, 이는
강력한 RAG 파이프라인의 중요한 단계입니다.
지금까지 추론 모델을 사용하여
RAG 파이프라인을 강화하는 방법에 대한
간단한 예시였습니다. 이 외에도
더 많은 것을 할 수 있습니다.
예를 들어, 에이전트 워크플로우를
운영하는 데 추론 모델을 사용할 수 있는데,
이는 더욱 중요합니다. 왜냐하면
강력한 에이전트 시스템을 구축할 때
추론과 평가 단계가
반드시 필요하기 때문입니다. 추론 모델은
비추론 모델에 비해 훨씬 더 많은
토큰을 생성하기 때문에
매우 빠른 추론 API 엔드포인트가 필요합니다.
이런 측면에서 SambaNova와 같은
제공업체를 확인해보시기 바랍니다.
여러분이 DeepSeek R1이나
다른 추론 모델로 구동되는
에이전트 시스템에 관심이 있다면 알려주세요.
또한 이 강력한 모델로
무엇을 만들 계획인지
아래 댓글 섹션에 남겨주세요.
이 영상이 도움이 되었길 바랍니다.
시청해 주셔서 감사합니다.
다음 영상에서 만나뵙겠습니다.