# LlamaIndex

# Introducción

LlamaIndex (GPT Index) es un proyecto que proporciona una interfaz central para conectar tus LLM's con datos externos. Para obtener más información sobre LlamaIndex, consulta el Sitio web de documentación de LlamaIndex (opens new window).

# Prerrequisitos

Antes de comenzar, debemos instalar LlamaIndex (opens new window) y clickhouse python client (opens new window).

pip install -U llama-index clickhouse-connect

# Configuración del entorno

Para utilizar modelos de incrustación de OpenAI, debemos registrarnos para obtener una clave de API de OpenAI en OpenAI (opens new window).

export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"

# Carga de datos y construcción del índice

Cargaremos archivos de texto locales en documentos de Llama:

from gpt_index import GPTMyScaleIndex, SimpleDirectoryReader
# cargar documentos
documents = SimpleDirectoryReader("YOUR_PATH_TO_FILE").load_data()

A continuación, subiremos los datos al clúster MyScale. Si el índice no existe, se creará y, si ya existe, se reutilizará. Para obtener más información sobre la configuración de tu índice MyScale, consulta MyScaleVectorStore (opens new window).

import clickhouse_connect
# inicializar cliente
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
# cargar documentos
documents = SimpleDirectoryReader("../data/paul_graham").load_data()
# inicializar índice
loader = SimpleDirectoryReader("./data/paul_graham/")
documents = loader.load_data()
# inicializar con filtro de metadatos e índices de almacenamiento
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
)

# Consulta en MyScale

Podemos realizar consultas basadas en la búsqueda de similitud:

import textwrap
from llama_index.vector_stores.types import ExactMatchFilter, MetadataFilters
# establecer Logging en DEBUG para obtener salidas más detalladas
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))

# Borrar todos los índices

También puedes eliminar documentos con sus identificadores:

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