Local GenAI Search는 32GB 노트북이나 컴퓨터(32BG RAM을 갖춘 MacBookPro M2로 개발)에서 로컬로 실행할 수 있는 Llama3 모델을 기반으로 하는 로컬 생성 검색 엔진입니다.
이 프로젝트의 주요 목표는 사용자가 로컬 파일의 내용에 대해 질문할 수 있도록 하고, 열 수 있는 관련 문서를 참조하여 간결하게 답변하는 것입니다.
엔진은 의미 검색을 위해 MS MARCO 임베딩을 사용하고 있으며 상위 문서는 Llama 3 모델로 전달됩니다.
기본적으로 NVIDIA API와 함께 작동하며 70B 매개변수 Llama 3 모델을 사용합니다. 그러나 NVIDIA API 크레딧을 모두 사용했거나 로컬 문서 검색에 API를 사용하고 싶지 않은 경우 8B 매개변수 모델을 사용하여 로컬로 실행할 수도 있습니다.
로컬 생성 AI 검색을 실행하려면(Llama3을 실행하기에 충분한 스트링 머신이 있는 경우) 저장소를 다운로드해야 합니다.
git clone https://github.com/nikolamilosevic86/local-gen-search.git
모든 요구 사항을 설치해야 합니다.
pip install -r requirements.txt
environment_var.py
라는 파일을 생성하고 거기에 HuggingFace API 키를 넣어야 합니다. 파일은 다음과 같아야 합니다.
import os
hf_token = "hf_you_api_key"
nvidia_key = "nvapi-your_nvidia_nim_api_key"
HuggingFace의 API 키는 https://huggingface.co/settings/tokens
에서 검색할 수 있습니다. 생성 구성 요소를 실행하려면 https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
에서 Llama3 모델에 대한 액세스를 요청해야 합니다.
Nvidia NIM API 엔드포인트용 API 키는 https://build.nvidia.com/explore/discover
에서 검색할 수 있습니다.
다음 단계는 검색하려는 문서가 포함된 폴더와 하위 폴더를 색인화하는 것입니다. index.py
파일을 사용하면 됩니다. 달리다
python index.py path/to/folder
예를 들어, 제공된 TestFolder를 사용하여 실행할 수 있습니다.
python index.py TestFolder
이렇게 하면 qdrant 클라이언트 인덱스가 로컬로 생성되고 이 폴더와 확장자가 .pdf
, .txt
, .docx
, .pptx
인 하위 폴더에 있는 모든 파일의 인덱스가 생성됩니다.
다음 단계는 생성 검색 서비스를 실행하는 것입니다. 이를 위해 다음을 실행할 수 있습니다.
python uvicorn_start.py
그러면 Postman을 사용하여 쿼리하거나 POST 요청을 보낼 수 있는 로컬 서버가 시작됩니다. 모델 로드(Huggingface에서 다운로드하는 것을 포함하여 특히 처음에는 몇 분 정도 걸릴 수 있음). 두 가지 인터페이스가 있습니다:
http://127.0.0.1:8000/search
http://127.0.0.1:8000/ask_localai
두 인터페이스 모두 다음 형식의 본문이 필요합니다.
{"query":"What are knowledge graphs?"}
Accept 및 Content-Type 헤더는 application/json
으로 설정됩니다.
다음은 코드 예입니다.
import requests
import json
url = "http://127.0.0.1:8000/ask_localai"
payload = json . dumps ({
"query" : "What are knowledge graphs?"
})
headers = {
'Accept' : 'application/json' ,
'Content-Type' : 'application/json'
}
response = requests . request ( "POST" , url , headers = headers , data = payload )
print ( response . text )
마지막으로 Streamlit 사용자 인터페이스는 다음과 같은 방법으로 시작할 수 있습니다.
streamlit run user_interface.py
이제 사용자 인터페이스를 사용하여 파일 시스템의 파일을 기반으로 답변되는 질문을 할 수 있습니다.
이 도구 개발에 대한 자세한 내용을 보려면 Llama 3을 사용하여 로컬 파일용 생성 검색 엔진을 구축하는 방법 | 데이터 과학을 향하여
또한 다음 논문을 확인할 수 있습니다.
@article{kovsprdic2024verif,
title={Verif.ai: Towards an Open-Source Scientific Generative Question-Answering System with Referenced and Verifiable Answers},
author={Ko{v{s}}prdi{'c}, Milo{v{s}} and Ljaji{'c}, Adela and Ba{v{s}}aragin, Bojana and Medvecki, Darija and Milo{v{s}}evi{'c}, Nikola},
journal={arXiv preprint arXiv:2402.18589},
year={2024}
}