Claude Code + RAG-Anything = 한계 없는 가능성

CChase AI
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00거의 모든 RAG 시스템은 똑같은 문제로 어려움을 겪습니다.
00:00:04텍스트 문서만 처리할 수 있다는 점이죠.
00:00:06그래서 이미지, 차트, 그래프 등을 입력하려고 하면,
00:00:10대부분의 RAG 시스템은 이를 처리하지 못합니다.
00:00:12어제 제가 보여드렸던 LightRAG도
00:00:13정확히 똑같은 문제를 가지고 있었습니다.
00:00:16하지만 오늘 그 해결책을 보여드리겠습니다.
00:00:19그 해결책은 바로 'RAG Anything'입니다.
00:00:20RAG Anything은 이 문서 문제를 해결해 줍니다.
00:00:23이미지를 처리할 수 있습니다.
00:00:24차트도 처리할 수 있고요.
00:00:25그래프도 처리 가능합니다.
00:00:25그리고 우리가 실제로 사용하는 문서들을
00:00:28제대로 다루는 RAG 시스템을 만들게 해줍니다.
00:00:31RAG Anything은 LightRAG를 만든 팀에서 제작했습니다.
00:00:34어제 우리가 이미 구축한 LightRAG 시스템에
00:00:36직접 연결됩니다.
00:00:37그래서 우리 스택에 도입하기가 정말 쉽습니다.
00:00:40오늘은 이것을 어떻게 설정하고
00:00:43내부적으로 어떻게 작동하는지 정확히 보여드릴 겁니다.
00:00:44현존하는 가장 강력한 RAG 시스템 중 하나를
00:00:46직접 사용해 보실 수 있도록 말이죠.
00:00:48오프닝에서 충분히 짐작하셨겠지만,
00:00:50여러분은 이미 어제의 LightRAG 영상을
00:00:52보셨을 것이라 가정하겠습니다.
00:00:54아직 안 보셨다면 위에 링크를 걸어둘 테니 확인해 보세요.
00:00:56오늘은 여러분이 이미 LightRAG 서버를
00:00:58설정해 두었다고 가정하고 진행할 것이기 때문입니다.
00:00:59여러분은 RAG가 어떻게 작동하는지, 그리고
00:01:02이 지식 그래프라는 개념을 이해하고 계실 겁니다.
00:01:03RAG Anything은 본질적으로
00:01:06LightRAG를 감싸고 있는 래퍼(Wrapper)입니다.
00:01:07우리는 여전히 동일한 LightRAG 웹 UI를 사용하며
00:01:10약간의 차이만 있을 뿐입니다.
00:01:11하지만 RAG Anything에 입력되는 모든 것들,
00:01:13즉, 이러한 비텍스트 문서들도
00:01:15결국 동일한 지식 그래프로 들어가게 됩니다.
00:01:17우리는 전과 같은 질문을 던질 것이고,
00:01:19어제 했던 것처럼 Claude Code를 통해
00:01:22동일한 API로 쿼리를 보낼 것입니다.
00:01:24오늘 우리가 추가하려는 기능은
00:01:26매우 중요합니다.
00:01:28순수하게 텍스트로만 구성된 RAG 시스템을 구축하는 것으론 부족합니다.
00:01:30우리가 사는 세상은 텍스트로만 이루어져 있지 않으니까요.
00:01:32기술적으로는 텍스트조차 아닌, 그냥 스캔된 형태의
00:01:34PDF 문서를 받아본 적이 얼마나 많으신가요?
00:01:36LightRAG는 그런 걸 처리 못 하지만, RAG Anything은 가능합니다.
00:01:39이제 오늘 조금 기술적인 내용을 다뤄보겠습니다.
00:01:40내부를 살펴보고 이 전체 시스템이
00:01:43정확히 어떻게 작동하는지 설명해 드리겠습니다.
00:01:44큰 틀에서 보면 무엇을 하는 것일까요?
00:01:46RAG Anything은 단지 텍스트가 아닌
00:01:49문서들을 살펴봅니다.
00:01:50기본적으로 LightRAG가 하는 일을
00:01:52비텍스트 문서들에 대해서 수행하는 것입니다.
00:01:55그렇게 자체적인 지식 그래프와
00:01:56자체 벡터 데이터베이스를 생성한 후에,
00:01:58이를 LightRAG의 것과 병합합니다.
00:02:00그렇기 때문에 모든 것이 하나의 깔끔하고
00:02:04정돈된 장소에 모여 질문할 수 있게 되는 것이죠.
00:02:06이제 RAG Anything의 유일한 단점은
00:02:08조금 더 무겁다는 점입니다.
00:02:09비텍스트 문서를 파싱하는 데 도움이 되는
00:02:12몇 가지 모델을 컴퓨터에 다운로드해야 합니다.
00:02:14그리고 실제로 비텍스트 문서를 수집할 때,
00:02:18LightRAG UI를 통해서는 직접 할 수 없습니다.
00:02:22스크립트를 사용해야 하죠.
00:02:23다행히도 여기서 Claude Code가 활약합니다.
00:02:25사용자 입장에서는 모든 설정을 마친 후,
00:02:28비텍스트 문서를 수집하기 위해 해야 할 일은
00:02:31Claude Code에게 "RAG Anything 스킬을 사용해서
00:02:33이 문서를 수집해 줘"라고 말하는 것뿐입니다. 정말 간단하죠.
00:02:36매우 쉽습니다.
00:02:37그리고 이전과 동일한 방식으로 질문하면 됩니다.
00:02:39그러니 전혀 나쁘지 않죠.
00:02:40다시 말하지만, 단지 그 과정만으로 이 모든 기능을 얻게 됩니다.
00:02:43이제 RAG Anything이 실제로 어떻게 작동하는지 알아보기 전에,
00:02:46제 Claude Code 마스터클래스를 잠시 홍보하겠습니다.
00:02:49몇 주 전에 막 출시되었는데요,
00:02:50초보에서 AI 개발자가 되기 위한 최고의 코스입니다.
00:02:53특히 기술적 배경이 없는 분들에게 좋습니다.
00:02:55저는 말 그대로 매주 내용을 업데이트합니다.
00:02:57내일도 새로운 업데이트가 예정되어 있습니다.
00:02:59그러니 Claude Code를 마스터하고 싶은데
00:03:01어디서부터 시작해야 할지 모르겠다면,
00:03:03바로 이 강의가 여러분을 위한 것입니다.
00:03:05댓글창에 링크가 있습니다.
00:03:07Chase AI Plus 내에 포함되어 있습니다.
00:03:09무료 Chase AI 커뮤니티도 운영하고 있습니다.
00:03:11이 모든 것이 너무 벅차게 느껴지거나
00:03:12이제 막 시작하는 단계라면 말이죠.
00:03:14그 링크는 설명란에 있습니다.
00:03:15거기서 오늘 제가 이야기할 프롬프트와
00:03:19스킬들도 찾아보실 수 있습니다.
00:03:20그러니 어떤 경우든 꼭 확인해 보세요.
00:03:22이제 RAG Anything에 대해,
00:03:23그리고 이것이 실제로 어떻게 작동하는지 이야기해 봅시다.
00:03:25솔직히 말씀드리면 꽤 간단하고 자명합니다.
00:03:28여러분의 시간을 낭비하지 않기 위해,
00:03:29이 이미지를 10초 정도 띄워둔 다음 다음으로 넘어가겠습니다.
00:03:32그리고 다음 단계로 넘어가겠습니다.
00:03:34좋습니다, 아주 잘 되네요.
00:03:39자, 계속 가보죠.
00:03:41농담입니다.
00:03:42사실 꽤 많은 일이 일어나고 있거든요.
00:03:44이 이미지는 실제보다 상황을 더 복잡하게 만듭니다.
00:03:46지난번에 우리가 'Light RAG'로 했던 작업을 이해하신다면,
00:03:50그 대화들을 기억하시죠? 그렇다면 문제없을 겁니다.
00:03:52RAG Anything도 비슷한 방식으로 작동하는데,
00:03:55몇 가지 추가 단계가 있을 뿐입니다.
00:03:56저는 이 과정을 한 번 짚고 넘어가고 싶습니다.
00:03:57이런 시스템이 어떻게 작동하는지 이해하는 것이
00:03:58중요하다고 생각하기 때문입니다.
00:04:00일반적으로 AI 분야에서는
00:04:01지나치게 실용적인 부분에만 매몰되기 쉽습니다.
00:04:04"체이스, 그냥 어떻게 설치하고
00:04:05어떻게 사용하는지만 알려줘."
00:04:06그런 분이라면 이 부분을 건너뛰셔도 좋습니다.
00:04:08하지만 더 성숙한 AI 개발자가 되고 싶고,
00:04:11제가 원숭이로도 대체할 수 있는 사람들과
00:04:13차별화되고 싶다면,
00:04:15그저 '수락'만 누르고 프롬프트와 스킬을
00:04:17복사해서 붙여넣기만 하는 사람 말이죠.
00:04:18그렇다면 아키텍처에 대한
00:04:21어느 정도의 이해를 갖추는 것이 중요합니다.
00:04:22이것이 바로 여러분을 다른 사람들과
00:04:23차별화해 줄 요소이기 때문입니다.
00:04:24단순히 이 RAG 시스템을 사용하는 법뿐만 아니라,
00:04:27더 높은 수준의 큰 프로젝트에서도 말이죠.
00:04:30이렇게 해야 자신만의 기술을 만들기 시작하고,
00:04:34실제로 이 분야에서 실력을 쌓을 수 있습니다.
00:04:35그럼 시작해 봅시다.
00:04:37RAG Anything에 대해 이야기해 보죠.
00:04:38먼저 문제점부터 짚어볼까요?
00:04:40문제는 스캔된 PDF 파일을 가지고 있는데,
00:04:44이게 실제 텍스트 형식이 아님에도 불구하고
00:04:45RAG 시스템에 넣어야 한다는 점입니다.
00:04:46Light RAG는 이런 파일을 처리하지 못하죠.
00:04:48그래서 RAG Anything이 등장한 겁니다.
00:04:51선글라스를 쓴 멋진 라마 로고가 있네요.
00:04:53가장 먼저 일어나는 일은
00:04:56이 문서를 RAG Anything에 입력하는 것입니다.
00:05:00그러면 시스템은 가장 먼저
00:05:02'MinerU'라는 프로그램을 사용합니다.
00:05:05이 프로그램은 컴퓨터 로컬 환경에서 완전히 무료로 실행되죠.
00:05:08그리고 이 문서를 구성 요소별로
00:05:11하나하나 분해하기 시작합니다.
00:05:12MinerU는 오픈 소스 프로젝트입니다.
00:05:14본질적으로는 다수의 소형 전문 모델을 포함하는
00:05:16문서 파서(Parser)라고 보시면 됩니다.
00:05:19이런 용어가 어렵게 느껴지신다면,
00:05:21그냥 오픈 소스라는 것만 아셔도 충분합니다.
00:05:22아래에 링크를 남겨두겠습니다.
00:05:23다시 말씀드리지만, 오늘 대부분의 작업은
00:05:25이 프로그램이 처리하게 될 것입니다.
00:05:26MinerU는 문서를 분석하며 이렇게 말합니다.
00:05:29"좋아, 이건 헤더(제목)군."
00:05:32그러고는 헤더 주위에 상자를 만듭니다.
00:05:33"이건 본문 텍스트야."
00:05:36"이건 차트네."
00:05:39"이건 막대그래프 이미지군."
00:05:41"그리고 이건 LaTeX로 작성된 방정식이야."
00:05:44문서를 훑어보고 나서
00:05:47각각의 특수한 부분으로 분리해낸 것이죠.
00:05:50MinerU 자체가 그 안의 내용을 이해하는 것은 아닙니다.
00:05:52MinerU가 텍스트를 읽는 것은 아니라는 뜻이죠.
00:05:53텍스트의 의미를 파악하지 못하고,
00:05:55차트가 무엇에 관한 것인지도 이해하지 못합니다.
00:05:56그저 차트, 텍스트, 이미지라는 것만 인식할 뿐입니다.
00:06:01그다음 단계에서 이 구성 요소들을
00:06:05MinerU에 속한 개별 전문 모델들로 보냅니다.
00:06:10이 모든 과정은 여러분에게 보이지 않습니다.
00:06:12내부적으로 자동 처리되는 일이니까요.
00:06:15사용되는 모델 중 하나는 'PaddleOCR'입니다.
00:06:20이 모델이 텍스트를 분석하게 됩니다.
00:06:21MinerU가 텍스트 블록을 여러분 컴퓨터에 있는 PaddleOCR로 보내면,
00:06:24거기서 텍스트를 추출해내는 방식이죠.
00:06:28이제 스캔된 이미지 형태의 텍스트가 아니라,
00:06:30"X 회사가 2023년 3분기에 강력한 실적을 보고했다"와 같은
00:06:34실제 읽을 수 있는 텍스트 데이터가 됩니다.
00:06:36이 부분의 텍스트도 마찬가지입니다.
00:06:40차트 또한 같은 과정을 거칩니다.
00:06:41차트 역시 텍스트로 변환되어,
00:06:43거대언어모델(LLM)이 처리할 수 있게 됩니다.
00:06:45LaTeX 방정식도 동일합니다.
00:06:47그걸 처리하는 전담 모델이 따로 있거든요.
00:06:48이제 더 이상 LaTeX 코드가 아닌 실제 텍스트가 됩니다.
00:06:52다만, 일반 이미지는 예외입니다.
00:06:54막대 차트이든 무엇이든 간에,
00:06:57텍스트로 변환할 수 없는 모든 것들이 해당됩니다.
00:07:00그럴 경우 시스템은 텍스트 변환 대신
00:07:01해당 부분을 스크린샷으로 찍습니다.
00:07:03이 점이 아주 중요합니다.
00:07:05이제 이것은 하나의 스크린샷이 되었습니다.
00:07:07이미지 파일, 즉 스크린샷인 거죠. 아주 좋습니다.
00:07:11지금까지 어떤 일이 일어났나요?
00:07:13텍스트 형식이 아닌 문서를 입력했습니다.
00:07:16문서는 각각의 구성 요소로 식별되었고,
00:07:18우리는 그 요소들을 가져와서
00:07:20두 가지 바구니로 나누어 담았습니다.
00:07:22텍스트 버킷과 이미지 버킷이 있습니다.
00:07:26이 점을 인식하는 것이 중요합니다.
00:07:28이미지 또는 텍스트라는 두 가지 경로가 있습니다.
00:07:31자, 이해되시나요?
00:07:32이제 무엇을 할 거냐면,
00:07:34이러한 내부 모델 사용은 끝났습니다.
00:07:36이제 '거물급'을 데려와야 합니다.
00:07:37이제 GPT 5.4 Mini 같은 것을 가져와야 하죠.
00:07:40참고로, 반드시 그래야 하는 건 아닙니다.
00:07:42원한다면 이 모든 과정을 로컬로 유지할 수도 있습니다.
00:07:44Ollama 같은 것을 사용할 수도 있죠.
00:07:45이제 텍스트 버킷을 가져와 GPT 5.4 Mini로 보냅니다.
00:07:50그리고 다음과 같은 프롬프트를 포함합니다.
00:07:52"이 텍스트를 두 가지 요소로 분류해줘."
00:07:55"그 텍스트를 가져와서
00:07:57엔티티(개체)와 관계(relationship)로 나눠줘."
00:08:01엔티티와 관계, 기억하시나요?
00:08:03우리의 지식 그래프 기억하시죠?
00:08:05엔티티와 엔티티, 그리고 그들 사이의 관계 말입니다.
00:08:09좋아요, 그리고 그것을
00:08:13벡터 데이터베이스용 임베딩으로 분류하기를 원합니다.
00:08:17임베딩, 즉 'embed'와
00:08:21엔티티 및 관계라고 부르겠습니다.
00:08:26자, 앞으로 어떤 일이 일어날지 생각해 볼까요?
00:08:29임베딩은 벡터 데이터베이스의
00:08:32임베딩이 될 것이고, 엔티티와 관계는
00:08:35지식 그래프가 될 것입니다.
00:08:37마치 LightRag에서 했던 것처럼요, 그렇죠?
00:08:39똑같습니다, 똑같아요. 다만 이제는
00:08:42텍스트 버킷에서 나온 것이라는 점만 다릅니다.
00:08:44하지만 아까 그 이미지들은 어떨까요?
00:08:47이 이미지들은 어떻게 처리할까요?
00:08:48마찬가지로 이것들도 GPT 5.4로 보내지지만,
00:08:52스크린샷 형태의 OCR로서 처리됩니다.
00:08:55우리는 GPT 5.4에게 "이 스크린샷을 보고
00:08:59두 가지로 분류해줘"라고 말합니다.
00:09:02임베딩과 엔티티 및 관계죠.
00:09:06자, 왜 이렇게 할까요?
00:09:07왜 그냥 똑같은 프롬프트에 전부 밀어 넣고
00:09:09전체를 OCR 처리하게 하지 않을까요?
00:09:12왜 전체를 하나의 스크린샷으로 취급하지 않는 걸까요?
00:09:14비싸고 느리기 때문입니다.
00:09:16'RAG-anything'이 선택한 방식은,
00:09:17제 생각에 꽤 영리한데,
00:09:19사용자의 컴퓨터 로컬 수준에서 메스로 도려내듯
00:09:21텍스트와 스크린샷으로
00:09:24각각 분리해내는 것입니다.
00:09:25따라서 이 두 경로를 거치게 되면,
00:09:27엄청난 비용과 시간을 절약하게 됩니다.
00:09:29상상해 보세요. ChatGPT에게
00:09:31스크린샷 만 장을 보여주고 텍스트를 다 뽑아낸 뒤
00:09:34그 텍스트에서 임베딩과
00:09:36엔티티 및 관계를 추출하라고 한다면,
00:09:37시간과 돈이 엄청나게 들 것입니다.
00:09:38이 방식이 더 똑똑하죠.
00:09:40이미지 쪽의 엔티티와 관계도
00:09:44완전히 동일합니다.
00:09:45그것 역시 벡터 데이터베이스로 들어가고
00:09:49지식 그래프로도 생성됩니다.
00:09:52그럼 이게 무엇을 의미할까요?
00:09:53문서 하나로부터
00:09:55네 종류의 결과물이 만들어진 셈입니다.
00:09:59두 개의 벡터 데이터베이스와
00:10:02두 개의 지식 그래프가
00:10:04하나의 비텍스트 문서에서 나온 것이죠.
00:10:08따라오고 계신가요?
00:10:09이제 우리는 무엇을 해야 할까요?
00:10:10대답은 뻔하죠.
00:10:11이것들을 합쳐야(merge) 합니다.
00:10:12그래서 이 네 가지 요소를 가져와서
00:10:15그냥 하나로 합쳐버립니다.
00:10:18서로 위에 겹쳐 놓는 것과 비슷합니다.
00:10:19기본적으로 엔티티를 기준으로 매칭시키죠.
00:10:22그러면 결국 마지막에는
00:10:27하나의 벡터 DB와 하나의 지식 그래프를 얻게 됩니다.
00:10:31위에서 LightRag로 했던 것과
00:10:32거의 정확히 같은 결과물입니다.
00:10:34간단하죠.
00:10:35만약 우리가 RAG-anything만 썼다면
00:10:38거기서 끝났을 것입니다.
00:10:40하지만 우리는 RAG-anything을
00:10:44LightRag 위에 얹으려고 한다는 걸 기억하세요.
00:10:46저는 LightRag의 모든 강력함과
00:10:48RAG-anything의 모든 기능을 원합니다.
00:10:50그럼 이제 어떤 일이 일어날까요?
00:10:52방금 보신 과정의 반복일 뿐입니다.
00:10:54그럼 내용을 좀 내려보겠습니다.
00:10:55이제 우리에겐 벡터 DB와 지식 그래프가 포함된
00:11:00RAG-anything 세트가 있고
00:11:05기존의 LightRag 세트가 있습니다.
00:11:06어떻게 할까요? 그냥 합치면 됩니다.
00:11:07둘을 병합하는 거죠.
00:11:09그러면 RAG-everything과
00:11:13LightRag가 결합되어,
00:11:15최종적으로 단 하나의 벡터 데이터베이스와
00:11:20단 하나의 지식 그래프를 갖게 됩니다.
00:11:21거기서부터는 예전의
00:11:24독립적인 LightRag 방식과 똑같습니다.
00:11:27어떤 질문이든 던지면,
00:11:31그 질문은 여기서 벡터로 변환됩니다.
00:11:33관련 있는 벡터들을 끌어오고,
00:11:35동시에 아래로 내려가서
00:11:37정확한 엔티티를 찾은 다음
00:11:39그 주변에 무엇이 있는지 살펴봅니다. 아시겠죠?
00:11:43조금 혼란스러웠을 수도 있겠네요.
00:11:44설명이 잘 전달되었기를 바랍니다.
00:11:46더 헷갈리게 해드리기 위해 요약해 보죠.
00:11:51텍스트가 아닌 문서를 추가하면 어떻게 될까요?
00:11:54그것은 RAG-anything으로 들어갑니다.
00:11:56RAG-anything은 추출 가능한 텍스트를 뽑아내고
00:11:58동시에 가능한 이미지들도 추출합니다.
00:12:00그리고 이 둘을 ChatGPT나
00:12:02원하는 어떤 AI 시스템으로든 보냅니다.
00:12:05그러면 임베딩과 엔티티,
00:12:07그리고 관계로 분류됩니다.
00:12:09이것들은 지식 그래프와 벡터 데이터베이스가 됩니다.
00:12:13우리는 그것들을 병합합니다.
00:12:15이제 RAG-anything을 위한 하나의 벡터 DB와
00:12:17하나의 지식 그래프가 생겼습니다.
00:12:19이미 LightRag를 실행 중이었거나
00:12:22그 위에 다른 문서를 추가했다면,
00:12:24기존에 존재하는 벡터 데이터베이스와
00:12:27기존의 지식 그래프가 있을 것입니다.
00:12:29이를 해결하기 위해 그냥 병합하면 됩니다.
00:12:32결국 사용자 입장에서는 아무런 변화도 못 느낄 겁니다.
00:12:35다시 말하지만, 사용자에게 이 모든 과정은 보이지 않습니다.
00:12:39여러분에게는 전혀 중요하지 않은 내용이죠.
00:12:41유일하게 신경 쓰일 만한 부분은
00:12:42GPT 5.4를 사용하는 과정입니다.
00:12:45비용이 좀 발생할 수 있기 때문이죠.
00:12:47하지만 교육적인 목적에서 보면,
00:12:50그것이 RAG-anything 시스템이
00:12:53LightRag 시스템과 통합되는 방식입니다.
00:12:55결국 핵심은,
00:12:57텍스트가 아닌 문서도 처리할 수 있는
00:12:58RAG 시스템을 갖게 된다는 뜻입니다.
00:13:00여기까지 잘 따라오고 계신다면,
00:13:03이제 이것을 실제로 어떻게 설치하고
00:13:07사용하는지에 대해 알아보겠습니다.
00:13:08그럼 이제 설치 방법과
00:13:09실제 사용법,
00:13:10그리고 몇 가지 주의사항에 대해 이야기해 보죠.
00:13:11저는 Claude Code에 입력할 원샷 프롬프트를 만들었습니다.
00:13:14이 프롬프트는 모든 것을 대신 설치해주고
00:13:17적절한 모델 업데이트 등 모든 과정을 처리해줍니다.
00:13:19여러분은 그저 이것을 실행할 때
00:13:20LightRag 디렉토리에 있는지만 확인하면 됩니다.
00:13:23이 작업은 크게 세 가지를 수행합니다.
00:13:25우선, 올바른 저장 경로가
00:13:27업데이트되었는지 확인합니다.
00:13:29이미 Docker LightRag 인스턴스가 실행 중이기 때문이죠.
00:13:32둘째, 모델을 업데이트해야 합니다.
00:13:33GitHub에 따르면,
00:13:34이 프로젝트는 원래 좀 오래전에 만들어졌습니다.
00:13:37그래서 모든 예제 스크립트들이
00:13:39GPT 4.0 mini 같은 것들을 사용하고 있죠.
00:13:41그래서 저는 5.4 nano로 설정해 두었습니다.
00:13:43물론 원하신다면 이 설정을 변경할 수 있습니다.
00:13:45하지만 저는 5.4 nano를 사용하도록 했고
00:13:48모든 작업에 OpenAI를 사용할 수 있도록
00:13:51text-embedding-3-large를 유지했습니다.
00:13:51간단하게 만들기 위함이니 취향껏 바꿔보세요.
00:13:54마지막으로, RAG-anything을
00:13:55LightRag의 래퍼(wrapper)로 사용하고 있기 때문에,
00:13:58GitHub 저장소에 제공된
00:14:02일부 예제 스크립트가 잘못되어 있습니다.
00:14:03예를 들어 '임베딩 이중 래핑 버그' 같은 것인데,
00:14:05이 역시 Claude Code에게 고치라고 말하면
00:14:08깔끔하게 해결해 줍니다.
00:14:09그러니 이 프롬프트를 그냥 사용하시면 됩니다.
00:14:12말씀드린 대로, 무료 School 커뮤니티 안에 있습니다.
00:14:14링크는 설명란에 적어두었습니다.
00:14:15RAG-anything을 검색하시면 바로 찾으실 수 있습니다.
00:14:18프롬프트를 실행하면
00:14:19모든 것을 다운로드하기 시작할 겁니다.
00:14:21용량이 조금 클 수 있다는 점 이해해 주세요.
00:14:22MinerU와 같은 모든 종속성(dependencies)을
00:14:23함께 다운로드해야 하기 때문입니다.
00:14:25이제 문서 수집(ingesting)에 대해 이야기해 보죠.
00:14:26이 과정이 다소 번거롭고 까다로울 수 있습니다.
00:14:28가장 이상적인 세상이라면, 이 시스템은
00:14:33매우 간소화되어 있어서
00:14:35무엇이든 그냥 던져 넣기만 하면
00:14:40단일 인터페이스를 통해 처리되어야겠죠.
00:14:41UI로 가서 업로드 버튼만 누르면
00:14:44되는 식으로 말입니다.
00:14:45하지만 지금은 RAG-anything과 LightRag를 그렇게 쓸 수 없습니다.
00:14:48텍스트 문서에 대해서는 여전히 가능합니다.
00:14:50이전 영상에서 보여드린 일반적인 워크플로우,
00:14:52즉 UI로 이동하거나
00:14:54LightRag 기술을 사용해 업로드하는 것은 여전히 유효합니다.
00:14:59하지만 RAG-anything으로는 그렇게 할 수 없습니다.
00:15:01근본적으로 다른 터널, 즉
00:15:04다른 경로를 따라가야 하거든요.
00:15:05RAG-anything이 사용하는 그 다른 경로는
00:15:07바로 파이썬 스크립트입니다.
00:15:09UI도 없고, 누를 수 있는 버튼도 없습니다.
00:15:11말 그대로 스크립트입니다.
00:15:12직접 실행해야 하는 코드죠.
00:15:14다행히 이 부분에서 Claude Code가 활약합니다.
00:15:16Claude Code가 등장하면서 매우 간단해집니다. 왜냐하면 우리는
00:15:19레포지토리 안에 있는 그 스크립트를 '스킬'로 바꿀 것이기 때문입니다.
00:15:23따라서 사용자 입장에서는 일단 스킬이 생성되고 나면,
00:15:25그저 Claude Code에게 이렇게 말하기만 하면 됩니다.
00:15:28"Claude Code, rag-anything 스킬을 사용해서 이 문서들을 다 업로드해 줘."
00:15:32텍스트가 아닌 이 모든 문서들 말이죠.
00:15:33그렇게 명령하면,
00:15:34MinerU 프로세스를 거치게 됩니다.
00:15:36시간이 좀 걸릴 겁니다. 왜냐하면 아까
00:15:39기술적인 섹션에서 설명해 드린 것처럼
00:15:41여러 작업들을 처리해야 하기 때문입니다.
00:15:43하지만 결국 LightRAG에 업로드될 것이고
00:15:45여러분의 문서 목록과
00:15:47지식 그래프(Knowledge Graph) 안에 나타날 겁니다.
00:15:49자, 그게 여러분이 알아야 할 유일하게 생소한 부분입니다.
00:15:51솔직히 다른 생소한 점은, 이 작업을 하고 나면
00:15:54도커(Docker) 컨테이너를 재시작해야 한다는 것인데,
00:15:58스킬의 일부로서 그 과정이 자동으로 이루어집니다.
00:16:00다시 말씀드리지만, 사용자의 관점에서는
00:16:03그저 스킬을 호출하기만 하면 된다는 차이점뿐입니다.
00:16:06이 'rag-anything 업로드 스킬' 또한
00:16:08무료 커뮤니티에 올라와 있습니다.
00:16:10그냥 다운로드해서 .claude 폴더에 넣기만 하면
00:16:13문제없이 잘 작동할 겁니다.
00:16:14참고로 MinerU가 시간이 좀 걸린다는 점은,
00:16:17rag-anything이 작동하는 방식 때문인데
00:16:19다운로드하면 기본적으로 CPU에서 실행됩니다.
00:16:22만약 GPU에서 실행하고 싶다면
00:16:24다른 버전의 PyTorch가 필요합니다.
00:16:27이 말이 너무 어렵게 느껴지신다면,
00:16:29그저 너무 느리다 싶을 때 Claude Code에게
00:16:32"이봐, PyTorch를 실행할 수 있을까?
00:16:34우리 GPU에서 MinerU를 실행할 수 있어?"라고 물어보세요.
00:16:36그러면 Claude가 방법을 안내해 주거나,
00:16:37사실상 알아서 전부 처리해 줄 겁니다.
00:16:39하지만 기본적으로는 CPU에서 돌아간다는 점만
00:16:41알고 계시면 됩니다.
00:16:42그럼 실제로 작동하는 예를 한번 보죠.
00:16:44우리가 수집했던 문서 중 하나가
00:16:48이 Novatech PDF였죠?
00:16:50SaaS 매출 분석 보고서입니다.
00:16:51완전히 가짜 데이터이긴 합니다만,
00:16:52핵심은 우리가 이런 종류의
00:16:55막대 그래프가 포함된 것을 수집했다는 점입니다.
00:16:57보통 이런 것은 이미지로 추출되어
00:16:59ChatGPT 등으로 보내져야 하죠.
00:17:01일반적인 LightRAG는 이걸 처리하지 못했을 겁니다.
00:17:03왜냐하면 단순한 이미지일 뿐이니까요.
00:17:05차트라서 내용을 분리해 내기가 어렵습니다.
00:17:07하지만 이걸 rag-anything으로 돌렸기 때문에,
00:17:10이제 Claude Code를 통해 이에 대해 질문할 수 있습니다.
00:17:13그래서 제가 Claude Code에게 물어봤습니다.
00:17:14"LightRAG 데이터베이스에서 Novatech Inc의
00:17:152025년 1월부터 9월까지의
00:17:18월간 매출 추이를 조회해 줄 수 있어?"
00:17:20보시다시피, 여기서는 스킬조차 사용하지 않았습니다.
00:17:22그냥 곧바로 API 요청을 보냈는데,
00:17:24쿼리를 날리는 데는 이것도 괜찮은 방법입니다.
00:17:26"Novatech Inc의 월간 매출 추이가 어땠어?"
00:17:29이런 식으로 질문이 들어갔죠.
00:17:30이제 전체 답변이 나왔습니다.
00:17:32원한다면 가공되지 않은 원시 응답을 확인할 수도 있습니다.
00:17:35결과가 어땠을까요?
00:17:36전체 월별 상세 내역이 돌아왔습니다.
00:17:391월 4.6, 2월 4.9,
00:17:433월 5.4 이런 식으로 계속 이어집니다.
00:17:46따라서 이 새로운 문서들에 대해 질문하는 것은
00:17:48이전과 똑같습니다.
00:17:49유일한 차이점은 업로드 방식입니다.
00:17:51제가 드린 그 스킬을 호출하기만 하면 되고,”
00:17:53Claude Code에게 무엇을 넣고 싶은지
00:17:55말해주기만 하면 됩니다.
00:17:56폴더 전체를 지정할 수도 있고,
00:17:58특정 다운로드 파일을 지정할 수도 있습니다.
00:18:00정말 쉽습니다.
00:18:01익숙해져야 할 유일하게 생소한 점은
00:18:04이 두 가지 업로드 경로가 있다는 것뿐입니다.
00:18:05하지만 실제 질문과 답변 과정은
00:18:07그냥 일상 언어로 진행됩니다.
00:18:09일상 언어죠. 스킬을 가지고 있어도 마찬가지입니다.
00:18:11지난 영상에서도 스킬을 드렸었지만,
00:18:13Claude Code는 이 시스템 전체의
00:18:14API 구조를 이해할 만큼 충분히 똑똑합니다.
00:18:17로컬 환경, 즉 여러분의 컴퓨터에 있으니까요.
00:18:19rag-anything에 대해서는 이게 전부입니다.
00:18:21이번 영상의 대부분이
00:18:22기술적인 측면에 집중되어 있었다는 건 알지만,
00:18:24보시다시피 일단 LightRAG 기반을 구축하고 나면
00:18:28그 위에 rag-anything을 추가하는 건 그리 어렵지 않습니다.
00:18:32특히 제가 드린 '원샷 프롬프트'를 사용한다면 더 그렇죠.
00:18:35쿼리를 날릴 때 세부적으로
00:18:37조정할 수 있는 것들이 좀 있긴 하지만,
00:18:39사실 Claude Code가
00:18:41LightRAG 내부에서 조절 가능한
00:18:43모든 가중치들을 관리하고 있습니다.
00:18:45그 부분에 대해서는,
00:18:45'검색(retrieval)' 섹션으로 가보면
00:18:47오른쪽에 있는 모든 파라미터들이 해당됩니다.
00:18:49다시 말하지만, Claude Code가 어떤 것이 최선인지 잘 알고 있습니다.
00:18:52전반적으로, rag-anything을 설정하는 것이
00:18:56얼마나 쉬운지 잘 설명되었기를 바랍니다.
00:18:58또한 여러분의 RAG 시스템에 이러한 수준의 기능을
00:19:02추가하는 것이 얼마나 간편한지도요.
00:19:03많은 다른 RAG 시스템에서는 아예 불가능하거나
00:19:05비용이 매우 많이 드는 일입니다.
00:19:06하지만 이건 상대적으로 저렴합니다.
00:19:08특히 우리가 구축한 MinerU 로컬 파싱 시스템을
00:19:11사용한다면 더욱 그렇습니다.
00:19:12그럼 언제나처럼, 어떻게 생각하시는지 알려주세요.
00:19:14Chase AI+를 확인해 보시는 것도 잊지 마세요.
00:19:16Claude Code 마스터클래스를 듣고 싶으시다면요.
00:19:18그럼 다음에 뵙겠습니다.

Key Takeaway

RAG Anything은 MinerU 로컬 파싱과 GPT 5.4를 결합하여 비텍스트 문서의 시각적 요소를 LightRAG 지식 그래프에 병합함으로써 복합적인 데이터 기반의 질의응답을 가능하게 한다.

Highlights

RAG Anything은 텍스트 문서만 처리 가능한 기존 RAG의 한계를 넘어 이미지, 차트, 그래프가 포함된 비텍스트 문서를 지식 그래프로 변환한다.

오픈 소스 파서인 MinerU를 사용하여 문서를 헤더, 본문, 차트, 수식 등의 구성 요소로 자동 분해하고 개별 전문 모델로 처리한다.

텍스트 블록은 PaddleOCR로 추출하고 이미지나 차트는 스크린샷으로 캡처하여 GPT 5.4 Mini를 통해 엔티티와 관계를 추출한다.

로컬 환경에서 텍스트와 이미지를 분리해 처리하는 방식을 통해 클라우드 LLM에 전체 이미지를 보내는 방식보다 비용과 시간을 절약한다.

Claude Code의 '스킬' 기능을 활용하면 복잡한 파이썬 스크립트 실행 없이 대화형 명령만으로 비텍스트 문서를 시스템에 업로드할 수 있다.

Timeline

비텍스트 문서 처리의 한계와 해결책

  • 기존 RAG 시스템은 텍스트 데이터만 처리할 수 있어 이미지나 스캔된 PDF 대응에 어려움을 겪는다.
  • RAG Anything은 LightRAG를 감싸는 래퍼 형태로 작동하며 비텍스트 문서를 지식 그래프에 통합한다.

대부분의 RAG 시스템은 차트나 그래프가 포함된 문서를 입력받으면 핵심 정보를 놓치는 구조적 결함이 있다. 어제 구축한 LightRAG 역시 동일한 문제를 안고 있지만 RAG Anything을 도입하면 기존 스택을 유지하면서도 시각 정보 처리가 가능하다. 실제 업무 환경에서 자주 발생하는 스캔된 PDF나 기술 도표를 데이터베이스화하는 것이 이 시스템의 주된 목적이다.

MinerU와 모델을 활용한 문서 분해 아키텍처

  • 로컬에서 실행되는 MinerU는 문서를 레이아웃 단위로 정밀하게 분석하여 구성 요소를 식별한다.
  • 식별된 요소들은 PaddleOCR이나 전용 수식 모델을 통해 텍스트와 이미지 버킷으로 분류된다.

시스템 내부에서는 MinerU라는 오픈 소스 프로젝트가 문서의 헤더, 본문, 막대그래프, LaTeX 방정식을 구분하는 역할을 수행한다. MinerU 자체가 내용의 의미를 이해하지는 못하지만 각 요소를 상자 형태로 격리하여 전담 모델로 전달한다. 텍스트는 읽기 가능한 데이터로 변환되고 변환이 불가능한 이미지는 스크린샷 형태로 저장되어 다음 단계를 준비한다.

비용 효율적인 엔티티 추출 및 그래프 병합

  • 분리된 텍스트와 이미지 데이터는 GPT 5.4를 통해 지식 그래프 구성을 위한 엔티티와 관계로 변환된다.
  • RAG Anything으로 생성된 데이터는 기존 LightRAG의 벡터 데이터베이스 및 지식 그래프와 하나로 합쳐진다.

모든 데이터를 한꺼번에 OCR 처리하는 대신 로컬에서 선별적으로 분리하여 GPT 모델에 전송함으로써 처리 비용을 대폭 낮춘다. 추출된 엔티티와 관계 정보는 임베딩 과정을 거쳐 벡터 데이터베이스에 저장되며 최종적으로 기존 시스템과 병합된다. 이 과정을 통해 사용자는 문서의 형식과 상관없이 통합된 하나의 지식 저장소에 질문을 던질 수 있는 환경을 갖추게 된다.

Claude Code를 활용한 설치 및 실전 활용

  • 전용 원샷 프롬프트를 사용하면 모델 설정과 라이브러리 의존성 문제를 자동으로 해결하며 설치할 수 있다.
  • 파이썬 스크립트 대신 Claude Code 스킬을 사용하여 자연어로 문서를 수집하고 분석 결과를 조회한다.

설치 과정에서 발생할 수 있는 임베딩 이중 래핑 버그나 구버전 스크립트 문제는 Claude Code가 실시간으로 수정한다. 비텍스트 문서는 별도의 UI 대신 Claude Code 스킬을 호출해 업로드하며 MinerU는 기본적으로 CPU에서 작동하나 필요시 GPU 가속 설정을 지원한다. 실제 테스트에서 SaaS 매출 분석 보고서의 막대그래프 데이터를 정확히 읽어와 월별 매출 추이를 텍스트로 답변하는 성능을 보여준다.

Community Posts

View all posts