# LlamaIndex
# はじめに
LlamaIndex(GPT Index)は、LLM(Llama)と外部データを接続するための中央インターフェースを提供するプロジェクトです。LlamaIndexの詳細については、LlamaIndexドキュメントウェブサイト (opens new window)を参照してください。
# 前提条件
始める前に、LlamaIndex (opens new window)とclickhouse python client (opens new window)をインストールする必要があります。
pip install -U llama-index clickhouse-connect
# 環境のセットアップ
OpenAIの埋め込みモデルを使用するためには、OpenAI (opens new window)でAPIキーを取得する必要があります。
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"
# データの読み込みとインデックスの構築
ローカルのテキストファイルをLlamaドキュメントに読み込みます。
from gpt_index import GPTMyScaleIndex, SimpleDirectoryReader
# ドキュメントを読み込む
documents = SimpleDirectoryReader("YOUR_PATH_TO_FILE").load_data()
次に、データをMyScaleクラスタにアップロードします。インデックスが存在しない場合は作成され、既に存在する場合は再利用されます。MyScaleインデックスの設定については、MyScaleVectorStore (opens new window)を参照してください。
import clickhouse_connect
# クライアントの初期化
client = clickhouse_connect.get_client(
host='YOUR_CLUSTER_HOST',
port=443,
username='YOUR_USERNAME',
password='YOUR_CLUSTER_PASSWORD'
)
from llama_index import VectorStoreIndex, SimpleDirectoryReader
from llama_index.vector_stores import MyScaleVectorStore
from IPython.display import Markdown, display
# ドキュメントを読み込む
documents = SimpleDirectoryReader("../data/paul_graham").load_data()
# インデックスの初期化
loader = SimpleDirectoryReader("./data/paul_graham/")
documents = loader.load_data()
# メタデータフィルタとストアインデックスの初期化
from llama_index.storage.storage_context import StorageContext
for document in documents:
document.metadata = {"user_id": "123", "favorite_color": "blue"}
vector_store = MyScaleVectorStore(myscale_client=client)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(
documents, storage_context=storage_context
)
# MyScaleへのクエリ
類似性検索に基づいてクエリを行うことができます。
import textwrap
from llama_index.vector_stores.types import ExactMatchFilter, MetadataFilters
# より詳細な出力のためにログレベルをDEBUGに設定する
query_engine = index.as_query_engine(
filters=MetadataFilters(
filters=[
ExactMatchFilter(key="user_id", value="123"),
]
),
similarity_top_k=2,
vector_store_query_mode="hybrid",
)
response = query_engine.query("What did the author learn?")
print(textwrap.fill(str(response), 100))
# すべてのインデックスのクリア
ドキュメントとそのIDを使用してドキュメントを削除することもできます。
for document in documents:
index.delete_ref_doc(document.doc_id)