Local GenAI Search は、Llama3 モデルに基づくローカル生成検索エンジンで、32GB のラップトップまたはコンピューター (32BG RAM を搭載した MacBookPro M2 で開発) でローカルに実行できます。
このプロジェクトの主な目標は、ユーザーがローカル ファイルの内容について質問できるようにすることです。質問には、その後開くことができる関連ドキュメントを参照しながら簡潔に回答されます。
このエンジンはセマンティック検索に MS MARCO 埋め込みを使用しており、上位のドキュメントは Llama 3 モデルに渡されます。
デフォルトでは、NVIDIA API で動作し、70B パラメータの Llama 3 モデルを使用します。ただし、NVIDIA API クレジットをすべて使用した場合、またはローカル ドキュメントの検索に API を使用したくない場合は、8B パラメータ モデルを使用してローカルで実行することもできます。
Local Generative AI Search を実行するには (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
://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 からのダウンロードを含む) には、特に初めての場合は数分かかる場合があります。インターフェイスは 2 つあります。
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}
}