AIPromptSmarteasy 사용해 보기 – 유튜브 영상 보기 – On-Device RAG with SQLite-vec – A Tutorial

영상에서 이야기 하듯이 SQLite는 휴대성이 뛰어나고, 작은 크기에도 많은 기능을 담고 있습니다. 필요 조건이 낮다면 실제 프로덕션 개발에도 사용할 수 있습니다. AIPilotSmarteasy는 커널 메모리의 파일로 임베딩을 관리하는 방식을 사용하고 있기 때문에,  데스크탑 애플리케이션으로 개인 차원 지원을 넘어서면 문제가 있을 수 있습니다. 그래서 SQLite와 같이 가벼운 데이터베이스 관리 시스템을 사용하고자 합니다.

이 영상은 그러한 요구에 적합하다고 판단되어 비슷한 요구가 있는 분들을 위해 전문 번역을 선택했습니다.

AIPilotSmarteasy의 번역 기능을 사용했습니다. 공급자와 모델은 구글 제미나이 1.5 입니다.

[전문 번역]

안녕하세요 여러분, 채널에 오신 것을 환영합니다. 저는 SQLite의 열렬한 팬입니다. SQLite는 휴대성이 뛰어난 것은 물론, 작은 크기에도 많은 기능을 담고 있습니다. 필요 조건이 낮다면 실제 프로덕션 개발에도 사용할 수 있습니다.

일상적인 테스트 용도에서는 꽤나 뛰어난 선택입니다.

그래서 여러분께 SQLite V를 소개하게 되어 매우 기쁩니다.

SQLite V는 어디서나 실행되는 강력한 벡터 검색 SQLite 확장 기능으로, 작은 크기의 휴대용 벡터 데이터베이스입니다. 이는 장치 내 검색 증강 생성 애플리케이션에 적합합니다. RAG가 무엇인지, 아니면 검색 증강 생성이 무엇인지 모른다면, 간단히 말해 대규모 언어 모델이나 AI 기반 애플리케이션에 자신의 데이터에 기반한 더 많은 맥락을 제공하는 것을 의미합니다. 즉, 자신의 데이터를 가져와 임베딩 모델을 사용하여 수치 표현으로 변환합니다. 이러한 수치 표현을 임베딩 또는 벡터라고 부릅니다. 그런 다음 이를 벡터 저장소에 저장합니다. 이제 SQLite V 옵션이 생겼고, 이를 통해 유사성 검색을 수행할 수 있습니다. 쿼리에 따라 유사한 항목을 찾는 즉시 이를 쿼리에 추가하고 LLM에 전달합니다. 이렇게 해서 LLM은 프롬프트에 대한 더 많은 맥락을 확보하게 됩니다. 다양한 다른 옵션들, 예를 들어 Chroma, Vivet, Pinecone, Postgres 등 많은 RAG 벡터 저장소가 있는 상태에서, 이제 SQLite V에서도 이 옵션을 사용할 수 있다는 사실에 대한 흥분이 큽니다. SQLite V는 완전한 C로 작성된 벡터 검색 SQLite 확장 기능으로, 의존성이 없습니다. 이번 영상에서는 로컬에 설치한 후, 실제 사례를 통해 어떻게 작동하는지 살펴보겠습니다. 이 영상에서 사용할 모든 코드는 여러분도 확인할 수 있도록 제공할 예정입니다. 이 GitHub 레포지토리의 링크도 제공하겠습니다.

작업을 하기 전에, 이번 동영상의 VMN GPU를 후원해준 M Compute에게 큰 감사를 전합니다. 저렴한 GPU를 임대하고 싶으시다면, 동영상 설명란에 그들의 웹사이트 링크를 남길 예정입니다. 또한, 50% 할인을 위한 쿠폰 코드도 제공할 것입니다. SQLite V로 돌아가서, 이 제품은 매우 휴대성이 뛰어납니다. 대부분의 운영 체제와 환경에서 작동하며 MIT Apache 2 이중 라이선스를 갖추고 있습니다.

SQLite V는 SQLite의 전면 텍스트 검색 지원과 유사하게 작동하여 벡터 열이 있는 가상 테이블을 선언할 수 있습니다.

일반적인 INSERT INTO 문을 사용하여 데이터를 삽입할 수 있고, 일반적인 SELECT 문을 사용하여 이를 쿼리할 수도 있습니다. 또 하나의 멋진 점은 이 SQLite V가 Matrioska 임베딩 슬라이싱을 지원한다는 것입니다. 이는 고차원 벡터의 차원을 줄이는 기술입니다. 또한 최소한의 정확도 손실로 저장 용량을 32배 줄여주는 이진 양자화도 지원합니다. L2 코사인 및 해밍 거리 계산도 지원하며, 이는 벡터 간의 유사성을 측정합니다. Python 리스트 및 NumPy 배열에 대한 검색도 지원하여 인기 있는 Python 라이브러리와의 쉬운 통합이 가능합니다. Python, JavaScript, Go, Rust, WASM 등 여러 언어와 함께 사용할 수 있어, 좋아하는 프로그래밍 언어에서 SQLite V를 쉽게 사용할 수 있습니다. GF 모델을 위한 SQLite LED와 함께하는 로컬 직접 임베딩 기능도 제공하며, L.CPP와 함께 사용할 수 있어 벡터에 대한 효율적인 임베딩을 가능하게 합니다. OpenAI 호환 API와 같은 원격 임베딩도 사용할 수 있습니다. 또한 SQLite에서 가상 테이블을 사용하며, 그 의미를 곧 설명해드리겠습니다. 참고로 SQLite에서 가상 테이블은 데이터를 직접 저장하지 않고 다른 소스에서 데이터를 액세스하고 조작하는 방법을 제공하는 테이블과 유사한 객체입니다. 가상 테이블은 CREATE VIRTUAL TABLE 문을 사용하여 생성되며, 그 부분도 곧 보여드리겠습니다. 이제 이걸 설치하려면 물론 SQLite를 이미 사용할 수 있어야 합니다. Python 3 이상의 최신 버전을 설치했다면, 시스템에 SQLite가 이미 설치되어 있어야 합니다. 이는 표준 Python 라이브러리이기 때문입니다.

현재 SQLite V를 설치하기 위해서는 이 명령어인 pip install SQLite-V를 실행하기만 하면 됩니다. 그러면 로컬 시스템에 설치될 것입니다. 저는 이미 설치해 두었으니, 이제 제 VSS 코드로 가서 어떻게 사용할 수 있는지 보여드리겠습니다. 우선, 제가 여기서 하고 있는 것은 SQLite, SQLite V 확장, NumPy, 그리고 struct를 임포트하는 것입니다. 만약 NumPy가 이미 설치되어 있지 않다면, pip install NumPy를 실행하면 설치될 것입니다. 두 번째로는 메모리에 SQLite 데이터베이스를 생성하고 있습니다. 저는 SQLite 확장을 포함한 모든 확장을 로드하고, 다시 한 번 로드했습니다. 그리고 제가 방금 언급한 이 가상 테이블을 생성하고 있습니다. 가상 테이블은 자체적으로 데이터를 저장하지 않지만, 다른 소스에서 데이터를 접근하고 조작할 수 있는 방법을 제공하는 테이블과 유사한 객체입니다. 여기서 임베딩을 로드하고 있습니다. 책 제목이라는 테이블을 생성하고 있으며, 그 안에 이러한 랜덤한 책 제목을 저장할 것입니다. 제목을 저장한 후, 이 모든 책에 대한 무작위 숫자 표현을 생성했습니다. 예를 들어, ‘모킹버드 죽이기’는 이 벡터로 표현할 수 있고, ‘1984’는 이 벡터로 표현할 수 있습니다. 물론, 실제 세계에서는 자신의 텍스트를 이러한 숫자 표현으로 변환하기 위해 NX embed나 mixed spread와 같은 임베딩 모델을 사용합니다. 이것은 RAG 파이프라인의 일부가 될 수 있습니다. 이 작업이 끝난 후에는 이 책들과 그 숫자 표현을 각 테이블에 삽입하고 있습니다. 모든 작업이 완료되면, 우리는 단순히 이 데이터를 이진 형식으로 선형적으로 직렬화하여 저장하고, 매치를 찾는 것과 매우 유사한 이 쿼리를 실행합니다. 저는 상위 세 개의 랜덤 값을 선택하고 여기서 응답을 출력하고 있습니다. 예를 들어, ‘1984와 유사한 책’이라고 하면 거리를 계산하고 있습니다. 거리가 0에 가까우면 매치라는 의미입니다. 0은 정확한 매치를 의미하며, 그렇지 않으면 더 높은 값을 제공합니다.

지금 실행해 보겠습니다. 보시다시피, 1984와 유사한 책들을 언급하고 있습니다. 예제를 확인해 보면, 여기에서는 정확히 일치하는 항목이 있지만 나머지는 일치하지 않습니다. 이 쿼리에서는 상위 세 가지 값만 가져오고 있습니다. 이제 실행해 보고 어떻게 작동하는지 알아봅시다. 이것이 제 터미널입니다. 이렇게 실행할 것입니다. 자, 이제 보십시오. 이것이 제목이고, 거리는 0으로, 정확히 일치함을 의미합니다. 나머지 두 개는 임의로 선택된 것이어서 값이 꽤 높기 때문에 정확한 일치가 아닙니다. 이것이 SQLite V가 마법을 부리는 방법입니다. 앞서 언급했듯이, 이 외에도 많은 다른 작업을 수행할 수 있습니다. 예를 들어, 고차원 벡터의 차원을 줄이는 기술인 Matryoshka 임베딩 슬라이싱도 지원합니다. 이는 벡터를 더 작은 서브 벡터로 나눈 다음 다시 조합하여 저차원 벡터를 형성하는 방식으로 작동합니다. 성능도 꽤 우수합니다. 예를 들어, 128차원 벡터 백만 개에 대한 쿼리 시간을 겨우 17밀리초로 처리할 수 있습니다. 그게 전부입니다. 그래서 오늘의 SQLite V 소개 비디오와 핸즈온 데모는 여기까지입니다. 보시다시피, 이것은 꽤 강력한 벡터입니다. 이는 어디서나 실행되는 SQLite 확장이므로, 온디바이스 래그 애플리케이션에 완벽합니다.

매트로스카 이진 양자화 및 다양한 거리 계산을 지원함으로써, 고차원 벡터 작업을 하는 모든 이에게 훌륭한 선택입니다. 이 내용이 마음에 드셨기를 바랍니다. 여러분의 생각을 알려주세요. 내용이 마음에 드신다면, 채널 구독을 고려해 주시기 바랍니다. 이미 구독하셨다면, 네트워크에 공유해 주시면 큰 도움이 됩니다. 시청해 주셔서 감사합니다.

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*