읽기 설정
AI 서비스에 문서를 업로드할 때는 그 회사에 많은 신뢰를 맡기는 것입니다. 그 문서들을 안전하게 보관하고, 모델 학습에 사용하지 않으며, 나중에 데이터 유출로 노출되지 않을 것이라는 신뢰를 맡기는 것이죠.00:00
많은 문서의 경우 괜찮을 수도 있지만, 법률, 의료, 금융 또는 고객 문서와 같이 민감한 문서의 경우에는 훨씬 더 큰 요구 사항입니다. 이러한 경우에는 완전한 통제가 필요합니다. 그래서 오늘 우리는 완전히 로컬 환경에서 격리된 상태로 진행하겠습니다.00:13
외부 API는 사용하지 않겠습니다. N8N에서 AI 에이전트를 구축해서 여러분의 개인 문서를 RAG라는 기술을 이용해서 질문할 수 있게 하고, 모든 작업을 여러분의 기기 내에서 완전히 비공개로 진행하며 로컬 네트워크의 다른 사람들과도 공유할 수 있습니다.00:26
많은 면에서 이것이 기업 내 AI의 미래이며, 로컬 모델이 점점 더 발전하고 있고, 기업들은 온프레미스 배포를 통해 위험을 줄이려고 노력하고 있습니다.00:38
오늘 사용할 스택은 n8n, olama, docline, 그리고 docker입니다.00:47
이 모든 것이 복잡하게 들릴 수도 있지만 걱정하실 필요 없습니다. 단계별로 하나하나 만들어갈 테니까, 편하게 따라오시면 금방 자신만의 로컬 멀티모달 RAG 에이전트를 구축하실 수 있을 겁니다. 자, 시작해 볼까요.00:52
제가 멀티모달 RAG라고 말씀드리는 게 어떤 의미인지 궁금하신가요? 음, 저는 다양한 데이터 유형을 가진 지식 기반에서 검색하는 것을 말하고 있습니다. 텍스트 문서나 임베디드 이미지나 표가 포함된 PDF 파일이 있을 수도 있습니다.01:05
회의 기록이나 심지어 영상 파일과 같은 오디오 파일도 있을 수 있습니다. 그리고 멀티모달 RAG의 장점은 PDF에 포함된 이미지가 있을 때, 예를 들어, 그 이미지가 검색되어 에이전트와의 채팅 대화의 일부로 반환될 수 있다는 것입니다.01:17
이것은 매우 강력합니다. 왜냐하면 많은 AI 에이전트는 지식 기반에서 텍스트만 반환하기 때문입니다.01:31
그러면 모든 파일을 로컬에서 처리하고 에이전트가 액세스할 수 있도록 하는 가장 좋은 방법은 무엇인가요? 음, 여기서 우리는 IBM에서 만든 오픈 소스 문서 처리 라이브러리인 DocLane을 사용합니다.01:39
DocLane를 이용하시면 PDF, 워드 문서, 파워포인트 프레젠테이션, 이미지, 오디오 파일 등을 입력하실 수 있으며, 이를 통해 에이전트가 검색할 수 있는 깔끔하고 구조화된 마크다운 또는 JSON 형식으로 결과물을 얻으실 수 있습니다.01:50
그리고 이것은 단순한 텍스트 추출 기능뿐만이 아닙니다. 보시다시피, 헤더도 인식할 수 있습니다.02:02
표도 인식할 수 있어요. 이 다이어그램들을 이미지로 추출하고, 다이어그램 안의 텍스트도 검색할 수 있도록 유지되어서 문서의 의미 구조가 보존됩니다.02:07
여기 예를 들어, 글머리 기호가 있죠. 내부적으로 문서를 처리하는 두 가지 뚜렷한 방법이 있습니다. 하나는 표준 파이프라인을 사용하는 것이고, 이 파이프라인은 전문화된02:18
레이아웃을 분석하고, 테이블 구조를 추출하며, OCR을 수행한 다음, 결과를 조립하여 다른 형식으로 내보낼 수 있는 모델과 알고리즘을 활용하는 방식의 아름다움은 바로 이것입니다.02:29
여기에는 AI 모델들이 사용되었지만, 생성형 모델이 아니기 때문에 환각 현상은 발생하지 않습니다. 텍스트를 있는 그대로 그대로 복사하며, 특수 목적의 파이프라인도 활용됩니다.02:42
다양한 파일 형식, 예를 들어 docx나 파워포인트의 경우, 해당 마크업 형식을 분석하여 doclean 문서를 실제로 생성할 수 있습니다. 그런 다음 마크다운이나 JSON, XML과 같은 형식으로 내보낼 수 있습니다.02:53
또 다른 방법은 Docklin을 사용할 때 비전 언어 모델, 즉 VLM을 사용하는 것입니다. 이는 대규모 언어 모델과 유사합니다.03:07
VLM 파이프라인을 사용하면 100페이지 분량의 PDF 문서와 같은 문서를 페이지 단위로 분할하고, 각 페이지를 VLM에 배치 처리하여 보내게 됩니다. 여기서 VLM에게 각 페이지에서 모든 내용을 추출하도록 요청하게 됩니다.03:15
텍스트가 정확하게 특정 형식, 예를 들어 마크다운으로 번역된 후, doclean 라이브러리의 핵심이 되는 doclean 문서가 생성됩니다. 그런 다음, 이 문서는 활용될 수 있습니다.03:30
다양한 형식으로 내보내질 수 있지만, VLM은 꽤 강력할 수 있습니다. 하지만 생성형 AI를 다루고 있기 때문에 추출된 텍스트에서 환각 현상이 나타날 수도 있고, 어느 정도는 불가피하다고 할 수 있습니다.03:42
OCR 오류로 인한 부정확성을 보정해야 하므로, 완벽한 접근 방식은 없습니다. 하지만 많은 경우에 있어서는 표준 파이프라인을 선호합니다. 특히 VLM(Vision Language Model)의 경우에 더욱 그렇습니다.03:54
다양한 옵션들이 있기 때문에, 완전한 에어 갭(Air Gap)으로 로컬 시스템을 실행하려면 IBM의 granite, dock lane small, dock lane, quen vl과 같은 것들을 사용해야 합니다. 클라우드 기반의 독점적인 VLM들도 많이 있습니다.04:06
Gemini, OpenAI, Claude와 같은 것들이 있지만, 그런 것들을 완전히 로컬에서 실행할 수는 없습니다. 로컬 호스팅 VLM을 찾고 있다면 alama.com에 방문해서 모델과 비전을 클릭하면 사용할 수 있는 긴 목록을 확인할 수 있습니다.04:20
미스트랄, 딥시크(DeepSeq) OCR에서 미스트랄을 사용하고 있습니다. 다양한 옵션이 있으시겠지만, 결국 로컬 AI를 실행하기 위한 하드웨어 요구 사항으로 이어지게 됩니다.04:34
이러한 LLM, VLM, 임베딩 모델들은 모두 신경망을 기반으로 하며, 실제로 메모리에 로드하려면 수십억 개에서 수조 개의 파라미터가 필요합니다.04:44
출력 응답을 생성하고 이러한 계산은 기존 CPU와 RAM의 성능을 훨씬 뛰어넘습니다. 사실상 이러한 작업을 실행하려면 그래픽 카드가 필요하며, 시스템 내에서 그 역할을 수행하게 됩니다.04:56
오늘 진행하면서 GPT OSS 200억과 같은 로컬 LLM을 사용하고, 문서를 처리하기 위해 VLM을 활용할 수도 있습니다. 표준 파이프라인 내에 non-gen AI 모델들도 존재합니다.05:07
그리고 닥클링(dockling) 후에는 벡터를 생성하여 검색할 수 있는 임베딩 모델이 있습니다. 그래픽 카드들이 필수적이며, 다양하게 활용할 수 있는 옵션들이 존재합니다.05:20
엔비디아 지포스 RTX 카드는 로컬 AI 환경에서 흔히 사용되지만, 실제로 구동할 수 있는 모델의 복잡도에는 제한이 있습니다. AMD Radon과 애플 제품도 마찬가지입니다.05:29
이 카드들에서 쾌적하게 구동할 수 있는 LLM의 최대 크기는 대략 250억에서 350억 개의 파라미터 정도가 될 것으로 예상됩니다.05:41
700억 개의 파라미터를 가진 더 큰 모델을 불러올 수는 있지만, 그렇게 되면 모델의 품질이 상당히 저하될 수밖에 없습니다. 특히 로컬 AI를 배포하신다면, 이것은 매우 중요한 요구사항이라고 할 수 있습니다.05:49
사업을 시작하려면 서버를 구축하는 데 초기 투자가 필요합니다. 그리고 동시에 사용하는 사용자 수가 많을수록 시스템을 실행하는 데 필요한 하드웨어 또한 늘어납니다. 초당 토큰 수도 중요한데, 사람들은 빠른 응답 속도에 익숙하기 때문입니다.06:02
챗GPT나 클로드 같은 것들과 같은 수준의 성능을 기대하게 될 겁니다. 그 기대치가 합리적인지 여부는 또 다른 문제이긴 하지만요. 엔비디아 RTX 4090은 약 1,600달러 정도 합니다.06:16
5090 모델은 2,000달러 정도 합니다. 그리고 여기서부터 서버를 더 구축해야 합니다. 하지만 이것이 초기 고정 비용이라는 것을 알 수 있습니다.06:29
그리고 장점은 완전히 로컬 시스템을 갖게 되며, 이를 실행하는 데 필요한 클라우드 비용이 전혀 없습니다. 중요한 점은 로컬 AI 애플리케이션을 구축하기 위해 지금 당장 이 하드웨어를 갖출 필요가 없다는 것입니다.06:38
실제 시스템을 격리하기 위해 이것을 실제로 운영 환경에서 사용하실 때 필요한 부분입니다.06:51
하지만 실제 시스템을 구축하고 설계하고 더미 데이터로 테스트하려면, 올라마 클라우드나 오픈 라우터와 같은 클라우드 기반 오픈 소스 모델을 활용할 수 있습니다. 오픈 라우터는 다양한 오픈 소스 모델을 사용할 수 있는 옵션을 제공합니다.06:57
이 방법을 택하면 바로 시작해서 솔루션을 구축할 수 있고, 동시에 시스템이 운영될 때 필요한 인프라를 준비할 수 있어서 편리합니다.07:11
생산 환경 구축에 관심이 있으시다면, 저희의 최첨단 로컬 RAG 시스템에 대한 접근 권한을 얻으실 수 있도록 설명을 확인해주세요. AI Automators 커뮤니티에서 수백 명의 동료 개발자들과 함께 프로덕션 수준의 RAG 에이전트를 구축할 수 있습니다.07:22
Docklin은 GitHub에서 사용할 수 있는 MIT 라이선스 오픈 소스 애플리케이션입니다. 특히 주목해야 할 프로젝트 두 가지가 있습니다. 화면에서 보시는 것처럼 코어 프로젝트가 있고, 또 Docklin이라는 프로젝트도 있습니다.07:35
이 기능은 Docklane 핵심 라이브러리에 대한 API 래퍼입니다.07:47
그리고 이것은 매우 중요합니다. 왜냐하면 저희는 RAG 파이프라인에서 문서를 처리하기 위해 N8N을 오케스트레이터로 사용하고 싶기 때문입니다. 그럼, 앞으로 어떻게 해야 할까요? 당연히 Docklane과 N8N을 로컬에서 설정해야 할 겁니다.07:51
N8N에서 자체 호스팅 AI 시작 키트를 출시했는데, 이 키트는 N8N, 올라마, 쿼드런트, 그리고 포스트그레SQL을 도커 컴포즈 파일로 묶어놓았습니다. 따라서 사용자의 기기에 이 모든 것을 쉽게 설치하고 실행할 수 있습니다.08:03
다만 아직 dockling이 누락되어 있습니다. 그래서 이 스타터 키트 저장소(repository)를 가져와서(forked) dockling docker compose를 스타터 키트에 추가했습니다.08:18
이 링크는 아래 설명란에 남겨드릴 테니 따라오시기 편하실 거예요. 하지만 이것을 설정하기 전에, 전체적인 작동 방식을 간단히 살펴봅시다.08:28
따라서 이 모든 서비스는 도커 컨테이너 내에서 실행될 거예요. 도커라는 것을 처음 들어보셨다면, 도커는 애플리케이션을 격리된 환경과 컨테이너 내에서 실행할 수 있게 해주는 기술입니다.08:36
그리고 시스템에서 로컬로 실행해야 하는 애플리케이션들을 생각해 보면, N8N, Dockling, Quadrant 같은 것들은 모두 다른 시스템 요구 사항을 가지고 있고, 서로 다른 라이브러리를 사용하며, 다른 프로그래밍 언어로 작성되었답니다.08:48
일반적으로 이러한 모든 애플리케이션을 기기에서 네이티브하게 실행하려면 꽤나 골치 아픈 일일 수 있습니다. 다행히도 도커는 이러한 모든 과정을 피해 갑니다. 각 애플리케이션이 자체 격리된 환경에서 실행되므로 서로 충돌하지 않게 됩니다. 왜냐하면 서로 영향을 줄 수 없기 때문입니다.09:00
서로의 내부 구조를 보지는 않고, 공유된 네트워크를 통해 간단하게 통신합니다. 이해를 돕기 위해 몇 가지 용어를 설명드리겠습니다. Docker 이미지라는 것이 있는데, 이는 기본적으로 정적인 상태이며, 필요한 것들을 포함하고 있습니다.09:14
애플리케이션 코드는 애플리케이션이 실행될 환경을 정의하지만, 말씀드린 것처럼 정적입니다. 따라서 실제 애플리케이션에 접근하려면 컨테이너 내에서 실행해야 합니다. 컨테이너는 그 정적 이미지를 실행 중인 인스턴스라고 할 수 있습니다.09:25
이 컨테이너들의 특징은 상태가 없다는 것입니다. 따라서 N8N 컨테이너를 생성하면 이 정적 이미지로부터 시작해서 실행되고, 컨테이너를 삭제하면 본질적으로 파괴되며, 생성된 모든 정보도 함께 사라집니다.09:39
그 안에는 데이터가 유실될 수 있습니다. 바로 이것이 도커 볼륨이나 바인드 마운트를 필요로 하는 이유입니다.09:53
이것은 데이터를 장기적으로 유지하거나 저장하는 한 가지 방법입니다.09:57
N8N의 관점에서 볼 때, 실행 중인 N8N 인스턴스에서 워크플로우를 생성하신다면, 해당 워크플로우를 볼륨이나 바인드 마운트에 저장하시는 것이 좋습니다. 그렇게 하면 Docker 컨테이너가 삭제되어도 워크플로우를 잃지 않게 됩니다.10:01
정적 이미지로부터 컨테이너를 다시 시작하면, 바인드 마운트나 볼륨에 있는 모든 것이 로드됩니다.10:15
이 세 가지는 도커에 대해 이해해야 할 핵심 개념들입니다. 그리고 제가 언급했듯이 도커 네트워크의 경우, 컨테이너들이 서로 격리되어 있어서 서로의 내부 컨테이너를 볼 수 없습니다. 따라서 필요합니다.10:22
네트워크를 통해 통신하는데, 이게 도커에 익숙하지 않은 분들께는 어려움을 겪게 합니다. 만약 n8n을 컨테이너로 사용하고 있고, 쿼드런트나 도클레인과 통신을 시도한다면, 통신이 필요합니다.10:34
도커 서비스 이름을 덮어쓰고, 쿼드런트라고 한 다음, 포트 또는 도커 레인을 지정하고, 그 다음 포트를 사용합니다. N8N에 접속하려고 할 때는 로컬 호스트와 포트를 사용하시면 됩니다.10:46
실제로 워크플로우를 구축하기 시작하면 더 명확해질 텐데요. 중요한 것은 Docker Compose 파일이라는 개념을 이해하는 것입니다. 왜냐하면 여기서는 컨테이너 생성 과정을 조정하고 있기 때문입니다.10:58
여러 서비스에 걸쳐 볼륨을 정의하고, 지속적인 저장 계층을 설정하며, 포트와 같은 환경 변수들을 포함하여 다양한 요소들을 정의하고 있습니다.11:07
혹시 도커를 사용해 보지 않으셨다면, 도커 데스크톱 설치를 강력히 추천드립니다. 도커 데스크톱은 볼륨, 이미지, 컨테이너 등을 시각적으로 확인할 수 있는 편리한 인터페이스입니다.11:17
마지막으로, 로컬 AI 시스템 구축 및 배포에 처음이시라면 AI 코드 에디터를 꼭 사용해 보시는 것을 권장합니다.11:27
이런 기능들은 초능력을 얻게 해주고, Docker Compose 파일이나 네트워크 문제 해결에 정말 유용합니다. 컨테이너를 실행하는 데 필요한 프롬프트를 제공하여 시스템 버전 관리에 도움을 줄 수도 있습니다.11:34
리스트는 끝이 없죠. 그래서 이 프로젝트에서는 커서를 사용할 거예요. 그리고 바로 거기서 시작할 겁니다. 만약 이 영상을 즐겁게 보셨다면, 아래에 좋아요를 누르고 저희 채널을 구독해서 더 많은 딥 AI 및 N8n 콘텐츠를 받아보세요.11:47
정말 저희에게 많은 도움이 됩니다. 그래서 Cursor를 열어볼게요. VS Code나 Antigravity도 사용할 수 있습니다. 그리고 Clone Repo를 클릭해서 포크한 AI 스타터 키트 저장소의 URL을 가져올게요.11:58
그리고 저장소 목적지로 선택해 볼까요? 그리고 이제 저장소를 복제하기 시작합니다.12:09
자, 이제 시작합니다. 왼쪽에서 스타터 키트의 모든 파일을 확인할 수 있습니다.12:14
제가 말씀드렸던 Docker Compose 파일을 확인할 수 있습니다. 그 안에는 실행되어야 할 모든 서비스의 정의가 포함되어 있습니다. 레포지토리로 돌아가면 어떤 명령어를 실행해야 하는지에 대한 자세한 설명이 있습니다.12:17
저희는 이미 저장소를 복제했고, 여기서는 스타터 키트로 디렉토리를 변경하라는 요청을 받고 있습니다. 지금 여기 들어와 있습니다. 이제 환경 변수를 복사해야 합니다.12:29
그걸 그대로 옮겨 적을 수 있도록 하겠습니다. 이제 그냥 복사해서 붙여넣으시면 됩니다. Ctrl+C, Ctrl+V처럼 하시고, 파일 이름을 변경하시면 됩니다.12:38
네, 그렇게 하면 됩니다. 또는 터미널 명령어를 기준으로 터미널을 열 수 있습니다. 컨트롤 J를 누르신 후 명령어를 붙여넣고 엔터를 클릭하시면 됩니다. 그렇게 하면 복사도 됩니다. 둘 다 괜찮습니다.12:45
이 환경 변수 문서에는 몇 가지 암호화 키와 비밀번호를 설정해야 합니다. 물론 비밀번호를 생성하는 방법은 여러 가지가 있습니다. 여기 git bash에는 OpenSSL이 설치되어 있습니다.12:56
그래서 32자 길이의 키를 생성해 보겠습니다. 그렇게 하면 괜찮을 것 같고, 포스트그레스 비밀번호로 사용할 수 있을 것 같아요. 괄호 뒤의 등호는 그냥 제거할 수도 있겠습니다.13:06
네, 그리고 그냥 몇 개 더 생성해 볼게요. 이건 제 NNN 암호화 키가 될 수 있겠네요.13:14
다시 말씀드리지만, 혹시 모를 상황에 대비해서 특수 문자는 제거할게요. 그리고 다시 설명으로 돌아가겠습니다.13:18
여기 NVIDIA GPU를 사용하고 있어서, 이제 프로필 GPU NVIDIA를 전달하면서 Docker Compose up 명령어를 실행할 수 있습니다. 하지만, AMD나 Apple Silicon을 사용하신다면 사용할 수 있는 다른 프로필도 있습니다.13:22
그냥 복사해서 여기 붙여넣기 할게요. 그러면 필요한 이미지들을 다운로드해서 시스템을 실행할 수 있습니다.13:35
N8n을 불러오고 있고, Postgres는 다운로드 중이며, Quadrant은 이미 가져왔습니다. 이 작업은 꽤 오랜 시간이 걸릴 수 있습니다. 특히 Docklin은 꽤 무거운 모델을 사용하기 때문에, 여러 기가바이트의 용량을 차지할 수 있습니다.13:43
인터넷 연결이 느리시다면, 훨씬 더 오래 걸릴 수 있습니다. 하지만 결국에는 필요한 모든 이미지를 다운로드하고, 여기에서 보시는 것처럼 컨테이너를 실행하기 시작할 겁니다.13:55
저희는 자체 호스팅 AI 스타터 키트가 있고, 열어보면 Docklane, N8N, Olama, Quadrant, 그리고 Postgres를 확인할 수 있습니다. 또한, static files라고 불리는 다른 컨테이너도 하나 더 있습니다.14:04
잠시 후에 그 점에 대해 말씀드릴 텐데, 여기 여러 포트들을 보실 수 있습니다.14:15
만약 첫 번째인 Docklane, 즉 포트 5001을 클릭하시면, 로컬 호스트 포트 5001이 열립니다.14:20
지금은 세부 정보가 없다고 표시되지만, 앞에 슬래시 UI를 추가하시면 Docklane serve 애플리케이션이 나타납니다. 나머지 부분도 동일하게 적용될 것입니다. n8n의 경우 해당 링크를 클릭하시면 5678로 연결되어 설정 페이지로 이동됩니다.14:26
쿼드란트 페이지로 6333으로 이동하신 후, 슬래시(/)와 대시보드(/dashboard)를 추가하시면 대시보드로 연결됩니다. 이것이 바로 벡터 스토어이고, 포스트그레스에 UI가 없더라도 괜찮습니다. 필요하다면 UI를 만들 수도 있습니다.14:40
데이터베이스 클라이언트로 접속해서, 그 다음에 8080 포트에서 정적 파일을 제공하게 됩니다. 이렇게 하면 PDF나 워드 문서에서 추출한 이미지들을 활용하는 멀티모달 RAG 기능이 작동하게 될 것입니다.14:51
문서들은 이곳에 호스팅되어 저희 채팅방 내에서 이용 가능하게 제공될 예정입니다.15:03
이제 이 기능이 정상적으로 작동하는 것을 확인할 수 있습니다. 그룹을 클릭하시면 각 서비스에서 발생하는 모든 로그 스트림을 보실 수 있습니다. 특정 서비스의 로그 파일을 보시려면 해당 서비스 항목을 클릭해 주세요. 예를 들어, Dockling을 보시면 건강 검진 로그가 상당히 많이 기록되어 있음을 알 수 있습니다.15:07
진행되고 있어요. 이렇게 시작되었고, 문서 같은 링크들도 제공되고 있습니다. 그래서 그걸 클릭하면, 찾을 수 없는 사이트로 연결되는데, 괜찮습니다.15:22
로컬호스트를 0000 대신 추가하면 됩니다. 네, 여기 닥레인 API 문서가 있습니다.15:30
그래서 다양한 애플리케이션의 로그를 추적하는 방법입니다. 문제가 발생했을 때 트러블슈팅하거나 디버깅할 때 중요합니다. 자, 이제 포트 5678의 N8N부터 시작해 보겠습니다.15:37
그래서 여기서는 오너 계정을 설정해야 해요. 지금은 모두 로컬 환경이고, N8N 클라우드는 아니에요. 로그인을 하기 위해서는 계정을 만들 필요만 있고, 그러면 바로 워크플로우 목록으로 이동하게 됩니다.15:47
n8n 스타터 패키지에 의해 자동으로 로드되는 데모 워크플로우가 있고, 올라마 채팅이 설정되어 있습니다. 잠시 후에 다시 돌아가도록 하겠습니다. 하지만 지금은 설정으로 들어가 보겠습니다.15:58
활성화 키를 입력해야 하는 이유는 특정 기능들이 제한되어 있기 때문입니다. 예를 들어, 이전에 실행했던 내용을 고정하는 기능 같은데요, 워크플로우를 구축할 때 정말 중요한 부분입니다.16:09
만약 왼쪽 상단에 있는 'Unlock'을 클릭하시면, 이메일 주소를 입력하시면 인증 키를 보내드릴 겁니다. 이것은 완전히 무료이며, 모든 데이터는 여전히 로컬에 보관됩니다.16:19
네, 활성화되었습니다. 이제 워크플로우를 만들어 보겠습니다. 첫 번째 단계로 로컬 드라이브 트리거를 추가해 볼게요. 여기 들어와서, 잠시 치워 드리고, 아래에 '기타' 항목이 있는데 거기에 들어갈게요.16:27
저희는 로컬 파일을 확인할 수 있으므로 특정 폴더와 관련된 변경 사항을 유발하고 싶습니다. 자, 이제 RAG Ingestion 파이프라인 구축을 시작하도록 하겠습니다. 클릭해 보겠습니다.16:40
지금부터는 폴더를 감시하여 파일이 들어오는 대로 처리하고 싶습니다. 파일을 하나, 열 개, 백 개, 천 개, 어떤 개수든 넣어도 모두 처리할 수 있도록 기능을 추가해야 합니다.16:51
시청할 폴더가 필요하며, 이는 볼륨과 바인드 마운트와 관련이 있습니다. 왜냐하면 이 폴더는 지속적으로 유지되어야 하기 때문입니다. 컨테이너를 삭제했을 때 이 폴더가 사라지지 않도록 주의해야 하며, 이는 README 파일에 명시되어 있습니다.17:03
저장소(repo)를 보시면, 사용해야 할 경로 데이터가 제공되는 것을 알 수 있습니다. 따라서 그 경로 데이터를 넣어주고, 다음 단계를 실행해 보겠습니다. 파일이 실행되는지 확인해 볼게요.17:14
지금 실제로 제가 수정해야 할 사항이 하나 있습니다. 그래서 잠시 듣는 것을 멈추고 폴링 방식을 사용해야 합니다. 어떤 이유인지 제 로컬 시스템에서는 폴링을 사용하지 않으면 작동하지 않아서요.17:25
그 단계를 바로 실행하신 후 커서가 다시 돌아오면 도커 컴포즈로 이동하여, n8n 서비스 아래에 보시면 볼륨이 어떻게 설정되어 있는지 설명드리겠습니다.17:35
지정된 항목과 바인드 마운트가 있어서, 이 디렉터리에 해당하는 공유 디렉터리가 컨테이너 내의 n8n에 저희가 입력했던 'data shared'에 매핑되어 있음을 확인하실 수 있습니다.17:46
자, 이제 여기 파일을 하나 만들게요. 파일 하나 추가해서 새로 'test.txt'라고 만들어보면, 보이듯이 바로 나타납니다. 'data shared test.txt'가 되고요. 지금은 내용이 비어 있지만, 그냥 보여드리기 위해18:00
그게 작동하는지 증명해보도록 하겠습니다. 좋아요, 그거 삭제하고요. 저희가 만든 Docker Compose 버전 안에 'rag files'라는 폴더를 만들었습니다.18:13
그래서 처리하고 싶은 파일을 여기에 모두 넣을 수 있습니다. rag 파일 아래에 'pending'라는 새 폴더를 만들어 보겠습니다. 그리고 'processed' 폴더도 하나 더 만들어 볼까요.18:21
파일을 조정하고 처리된 폴더로 옮길 수 있습니다. 자, 이제 N8N을 업데이트하거나 실행해 보겠습니다. 이제 공유된 rag 파일 보류 경로에 추가된 파일을 찾고 있습니다.18:32
데이터 공유된 래그 파일 대기 중입니다. 그리고 다시 실행해 보고, 실제 처리할 수 있는 PDF 파일을 가져와서, 인트로에서 보여드렸던 것, 즉 이 위상 회전기 냉장고 사양 시트를 사용해 보겠습니다. 페이지 하나 뿐입니다.18:44
페이지이므로, 파이프라인을 구축하기에 좋은 테스트 환경이 될 거예요. 제가 임시 폴더를 여기 두었으니, PDF 파일을 그 폴더에 그냥 드래그해볼게요. 제가 이 로컬 파일을 가지고 있어서, 트리거가 실행되었고 파일이 나타나기를 기다리고 있었는데, 이제 완료되었네요. 자, 이제 좋은 팁은 그 데이터를 고정하는 거예요.18:58
그럼 이제 트리거가 실행되었고, 파일이 나타나기를 기다리고 있었는데, 바로 그렇게 되었네요. 자, 이제 좋은 방법은 그 데이터를 핀 하는 거예요.19:09
노드에 있는 P를 클릭하면 이제 워크플로우 실행을 클릭해도 파일을 계속 폴더에 드래그할 필요가 없어요. 그 데이터는 항상 거기에 있어요. 다음으로는 이 파일을 실제로 불러와 볼까요.19:17
플러스 버튼을 클릭하고 'read'라고 입력하면 디스크에서 이 파일을 읽어들입니다. 바로 저 파일이네요. 그리고 이제 이 파일의 경로를 지정해야 합니다. 경로는 저기 있습니다.19:28
그냥 드래그해서 넣고, 이제 실행 단계 버튼을 누르면 이진 파일이 나타납니다.19:38
열어보면 알 수 있듯이, 이제 파일을 가지고 실습해 볼 수 있게 되었네요. 다음 단계로는 이 파일을 Doclin에 보내서 마크다운이나 JSON 형태의 구조화된 정보를 추출해야 합니다.19:41
혹시 도커 컴포즈로 돌아가서 보면은 독린이 5001번 포트에 있는 것을 볼 수 있어요. 그래서 그걸 클릭하고 또 앞으로 슬래시 ui로 가면 독린이 자체 인터페이스를 제공하는 것을 볼 수 있는데, 우리는19:53
API 문서에 접근하려고 하는 거니까, 슬래시 docs를 통해서 할 수 있어요. 그럼 이제 어떤 API를 호출해야 할지 알아내야겠죠. 이 파일을 변환하려고 하고 있어요.20:05
파일을 처리하고 싶습니다. 지금 두 가지 방법이 있습니다. 파일을 비동기적으로 처리할 수도 있고, 동기적으로 처리할 수도 있습니다. 둘 다 보여드리겠습니다.20:14
자, 동기식 처리로 진행해 보겠습니다. 다시 말해서, 응답을 기다려야 합니다. 그리고 우측 상단에서 확인하실 수 있듯이, 접속해야 할 경로가 있습니다. 해당 경로를 복사해서 여기로 가져오겠습니다.20:23
HTTP 요청 노드를 사용해 보겠습니다. 이 엔드포인트로 POST 요청을 보내는 거죠. 자, 여기서는 로컬호스트가 언급되어 있는데, 이게 잘못된 겁니다. 잠시 후에 그 이유를 보여드릴게요. 기본적으로 이 파일을 이 엔드포인트로 전달해야 합니다.20:33
바디(body) 쪽에서 파일을 전송할 건데요, 이진 파일 형태로 전송할 예정입니다. 이 부분은 'nnn' 이진 파일로 하거나, 제가 사용할 방식인 폼 데이터(form data)를 이용할 수도 있습니다. 다시 돌아가서…20:47
문서화 자료를 보시면 이 기능은 'files'라는 파라미터를 필요로 하며, 이는 이진 파일들의 배열입니다. 따라서, 해당 부분을 복사해서 여기 붙여넣고, 값은 'data'로 설정한 후 남겨두겠습니다.20:58
잠시처럼 그렇게 두고, 음, 그럼 이것은 일단 저장하고, 이제 워크플로우를 실행하면 예상대로 오류가 발생합니다. 서비스 연결을 거부한다고 하면서요. 문제는 이 로컬 호스트에 있습니다. 여기서 도커 네트워크 다이어그램을 다시 보면 무슨 일이 일어나는지 확인해 볼 수 있습니다.21:12
이 n8n 컨테이너가 dockling과 통신을 시도하고 있는데, localhost를 사용하고 있습니다. 그런데 localhost는 기계 또는 컨테이너 내로 제한되어 있기 때문에, localhost 5001로 접속을 시도할 때 문제가 발생하는 것 같습니다.21:27
컨테이너 내부를 실제로 검색해야 하므로, Dock Lane의 포트 5001번으로 접속해야 합니다. 그렇게 해야 더 넓은 Docker 네트워크를 통해 파일을 전달할 수 있습니다. 잠시 이 부분을 변경해 보겠습니다.21:40
Dock 레인을 찾은 다음, '실행' 단계를 클릭했는데, 지금은 다른 오류가 발생했습니다. 다행입니다. 진전이 있는 것 같습니다. 요청이 유효하지 않다고 하는데, 문제는 제가 파일을 전달하는 대신 문자열을 전달하고 있다는 것입니다. 파라미터 유형이 잘못된 것 같습니다.21:51
NNN 바이너리 파일로 이걸 변경해야 하고, 그리고 데이터를 다시 넣으면 됩니다. 그리고 다시 실행해 볼까요. 자, 응답이 있습니다.22:04
생각하고 있었다는 사실 자체가 파일을 실제로 처리하게 만들었기 때문입니다. 그래서 두 개의 다른 엔드포인트가 존재하는 것입니다.22:15
응답을 기다리는 동기화 엔드포인트가 있습니다. 아니면 여기를 비동기로 설정하면 작업 ID를 돌려주고 결과를 폴링할 수 있습니다. 잠시 그 부분은 넘어가도록 하겠습니다.22:21
그리고 여기 데이터들을 살펴보시면 이미지 데이터가 많이 있습니다. Base64로 인코딩된 이미지 데이터이고, 마지막에는 문서의 실제 텍스트도 가지고 있습니다. 따라서, 자료를 살펴보시면...22:32
API 문서를 살펴보시면 다양한 파라미터를 전달할 수 있다는 점을 알 수 있습니다. 그리고 docline은 API 엔드포인트와 함께 상당히 포괄적이고 유연합니다. 따라서 이미지 내보내기 모드가 다음 단계입니다.22:45
네, 하나 더 넣어서 실제로 여기다 추가해 보겠습니다. 이 항목은 이제 텍스트로 설정하겠습니다. 이진 파일이 아니라요. 그리고 플레이스홀더를 선택하신 후 다시 실행하시면, 결과를 보실 수 있습니다.22:55
문서가 처리되었지만, 이미지 파일이 있는 부분은 '이미지'라고만 표시되어 있습니다. 이는 임시 자리 표시자일 뿐, 실제 이미지가 누락되었고 추출되지 않았습니다. 따라서 '참조'로 변경하는 것이 좋겠습니다. 왜냐하면…23:07
저장될 거예요, 여기 보시는 것처럼 디스크에 이미지 파일이 저장됩니다.23:19
이제 실제 이미지 파일 이름이 나왔고, 왼쪽의 커서를 보시면 '덕링 스크래치'라는 폴더가 있습니다. 열어보시면 추출된 모든 이미지들을 보실 수 있습니다.23:24
그 PDF 파일과 그 '참조' 플래그가 하는 일은 바로 그것입니다.23:36
이미지를 Base64 문자열로 제공하는 대신 컨테이너에 저장하는데, 이것은 제가 Docker Compose 파일을 설정한 방식 덕분에 가능합니다. 닥클린 구성에서 작업 디렉토리를 설정했습니다.23:39
이 공유 폴더에 설정해 두었으며, 다양한 환경 변수에도 적용했습니다.23:52
그리고 이 공유 폴더는 Docklin과 N8N 모두에게 접근 가능하기 때문에, 이제 N8N이 해당 파일들을 가져와 다른 위치로 이동시켜 저희가 이를 제공하는 데 활용할 수 있게 되었습니다.23:57
채팅 응답으로 이어지는데, 이로 인해 제가 설정한 정적 파일 컨테이너가 필요하게 됩니다. 도커 컴포즈에서는 간단한 Nginx 서버 정도로 생각하시면 됩니다. 이 서버는 간단하게 파일을 제공하는 역할을 합니다.24:08
특정 폴더가 있고, 보시는 것처럼 8080 포트에서 실행되고 있습니다. 이 포트를 클릭해보시면 dockling scratch 및 rag 파일들이 있는 것을 확인하실 수 있습니다. 이제 추출된 이미지를 생성해 보겠습니다.24:19
폴더를 만들고, 그 안에 모든 이미지를 넣어보겠습니다. 그리고 나서 다시 여기 돌아와서, '공유' 아래에 '추출된 이미지'라는 새 폴더를 만들게요. 다시 여기 돌아와서 새로고침하면 '추출된 이미지' 폴더가 보일 거예요. 아마 Nginx 서버를 이 폴더로 제한하는 것이 좋겠네요.24:31
볼륨을 확인해보니, 공유된 부분이 실제로 접근 가능하다는 것을 알 수 있습니다.24:45
네, 그렇다면 이 부분을 좀 더 확실하게 정리해 보겠습니다. 네, 현재 공유된 이미지 추출이 완료되었고, 이제 제가 할 일은 이 정적 파일 컨테이너를 삭제하고 다시 만드는 것뿐입니다. 그러면 서버 구성에 따라 다시 빌드될 겁니다.24:48
이것이 도커의 아름다움입니다. 여기 정적 파일들을 가져와서 삭제하고, 이제는 이미지 재구축만 해주면 됩니다. 아래쪽을 보시면 다양한 로그들을 계속 받고 있는 것을 확인할 수 있습니다.25:00
실행 중인 서비스들이 있기 때문에, 디테치 모드로 실행해야 합니다. 만약 Ctrl + Z를 누르시면 모든 컨테이너가 중단됩니다. 이제 하나 변경해 보겠습니다. 위쪽 화살표를 누르시면 이전에 실행했던 명령어가 나타납니다. 그리고 앞으로 슬래시 d를 입력하면 진행됩니다.25:11
분리 모드에서 백그라운드로 실행해주세요. 그냥 엔터 키를 누르시면 모든 컨테이너들이 재시작되고, 새로운 설정으로 파일 서버 컨테이너도 다시 빌드됩니다. 좋습니다. 자, 이제 인덱스로 돌아가서 새로고침을 해보면, 멋지네요.25:25
이제 해당 폴더 안에는 아무것도 남아 있지 않습니다. 저희도 그 폴더에 제한이 걸려 있습니다.25:39
네, 그럼 다시 N8N으로 들어가 보겠습니다. 새로고침을 해보면, 컨테이너들을 모두 제거하고 다시 추가했음에도 불구하고 워크플로우가 그대로 남아있는 것을 확인할 수 있습니다. 이는 저희가 N8N 볼륨을 따로 설정해 놓았기 때문입니다.25:44
네, 그럼 지금 다시 한번 실행해 보겠습니다. 문서가 다시 처리되었고, 마크다운 내용과 이미지 이름을 확인할 수 있습니다. 그리고 도킹 스크래치 아래 커서를 이동하면 이미지를 직접 확인할 수 있습니다.25:55
다음으로는, 추출된 이미지 폴더에 이 이미지들을 옮겨야 합니다. 그래야 인공지능 에이전트 챗에서 이미지들을 제공할 수 있습니다. 따라서, 이 모든 것들을 추출해야 합니다.26:07
네, 보통 n8n을 사용할 때처럼 다양한 방법으로 진행할 수 있습니다. 제가 할 작업은 이 전체 출력을 복사하는 건데요. 선택한 내용을 복사해서 Opus 4.5에서 커서를 가져다 놓겠습니다.26:19
그래서 저는 Cursor에게 이 일을 그냥 시켜서, 이미지 이름들의 배열을 추출하는 코드 노드를 만들도록 할 수 있습니다.26:31
이미지 이름 목록을 추출하는 JavaScript 코드를 작성해 주실 수 있나요? 그리고 여기 제 JSON 입력 구조가 있습니다. 그냥 복사해서 붙여넣겠습니다.26:39
그리고 여기 코드 노드 뼈대를 드리는 것도 중요합니다. 그러니까, 여기 코드 노드를 추가해 봐요.26:47
저는 자바스크립트를 사용해서 이것을 그대로 복사해서 사용할 예정입니다.26:55
지금은 이 특정 판본이 꼭 필요하지 않으시니 삭제하셔도 괜찮습니다. 네, 그 부분을 복사해서 여기에 붙여넣고, 채팅으로 결과만 출력해주시면 됩니다. 파일은 만들 필요 없으니 바로 진행하겠습니다.26:58
그리고 이것이 중요한 이유는 AI가 들어오는 데이터 구조는 물론이고 코드 노드의 기본 뼈대까지 이해해야 하기 때문입니다. 그렇지 않으면 이해하지 못할 수도 있기 때문입니다.27:11
N8N 자체이든, 아니면 N8N에서 입력 항목의 구조이든, 코드를 복사해서 사용하는 건 정말 괜찮은 방법입니다. 자, 코드를 만들어 볼까요? 복사해서 여기 붙여넣겠습니다. 그런데, 그 전에...27:20
네, 진행해 보겠습니다. 혹시 이 부분은 고정해두면 Dock Lane을 계속해서 활성화할 필요가 없을 것 같아요. 그리고 이제 단계를 실행해볼까요? 네, 좋습니다. 이미지 이름이네요. 바로 그거예요. 이제 분리할 수 있겠네요.27:33
이 배열을 분리해서 빠르게 진행해 보겠습니다. 이미지 이름 배열을 입력해서 실행하면 개별 이미지를 얻을 수 있고, 이제 이 파일을 이동시켜야 합니다.27:43
지금 이 doclin 스크래치 폴더를 저희의 정적 파일 Nginx 서버로 옮겨야 합니다. 안타깝게도 로컬 파일을 사용하기 위한 이동 노드는 현재 없습니다. 따라서 실행 명령어를 사용하여 작업을 진행하겠습니다.27:56
그러니 명령어를 입력하시면, 쉘 명령어를 실행할 수 있습니다. 지금은 한 번만 실행하는 대신, 모든 파일에 대해 실행하도록 설정할 예정입니다. 만약 CLI 명령어 사용법을 잘 모르신다면, 언제든지 다시 질문해 주세요.28:10
커서, 기본적으로는 이동을 의미하는 mv입니다. 그래서 이 파일을 이동시키고, 이제 파일 경로도 알아내야 합니다. 다시 커서로 돌아가시면, 공유 닥클링 스크래치 안에 위치하고 있습니다.28:21
이것은 트리거와 동일하기 때문에 데이터 아래에 위치합니다. 그리고 이 모든 설정은 도커 컴포즈 내에서 이루어지기 때문에, 로컬 파일 트리거를 사용할 때 데이터 공유 폴더 아래를 확인하게 됩니다. 결국 동일한 경로를 사용합니다.28:35
그리고 그 이유는 바인드 마운트가 데이터 공유 영역에 반대하기 때문입니다. 공유되지 않은 영역이 아니에요, 괜찮습니다. 이제 이 파일을 데이터 공유 문서 스크래치로 옮기려고 하는데, 파일 이름이 바로 그것이고, 이제 옮겨 보겠습니다.28:46
추출된 이미지 데이터가 공유되었고, 추출된 이미지가 준비되었네요. 이것으로 충분할 것 같습니다. 자, 이제 실행해 보겠습니다. 워크플로우가 성공적으로 완료되었고, 커서를 확인해 볼까요? 파일 새로고침을 하겠습니다.28:58
네, 디렉터리입니다. 모든 이미지가 추출된 이미지 폴더 아래에 저장되었습니다. 이제 브라우저로 이동하거나 정적 파일 디렉터리로 이동하면 이미지를 확인할 수 있습니다. 그리고 클릭해 보시면...29:12
그 안에는 우리 소용돌이 이미지가 있고, 그리고 다이어그램들도 훌륭합니다. 아마 이 프로젝트 전체에서 가장 어려운 부분은 실제로 이미지를 추출해서 사용할 수 있도록 만드는 것이 아닐까 합니다.29:24
인공지능 에이전트로 넘어가서, 다음 단계는 이 문서를 쿼드런트에 가져오는 것입니다. 그래야 벡터 검색을 수행할 수 있습니다. 여기 마크다운 내용을 확인할 수 있습니다.29:35
지금 이 지점에서 분리해 보겠습니다. 이미지를 이동시키는 이 아이디어는 본질적으로 병렬로 수행될 수 있습니다. 새 노드를 추가해 보겠습니다. 쿼드런트를 검색해 보면, 여기 쿼드런트가 있습니다.29:46
벡터 스토어에 문서를 추가할 건데요. n8n 스타터 키트에 로컬 쿼드런트 데이터베이스가 이미 설정되어 있거든요. 혹시 작동하지 않는 것 같으니, API 키가 필요 없을 것 같아요. 삭제하고 쿼드런트 URL로 다시 돌아가 볼까요? 여기에서 얘기했던 동일한 내용입니다. 서비스 이름으로 이 URL을 참조해야 해요.29:57
이걸 서비스 이름으로 참조해야 합니다.30:07
그리고 이건 우리가 접속해야 하는 정확한 호스트 주소예요. 이걸 사용해 봐요. 쿼드런트 URL이 있고, 저장 버튼을 누르니 성공했어요. 로컬 AI 구현의 경우,30:19
일반적으로 API 키가 필요하지 않아요. 물론, 네트워크 내에서 잠금 기능을 추가하고 싶다면 API 키를 설정할 수도 있겠죠. 아직 컬렉션이 없으니 쿼드런트로 들어가 봐야겠네요. 다시 Docker로 돌아가 볼까요.30:30
이것이 바로 해당 사분면이고, 사분면은 앞으로의 슬래시 대시라고 하겠습니다. 좋습니다. 이 자리는 사분면 벡터 저장 공간입니다. 컬렉션을 클릭하면 새로운 컬렉션을 추가할 수 있고, 그러면...30:42
이것을 멀티모달 RAG라고 부르고 계속 진행하겠습니다. 그러면 사용 사례가 무엇인지 묻는데, 여기서는 그냥 전역 검색만 활용하고 있습니다. 사용자별 문서는 전혀 없다고 보시면 됩니다.30:55
여기서는 포인트를 위해 간단하게 단일 밀집 벡터 임베딩을 사용하겠습니다. 하이브리드 검색을 사용해도 괜찮습니다. 이제 차원을 선택해야 하는데, 몇 가지 옵션이 있습니다. 로컬을 사용하고 싶습니다.31:06
임베딩 모델을 사용하고 있는데, 제가 보통 사용하는 것은 노믹 임베드 텍스트입니다. 이 모델은 올라마에서 사용 가능하며, 노믹 웹사이트에 방문하시면 이 임베딩의 차원 수를 확인할 수 있습니다.31:16
모델을 설정할 때, 버전 1.5의 경우 최상의 품질의 임베딩을 얻기 위해 가능한 가장 높은 차원 수를 사용하겠습니다. 따라서 768을 입력하고 코사인 유사성을 활용할 예정입니다.31:27
알고리즘을 활용하여 가장 유사한 벡터들을 찾고, 계속 버튼을 클릭한 후 완료 버튼을 클릭하겠습니다. 자, 이제 사분면 벡터 저장소 또는 컬렉션이 기본적으로 설정되었습니다.31:39
자, 그럼 다시 n8n으로 돌아가서 이제 선택할 수 있을 거예요. 잠시 저장하고 다시 들어가 보겠습니다. 여기 있어요, 멀티모달 RAG, 더 이상 설정할 건 없을 것 같아요.31:51
자, 이제 임베딩 모델을 위해 노믹 텍스트 임베드를 선택해야 합니다. 올라마를 사용해야 하고, 다시 올라마에 대한 자격 증명을 지정해야 합니다. 따라서 편집을 클릭하시면 로컬 호스트를 찾고 있는데, 여기서는 또다시 말이 안 됩니다. 서비스 내의 서비스 이름을 사용해야 하기 때문입니다.32:01
도커 네트워크는 올라마로 설정되어야 하고, API 키는 다시 필요 없으니 삭제해도 됩니다. 그리고 재시도 버튼을 누르면 초록색 메시지가 나타나니, 저장하고 모델을 다시 로드하면 됩니다.32:16
바로 그러지는 않았으니, 그냥 나가서 다시 들어가도록 합시다. 자, 이렇게 하면 라마 3.2만 사용하게 됩니다. 저희 olama 시스템 내부에 nomic text embed 모델이 필요하기 때문입니다. olama로 다시 돌아가 보겠습니다.32:27
보시는 것처럼 사용할 수 있는 명령어가 있습니다. 'olama pull nomic embed text'인데, 이걸 복사해서 실행(exec)으로 들어가시면 컨테이너 내에서 명령어를 실행하실 수 있습니다.32:39
혹시 마우스 오른쪽 버튼을 클릭해서 붙여넣으면, Nomic Embed Text Model이 이 컨테이너로 불러와지고, Olama를 위해 볼륨이 마운트될 것입니다. 이렇게 컨테이너를 삭제하더라도요.32:52
만들어 볼게요. 이제 nomic embed text를 다시 가져올 필요가 없으니, 그걸 실행할게요. 자, 모델이 다운로드되고 있네요. 잘 됐어요. 이제 n8n으로 돌아와서요.33:04
임베딩으로 다시 들어가서요, nomic embed text 최신 버전이네요. 여기 클릭하고 저장할게요. 그리고 문서에 문서 파서나 문서 로더를 연결해야 해요. 자, 여기 있어요.33:15
일반적으로는 간단한 것을 잘 사용하지 않고, 커스텀 설정을 선호합니다. 그래서 커스텀으로 설정하고, 재귀적인 문자 분할기를 추가할 예정입니다. 보통은 마크다운을 분할 코드로 지정해서 사용합니다.33:27
문서의 구조를 어느 정도 유지하면서, 분할되는 부분들을 그대로 두고, 덩어리 크기를 조금 줄여서, 예를 들어 700 정도로 하는 건 괜찮을 것 같습니다. 지금은 상태가 괜찮아 보입니다.33:39
자, 이제 이것을 연결해 보겠습니다. 잠시 이 부분은 제거하고, 벡터 저장소 측면이 어떻게 작동하는지 확인해 볼게요. 다시 워크플로우를 실행해 보겠습니다. 좋아요. 그러면...33:50
사분면 벡터 저장소에 주입되었고, 사분면으로 들어가서 컬렉션을 클릭하시면, 벡터 저장소 안에 현재 19개의 포인트가 있음을 확인하실 수 있습니다. 다양한 항목들을 보실 수 있습니다.34:01
임베딩이 있어서, 이미지 URL이 있고, 테이블이 있습니다. 모델 크기, 제품 크기 같은 것을 모델링할 때 쿼드란츠 내에 좋은 시각화 기능이 있습니다. 시각화를 클릭하면34:11
제한을 초과해서 실행하면 포인트가 어떻게 분포되어 있는지 보여줍니다. 하나의 문서만으로는 큰 의미는 없지만, 더 많은 문서를 로드하면 어떻게 분포되어 있는지 확인할 수 있습니다. 그래프도 있어서 꽤 멋지네요. 두 번 클릭하면34:23
이제 주변의 다른 요소들도 불러와서 벡터 스토어에 저장하겠습니다. 데이터가 벡터 스토어에 저장되었으니, 이제 다시 n8n으로 돌아와서 연결해 보겠습니다. 그리고 이제 만들겠습니다.34:37
저희가 실제로 대화할 수 있는 AI 에이전트를 만들 수 있습니다. 플러스 버튼을 클릭해서 채팅 트리거를 추가하고, 바로 그 에이전트인 AI 에이전트를 추가해 보겠습니다. 이제 모델을 추가해야 합니다. 다시 한번요, 저희는...34:49
올라마를 사용할 예정인데, 완전히 로컬에서 실행되어야 합니다. 로컬 올라마 서비스가 지정되었고, 기본적으로 이 n8n 자체 호스팅 AI 시스템에 포함된 라마 3.2를 선택했습니다. 그래서, 저희는...35:01
그것을 지금 저장해 주세요. 아주 작은 모델이기 때문에 엄청난 수준의 지능을 기대하기는 어렵겠지만, 시연을 하는 데는 충분할 수도 있습니다. 도구로서 말씀드릴 때요.35:13
벡터를 저장할 사분면을 선택해 보겠습니다. 자격 증명에 대한 설명은 이미 지정되어 있으니, 이 정보를 이용하여 지식 기반에서 정보를 가져오도록 설정하고, 그다음에 선택하겠습니다.35:24
저희 컬렉션을 제한해서 다섯 개만 가져가도록 하겠습니다. 저장해 드릴게요. 저희는 임베딩 모델이 필요합니다. 여기에서 가져와야겠죠. 그렇지 않으면 비교가 제대로 안 될 테니까요.35:34
음, 마치 제가 사업을 시작할 것 같은데요. 아주 간단한 시스템 프롬프트를 설정해 볼 수 있을 것 같아요. 저는 쿼드런트 벡터 스토어를 사용하여 정보를 가져오라고 말할 겁니다. 사실 좋은 팁은...35:46
시작점을 기준으로 삼는다면 질문과 답변 체인의 프롬프트를 추가하는 것입니다. 그래서 이것을 열어보면 시스템 프롬프트 템플릿을 확인할 수 있는데, 꽤 좋은 시작점이 될 수 있습니다. 기본적으로 이렇게 말합니다.35:56
네, 허구는 만들지 말아요. 이걸 사용하는 게 좋겠어요, 알겠습니다. 자, 이제 질문을 해볼까요? 혹시 서랍 개방 다이어그램을 보여주시겠어요? 시도해 봐야겠네요. 아, 하나만 더 추가해야 할 것 같아요.36:08
알겠습니다. 검색 결과에 제공된 URL을 이용해서 마크다운 형식으로 이미지를 출력해야 하는 시스템 프롬프트라는 것을 이해했습니다. 한번 해보겠습니다. 예를 들어, 서랍 개방 다이어그램을 보여주시겠어요? 한번 살펴봅시다.36:19
어떻게 진행되는지 볼게요. 쿼드런트 벡터 스토어가 트리거되었고 응답도 받았어요. 하지만 제가 보기에는 이미지가 없네요. 모델 크기 문제일 수도 있고, 정확히 말씀드리자면,36:31
instruction following에 최적화되어 있지 않은 것 같아요. 너무 작으면요. 다시 시도해 볼게요. 이번에는 이미지가 보이네요. 하지만 링크가 깨졌어요. 한번 빠르게 살펴볼까요? 그냥 오른쪽 클릭을36:45
네, 확인해 보겠습니다. 아직 전체 경로를 벡터 저장소에 추가하지 않았으니, 잠시 닫고 다시 인제스트 흐름으로 돌아가서 주입해야 할 것 같습니다.36:56
지금 전체 URL을 넣어두셨네요. 그런데 이미지 경로가 Llama 3.2가 생성한 것보다 훨씬 더 길어진 것 같습니다. 모델 업그레이드가 필요하다고 생각합니다만, 아무튼 전체 URL을 반드시 포함해야 할 것 같습니다.37:09
경로를 따라 하겠습니다. 여기 코딩 노드를 하나 더 추가하고, 똑같이 다시 한번 만들어 보겠습니다. 이 노드를 복사해서 클라우드로 가져올게요. Opus입니다. 새로운 채팅을 생성하겠습니다. 항상 깔끔하게 정리해두는 게 좋으니까요.37:20
새로운 채팅을 시작하면 커서가 계속 깜빡이며 채팅이 계속 이어지고 이어지는 경향이 있습니다. 그리고 답변의 품질이 저하되고, 문맥이 손상되는 등의 문제점들이 발생합니다. 이러한 부분을 개선해주시면 감사하겠습니다.37:30
네, 이미지의 전체 URL을 출력 md 콘텐츠에 주입하는 자바스크립트 코드를 말씀하시는군요. 예시로 전체 URL이 이렇게 됩니다. 이제는 제 Nginx 파일 서버 설정 파일입니다. 이것이 전부입니다.37:40
음, 기본적으로 로컬호스트 8080이고, 다시 한번 말씀드리면, 저희의 자바스크립트 스켈레톤을 여기 넣어서, 일단 실행해 보겠습니다. 아마 이미지 파일을 찾아서 URL에 주입하는 정규식 패턴일 겁니다.37:53
매칭이 됐고, 시작할 수 있겠네요. 자, 이제 이걸 복사해서 여기 붙여넣고 실행하면 됩니다. 네, http localhost네요. 이게 전체 이미지 URL이고, 브라우저에 붙여넣어서 잘 작동하는지 확인해 볼까요. 아주 좋습니다.38:05
좋아요, 이제 쿼드란트에서 모든 걸 삭제하고 파일을 다시 가져오겠습니다.38:18
쿼드런트 안에서 들어가서 모든 걸 삭제할 수 있어요. 이것은 꽤 번거로워요. 그래서 쿼드런트 컬렉션을 삭제하고 다시 만들 수 있도록 이 엔드포인트를 호출해 봅시다.38:23
이렇게 하면 벡터를 매번 수동으로 컬렉션을 만들 필요 없이 빠르게 정리할 수 있습니다. 자, 이 엔드포인트입니다. 다른 HTTP 요청 노드를 하나 더 추가해 보겠습니다.38:32
이게 뭐죠? 이건 삭제하는 방법입니다. 컬렉션 이름인 멀티모달 래그를 입력해야 합니다. 물론 로컬 호스트를 연결하는 거죠. 쿼드런트가 있어야 합니다. 삭제되었고, 새로고침하면...38:43
분명히 파괴적이기 때문에 시스템을 실제로 구축할 때에만 사용해야 합니다. 좋습니다, 이것을 복사하겠습니다. 이제 '컬렉션 생성'으로 바꿨습니다. POST 요청을 보내야겠네요.38:57
알겠습니다. 그러면 보기 좋게 컬렉션을 만들고, 그다음에 이 바디를 전달해야 하는데, 이걸 복사해서 붙여넣으시면 됩니다. 아, 그리고 방금 뭐라고 했죠? 768 실행했는데, 안 됐네요.39:09
아, 이건 게시물이 아니라 푸시입니다. 자, 잘 됐네요. 좋아요. 이제 다시 실행 가능하게 됐네요. 자, 이제 제대로 실행해 보겠습니다. 커서로 다시 돌아가서, 이미지들을 삭제해 드릴게요.39:21
네, 좋습니다. 자, 이제 Dock Lane으로 옮겨졌고, 이미지를 다시 추출하기 시작했어요. 새로고침하면... 네, 바로 나타났네요. 새로고침했습니다. 19개, 완벽하네요. 벡터를 살펴보면 이 항목이 있습니다.39:33
이제 전체 URL이 완성되었어요. 자, 이제 이 에이전트에게 같은 질문을 해보고 더 나은 답변을 얻을 수 있는지 확인해 볼까요? 솔직히 모델이 충분히 크지 않아서 전체 URL을 안정적으로 출력할 수 없을 것 같아요.39:45
아, 실제로 됐네요. 자, 됐어요. 멋지네요. 멀티모달 RAG입니다. 그리고 아주 작은 모델을 사용하고 있어요. 라마 3.2인데, 30억 개의 파라미터로 구성된 모델이 여기 설치되어 있습니다.39:58
정말 인상 깊네요. 이미지 URL을 정확히 출력하고 벡터를 호출해내는 걸 보고 말이죠.40:10
저도 작은 언어 모델을 사용해 본 경험이 있는데, 도구를 제대로 활용하는 것조차 어렵더라구요. 물론, 이 정확히 동일한 질문을 열 번 정도 실행한다면 이미지를 생성하는 데 어려움을 겪을 수도 있겠지만요.40:15
정확하게 열 번 시도해 봐야 하는데, 사실 좀 더 큰 모델이 필요해서 조금 더 신뢰성이 있을 것 같아요. 여기 메모리도 할당되지 않았고, 그래서 새로고침할 때마다 매번 새로 시작하는 거죠. 네, 잘 됐어요. 아주 훌륭하네요. 말씀드린 것처럼,40:28
지금 그래픽 카드가 없더라도 클라우드에 오픈 소스 모델을 연결해서 이 모든 기능을 실행할 수 있어요. 한번 해보죠. 다시 돌아와요.40:43
올라마 챗 모델을 이용해서 새로운 자격 증명을 만들어 보겠습니다. 지금은 올라마닷컴을 선택해 볼게요. 올라마닷컴에 접속해서 계정을 만드신 후, API 키로 가시면 새로운 API 키를 생성할 수 있습니다. 자, 이것은요...40:52
자세한 내용을 확인해서 키를 생성하고, 복사해서 여기 붙여넣은 다음 저장 버튼을 누르면 성공 메시지가 나올 것입니다. 이제 모델 목록이 훨씬 더 커진 것을 볼 수 있습니다.41:08
클라우드 모델을 사용하게 될 텐데요, RTX 4090으로 실행할 수 있을 만큼 적절한 크기의 GPT OSS 200억 파라미터 모델을 사용해 보겠습니다. 저장하고, 다시 한번 같은 질문을 해 보겠습니다.41:18
질문이 있습니다. 지금은 권한이 없다고 떴네요. 물론 API 키를 잘못 넣은 것 같습니다. 아, 제가 확인해보니 제대로 통과가 됐네요. 음, 혹시 HTTPS로 접속해야 할까요? 한번 시도해볼게요. 새로 고쳐보겠습니다. 어, 괜찮네요. 작동하는 것 같습니다. 제가 한 건…41:32
새로운 API 키를 생성했는데 작동하네요. 정확히 왜 작동하는지는 잘 모르겠지만, 작동하는 것처럼 보이기에 이제 GPT OSS 200억 모델을 선택할 수 있습니다. 네, 질문을 하면 답변을 받을 수 있습니다.41:43
네, 좋습니다. 그럼 도구들을 다시 연결해 보겠습니다. 채팅 내용은 정리하고, 혹시 가구 열림 다이어그램 보여주실 수 있나요? 그리고 GPT OSS 200억 모델은 알라마 클라우드에서 정말 빠르네요.41:56
네, 저희는 캐비닛 다이어그램을 구해서 테스트해 볼 겁니다. 다른 PDF 파일을 이용해서 시험해 보겠습니다. 지금 이 로컬 파일 트리거를 고정 해제하고 워크플로우를 실행할게요. 이제 이 폴더에 새로운 파일이 들어오는 것을 감지하고 있습니다.42:08
네, 그럼 이 문서를 처리하도록 하겠습니다. 사용자 설명서인데 112페이지 분량입니다. 아직 대기 중이네요. 잠시 보류 폴더에 넣고, 완료된 파일은 옮겨야 할 것 같습니다.42:19
프로세스 폴더를 다루어야 할 것 같습니다. 우선 이걸 먼저 넣도록 하겠습니다. 그리고 Dock Lane API에 연결하는 건데, 비동기 처리가 훨씬 더 적절할 것 같아요. 왜냐하면 이 부분은 꽤…42:31
파일 크기가 커서 다시 구현할 수 있을 것 같습니다. 지금 기계에서 팬 돌아가는 소리가 들립니다. 표준 파이프라인에서도 AI 모델을 사용하기 때문에 그렇습니다. 112페이지 분량을 처리하는데 46초가 걸렸습니다.42:42
꽤 괜찮은 것 같아요. 지금 임베딩 과정을 처리하고 있고, 269개의 이미지를 Nginx 파일 서버로 옮기고 있습니다. 네, 모든 이미지가 다 있네요. 자, 이제 질문을 해 봅시다.42:55
얼음과 물 공급 장치를 사용하는 방법을 보여주시겠어요. 네, 사용 설명이 나오고 있습니다.43:08
네, 이미지가 나오고 있습니다. 아주 좋아요. GPT OSS 20비트는 그런 표 형식으로 출력하는 경향이 있는데, 채팅 인터페이스에서는 잘 작동하지 않네요. 어쩌면 시스템 프롬프팅을 통해 그런 출력을 막으려고 시도해 볼 수도 있겠네요. 일단은 아무거나 해보죠.43:13
네, 모델이 학습되는 방식에 따라 달라지겠지만, 이미지 데이터를 얻게 되는 것을 확인할 수 있어서 좋습니다. 아마클라우드는 제한된 수의 오픈 소스 모델만 제공하지만, OpenRouter를 한번 시도해 보겠습니다.43:28
다양한 모델과 출력 형식을 미리 경험해 보고, 테스트를 진행하면서 어떤 모델이 가장 적합한지 알아보기 위한 과정입니다. 모두 괜찮습니다.43:38
이걸 해결하면 특정 모델을 다운로드하고, 그 모델을 실행하기 위한 하드웨어를 구축할 수 있습니다. 좋아요, 오픈루터가 있네요. 그리고 네, 한번 시도해 봅시다. 퀸, 퀸 쓰리 320억 파라미터 모델을 한번 시도해 봅시다.43:46
네, 이미지도 잘 나오고 있습니다. 테이블은 없어서 좋네요. 네, 꽤 괜찮아 보이는 것 같아요.43:59
실제로 저는 결과에 만족스럽습니다. 다양한 오픈 소스 모델을 테스트하고, 본인에게 가장 적합한 모델을 찾는 좋은 방법입니다. 카메라 끄고, 저는 도클레인의 다양한 설정을 테스트하고 있었어요.44:04
그리고 제가 만든 비동기 폴링 루프를 추가하여, 이제 Dockling 로컬 VLM 파이프라인과 함께 비동기 엔드포인트를 호출하고, 폴링 루프를 통해 진행하고 있습니다.44:14
3초 동안 기다렸다가 작업 ID를 이용해서 작업 상태를 확인하고, 작업 상태에 따라 성공적으로 완료되면 결과를 가져와서 처리하게 됩니다.44:27
다른 경우에는 아직 처리 중이면 다시 확인하거나, 오류가 발생하면 여기서 오류를 띄울 수 있습니다. 지금 파일도 처리된 폴더로 옮기고 있어요. 그래서 전체 파일 경로를 가지고 rag files processed 폴더에 넣어서 보관할 수 있습니다.44:40
이렇게 하면 보류 폴더를 깨끗하게 유지할 수 있고, 워크플로우를 활성화하면 해당 폴더에 들어온 모든 파일이 소비될 것입니다.44:51
파이프라인에 적용해 보았고, docklane의 다른 설정들도 몇 가지 테스트해 보았습니다. docklane 표준 파이프라인을 사용했고, 이미지 설명 API도 사용해 보았는데, 가능성이 있습니다.45:02
실제 문서에 포함된 이미지들을 주석으로 추가할 수 있으며, 이미지 크기를 지정하여 전송할 수 있습니다. 당연히 너무 작은 이미지를 보내는 것은 원치 않으니까요.45:13
VLM에 연결할 수 있어서 좋네요. 특히, 기존 파이프라인과 함께 VLM을 실행하면서 다이어그램이나 이미지 같은 데이터만 전송할 수 있다는 점이 멋지네요. 요즘에는 작은 VLM 모델들이 많이 나와있죠.45:23
이미지에 담긴 내용을 설명하기에는 적합하지 않습니다. 오히려 문서 내에 무엇이 있는지 파악하는 데 특화되어 있습니다. 다시 말씀드리지만, 다양한 모델을 시험해 보면서 시도해 봤습니다.45:34
그라니트 3.2 비전에서 저는 일반적인 이미지에 대해 아주 좋은 결과를 얻지 못했어요. 하지만 그게 디자인된 목적이 아니라고 생각해요. 네, 여러분이 시도하는 파일을 수용할 수 있도록 이 파이프라인을 더욱 확장할 수 있는 방법이 보일 거예요. 그리고 충분히45:44
노력을 기울이면 꽤 복잡하고 정교한 RAG 인제스션 파이프라인을 구축할 수 있을 거예요.45:59
이것은 저희 커뮤니티에서 사용할 수 있는 로컬 RAG 시스템이며, 이 시스템 내에서는 오늘 저희가 살펴본 것처럼 로컬 파일 폴더에 업로드된 파일들을 순회하고 있습니다.46:04
그리고 파일 형식에 따라 다양한 트랙이 있습니다. Dockling이 여러 파일 형식을 처리할 수 있기 때문이죠. 따라서 어느 정도 포괄적인 기능을 제공하지만, 엑셀 시트나 CSV 시트와 같이 구조화된 데이터의 경우, 이를 다르게 표현하고 싶습니다. 그리고 한 번...46:16
파일 처리의 주요 부분으로 들어가면 레코드 매니저를 거치고, 제가 말씀드린 것처럼 지식 그래프와 테이블 데이터를 처리하고, 다양한 기능들을 가지고 있습니다.46:31
문맥 확장, 문서 계층 구조 추출, 그리고 상황 벡터 임베딩을 사용하는 기능들이 있습니다. 저희의 최첨단 로컬 RAG 시스템에 접근하고 싶으시다면, 커뮤니티 링크를 확인해 주세요.46:40
설명란에 있는 링크를 통해 저희 커뮤니티, AI 자동화 전문가 그룹에 참여해 주십시오. 이제 저희의 RAG 시스템 버전 1이 작동하고 있으니, 로컬 네트워크에서 사용자들이 에이전트와 직접 대화할 수 있는 웹 페이지를 만들어 보겠습니다.46:53
지금은 채팅 인터페이스를 직접 코딩해서 만들 수도 있지만, 간단하게 하기 위해 표준 N8N 채팅 위젯을 삽입하겠습니다.47:03
제가 여기 URL을 가져와서 커서로 다시 돌아가 보겠습니다.47:11
새로운 채팅을 만들어서, 저희가 찾고 있는 내용에 대해 설명해 드리도록 하겠습니다. 그리고, 실제로는 이 추출된 이미지 폴더를 사용하는 것이 좋습니다. 왜냐하면 엔진 X 파일 서버의 루트 폴더가 바로 이 폴더이기 때문입니다. 여기서는 이 문서 내에서 질문을 드리려고 합니다.47:14
네, 루트님. 다음과 같은 채팅 위젯을 포함하는 웹 페이지를 만들고, 이것이 저희 n8n 도커 컨테이너에 연결되도록 할 수 있을까요? 한번 살펴봅시다. 웹 페이지를 생성하고 있습니다.47:27
아름다운 웹 페이지를 만들고 n8n 채팅 위젯을 삽입해 보겠습니다. 네, 얼마나 멋있을지 기대됩니다. 최근 몇 주 동안 Claude Opus 4.5에서 매우 좋은 결과를 얻었기 때문에 기대치가 높습니다.47:39
자, 한번 살펴볼까요? 네, NNN챗, 아마도 NNN 어시스턴트일 거예요. 오른쪽 하단에 있는 채팅 버블을 클릭해서 대화를 시작하세요. 채팅을 시작해 볼까요. 안녕하세요라고 해볼게요. 그런데 아무 일도 일어나지 않네요.47:50
아직 워크플로우를 활성화하지 않았으니까 놀랍게도 아니에요. 자, 워크플로우로 들어가 볼까요.48:02
챗을 공개적으로 사용할 수 있게 만들어야겠어요. 네, 이 챗 URL을 입력하고 임베디드 챗으로 설정했어요. 로컬이니까 인증이 필요 없어요.48:06
자, 이제 복사해서 저장하시고 워크플로우를 활성화한 다음, 잠시 여기로 돌아가 보겠습니다.48:14
작업 흐름이 현재 활성화되어 있습니다. URL은 여기로 사용하시고, 로컬호스트 대신 nn을 사용해주세요. 아마 알아서 처리할 수 있을 거예요. 좋습니다, 다시 한번 시도해 보겠습니다. 새로고침 해주세요. 이제 작업 흐름에 연결되고 있습니다.48:23
지금은 에러가 발생했지만, 괜찮습니다. 잠시 돌아와서 실행을 디버깅하고 편집기를 열어볼까요? 네, 변경해야 할 사항이 있고, 제 자격 증명을 업데이트해야 합니다. 좋아 보이네요. 이제 요청해 봅시다.48:36
얼음 정수기 사용법을 보여주시면 사진이 다시 나타나는지 확인해 볼 수 있을 것 같습니다. 보시다시피 응답 방식은 엉망진창이고, 저는 이것을 제대로 된 형식이라고 정의하지 않겠습니다.48:48
아름다운, 음, 꽉 찬 작품이나 커서죠. 그래서 팝업 스타일링에 몇 번의 반복이 필요하고, 이건 아마 전체 화면에 임베드해야 할 것 같아요. 그러니까 UI 작업이 많이 필요하겠죠.48:57
하지만 이 n8n 채팅 임베드를 이용해서 HTML 페이지에 연결해서 n8n 컨테이너와 함께 작동하는 것을 할 수 있다는 점을 알 수 있을 거예요. 마지막으로49:09
필요한 것은 만약 localhost 8080으로 접속하신다면, 파일 목록만 표시되는 것을 확인하실 수 있다는 점입니다. chat.html은 그 파일 목록에 있는 것 중 하나일 뿐입니다. 따라서 커서로 다시 돌아가 새로운 채팅을 생성하고, 제가49:22
혹시 Nginx 설정을 조정하여, 사용자가 정적 파일 서비스를 위해 루트 경로에 접속했을 때 chat.html로 연결되도록 할 수 있을까요? 이 부분은 Cursor가 정말 유용하게 만들어 줄 수 있습니다.49:35
이런 도커 컴포즈 파일 같은 부분들이 변경될 수 있는데, 이 분야에 익숙하지 않으신 분들이라도 시간을 상당히 단축시켜줄 수 있습니다. 꽤 괜찮은 기능이었죠.49:48
쉽게 변경할 수 있습니다. chat.html 파일의 인덱스만 변경하면 됩니다. 네, 저희의 정적 파일 컨테이너를 제거하고 다시 업로드하면 끝입니다. 네, 테스트해 보겠습니다.49:57
정말 훌륭합니다. 이제 로컬호스트 8080 포트가 chat.html 파일을 가리키고 있고, 파일 서버에 저장된 이미지에도 여전히 접속할 수 있어야 합니다. 마지막으로 필요한 것은 사용자분들이 이 채팅에 접속할 수 있도록 하는 것이겠네요.50:08
로컬 네트워크에 연결되어 있다면 인터페이스를 사용할 수 있습니다. 그리고 작은 로컬 네트워크라면 여기서 크게 변경할 부분은 없을 겁니다.50:21
예를 들어, 여기 제 컴퓨터가 있고, 이것이 제 서버이고, 그리고 이것이 제 로컬 IP 주소라고 가정해 봅시다. 이 네트워크에 연결되어 이 채팅 위젯에 접속하려는 다른 컴퓨터나 노트북이 있다고 해 봅시다.50:29
자, 이 채팅 위젯을 클릭할 때, 저희는 로컬호스트 8080 또는 127.0.0.1로 접속하게 됩니다. 그런데 이건 자신의 컴퓨터에서만 가능합니다. 만약 다른 컴퓨터에서 접속을 시도한다면, 접속하려면...50:41
네트워크 상에서 제 기기의 실제 로컬 IP 주소로 접속하고, 현재 채팅 인터페이스를 포함하고 있는 이 정적 파일 컨테이너에 접속하려면, 해당 IP 주소의 특정 포트로 접속하게 됩니다.50:54
8080번 포트 외에도, N8N에 접속하고 싶으시다면 5678번 포트에서 접속 가능하도록 설정하실 수도 있습니다.51:06
그래서 이걸 설정하려면 몇 가지 변경 사항을 적용해야 합니다. 제 경우, 윈도우 방화벽에서 기본적으로 임의의 포트에서의 인바운드 연결은 비활성화되어 있습니다.51:12
방화벽 설정을 변경해서 연결을 허용해야 할 것 같습니다. 제가 이 로컬 네트워크에서 사용하는 이 IP 주소는 기본적으로 동적입니다.51:23
노트북을 껐다가 다시 켜면, 아마 다른 IP 주소가 할당될 가능성이 높습니다.51:32
실제 주소가 변경되지 않도록 고정 IP 주소를 설정해야 할 수도 있습니다. 네트워크 복잡도에 따라 추가적인 네트워크 구성 변경이 필요할 수도 있습니다.51:38
조직 규모가 커질수록, 더 많은 계층과 시스템이 존재할 가능성이 높아집니다.51:49
아마 커뮤니케이션 팀과 협업을 하셔야 할 것 같고, 또 다른 중요한 점은 서버를 항상 켜두거나, 최소한 업무 시간 동안이라도 켜두어야 챗봇을 이용할 수 있을 겁니다.51:56
그래서 조직 내에 AI 에이전트를 효과적으로 게시하고 배포할 수 있는 방법입니다. 저는 지금 에이전트 모드와 커서를 이용해서 로컬 RAG 에이전트의 프론트엔드 변경 작업을 진행하고 있습니다.52:06
챗봇을 화면 전체에 완전히 내장했고, 현재 실제 스타일들을 반복적으로 처리하고 있습니다. 브라우저가 내장된 이 에이전트 모드와, 이 브라우저 동작을 시뮬레이션하기 위해 퍼펫을 활용하는 점이 정말 강력하다고 생각합니다.52:17
이런 방식으로 프론트엔드를 개선하는 거군요. 그리고 물론, 이건 아주 기본적인 멀티모달 RAG 에이전트입니다. 여기 몇 개의 파일을 가져왔지만, 저희 채널에서 RAG 에이전트와 같은 기능을 구축하기 위해 사용할 수 있는 다양한 고급 기술을 많이 소개해 드렸습니다.52:32
이제 완전히 로컬 멀티모달 RAG 에이전트를 만드는 방법을 아셨으니, 여기에 제가 Notebook LM의 복제본을 로컬에서 배포하는 방법을 보여주는 이 비디오를 꼭 확인해 보세요. 시청해 주셔서 감사합니다. 다음 영상에서 또 만나요.52:46
AI Summary
이 영상들은 Docker Compose와 Docklane 플랫폼을 활용하여 로컬 AI 워크플로우 데모 및 RAG(Retrieval-Augmented Generation) 시스템 구축 과정을 상세히 보여줍니다. Doclin을 이용하여 PDF 파일을 처리하고, N8N을 통해 채팅 인터페이스로 연결하며, Nginx를 사용하여 정적 파일을 제공하는 컨테이너 환경을 구축하는 방법을 다룹니다. RAG 시스템 구축 목표는 로컬 파일 기반 질문 응답 시스템을 구현하는 것이며, 다양한 파일 형식을 지원하고 웹 인터페이스를 통해 접근성을 높이는 것을 목표로 합니다. 영상에서는 컨테이너 간 통신 문제 해결, 파일 처리 오류 해결, 이미지 누락 문제 해결 등 실제 개발 과정에서 발생하는 문제들을 해결하는 과정과 기술적인 세부 사항들을 설명하며, 네트워크 설정, 방화벽 설정, 프론트엔드 개선 등 다양한 측면을 다룹니다. 마지막으로, 프론트엔드를 개선하고, Notebook LM 복제본을 로컬에서 배포하는 방법에 대한 다음 단계를 제시합니다.
Key Highlights
- •Docker Compose를 활용한 컨테이너 환경 구축 및 관리 방법 소개
- •Doclin, N8N, Nginx 등 핵심 기술 및 플랫폼의 역할과 기능 설명
- •RAG 시스템 구축을 위한 데이터 수집, 임베딩, 인덱싱, 검색, 생성 과정 상세 설명
- •컨테이너 간 통신, 파일 처리, 이미지 처리 등 문제 해결 과정을 실질적인 예시와 함께 제시
- •로컬 RAG 에이전트 프론트엔드 설정 및 배포, 네트워크 설정, 방화벽 설정 등 운영 환경 구축 방법 안내


