# 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)