# LlamaIndex

# Einführung

LlamaIndex (GPT Index) ist ein Projekt, das eine zentrale Schnittstelle bereitstellt, um Ihre LLMs mit externen Daten zu verbinden. Weitere Informationen zu LlamaIndex finden Sie auf der LlamaIndex-Dokumentationswebsite (opens new window).

# Voraussetzungen

Bevor wir beginnen, müssen wir das LlamaIndex (opens new window) und den ClickHouse Python-Client (opens new window) installieren.

pip install -U llama-index clickhouse-connect

# Umgebung einrichten

Um OpenAI-Einbettungsmodelle zu verwenden, müssen wir uns bei OpenAI (opens new window) für einen OpenAI-API-Schlüssel anmelden.

export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"

# Daten laden und Index erstellen

Wir werden lokale Textdateien in Llama-Dokumente laden:

from gpt_index import GPTMyScaleIndex, SimpleDirectoryReader
# Dokumente laden
documents = SimpleDirectoryReader("YOUR_PATH_TO_FILE").load_data()

Als nächstes laden wir die Daten in den MyScale-Cluster hoch. Wenn der Index nicht vorhanden ist, wird er erstellt, und wenn er bereits vorhanden ist, wird er wiederverwendet. Weitere Informationen zur Konfiguration Ihres MyScale-Index finden Sie unter MyScaleVectorStore (opens new window).

import clickhouse_connect
# Client initialisieren
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
# Dokumente laden
documents = SimpleDirectoryReader("../data/paul_graham").load_data()
# Index initialisieren
loader = SimpleDirectoryReader("./data/paul_graham/")
documents = loader.load_data()
# Mit Metadatenfilter und Speicherindizes initialisieren
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 abfragen

Wir können basierend auf der Ähnlichkeitssuche abfragen:

import textwrap
from llama_index.vector_stores.types import ExactMatchFilter, MetadataFilters
# Logging auf DEBUG setzen für detailliertere Ausgaben
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))

# Alle Indizes löschen

Sie können auch Dokumente mit ihren IDs löschen:

for document in documents:
    index.delete_ref_doc(document.doc_id)