# LangChain

# Introducción

Los modelos de lenguaje grandes (LLMs) están revolucionando el campo de la inteligencia artificial al permitir a los desarrolladores crear aplicaciones potentes que antes no eran posibles. Sin embargo, utilizar LLMs de forma aislada a menudo no es suficiente para alcanzar todo el potencial de una aplicación. El verdadero poder radica en poder combinarlos con otras fuentes de cálculo o conocimiento. LangChain está diseñado para ayudar a los desarrolladores a construir este tipo de aplicaciones.

Para obtener más información sobre LangChain, consulte el Sitio web de documentación de LangChain (opens new window).

# Prerrequisitos

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

pip install -U langchain clickhouse-connect

# Configuración del entorno

Para utilizar los modelos de incrustación de OpenAI, debemos registrarnos para obtener una clave de API de OpenAI en OpenAI (opens new window). También necesitamos obtener la información del host del clúster, el nombre de usuario y la contraseña desde la consola de MyScale (Detalles de Conexión).

Ejecute el siguiente comando para configurar las variables de entorno:

export MYSCALE_HOST="YOUR_CLUSTER_HOST"
export MYSCALE_PORT=443
export MYSCALE_USERNAME="YOUR_USERNAME"
export MYSCALE_PASSWORD="YOUR_CLUSTER_PASSWORD"
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"

# Carga de datos y creación de índices

Extraeremos vectores de incrustación del archivo de texto de entrada utilizando el modelo OpenAIEmbedding:

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
loader = TextLoader("YOUR_PATH_TO_FILE")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
for d in docs:
    d.metadata = {"some": "metadata"}

A continuación, cargaremos los datos en el clúster de MyScale. Si el índice no existe, se creará y, si ya existe, se reutilizará. Para obtener más información sobre cómo configurar su índice de MyScale, consulte MyScaleSettings (opens new window).

from langchain.vectorstores import MyScale
docsearch = MyScale.from_documents(docs, embeddings)

# Consulta en MyScale

# Búsqueda por similitud

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

query = "YOUR_QUESTION"
docs = docsearch.similarity_search(query)
print(docs[0].page_content)

# Búsqueda filtrada

Puede tener acceso directo a la instrucción SQL de MyScale WHERE. Puede escribir una cláusula WHERE siguiendo el estándar SQL.

NOTA: Tenga en cuenta la inyección de SQL. Esta interfaz no debe ser llamada directamente por los usuarios finales.

Si ha personalizado su column_map en su configuración, puede buscar con un filtro de esta manera:

meta = docsearch.metadata_column
output = docsearch.similarity_search_with_relevance_scores(
  "YOUR_QUESTION", k=4, where_str=f"{meta}.doc_id<10")
for d, dist in output:
    print(dist, d.metadata, d.page_content[:20] + '...')