# LangChain JS/TS

# Introducción

LangChain es un marco de trabajo para desarrollar aplicaciones impulsadas por modelos de lenguaje. LangChain JS/TS (opens new window) está diseñado para integrarse de la manera más fluida posible con el paquete de Python de LangChain (opens new window). Específicamente, esto significa que todos los objetos (prompts, LLMs, cadenas, etc.) están diseñados de tal manera que pueden ser serializados y compartidos entre lenguajes.

# Prerrequisitos

Antes de comenzar, debemos instalar el paquete langchain (opens new window) y ClickHouse JS (opens new window).

# npm
npm install -S langchain @clickhouse/client
# yarn
yarn add langchain @clickhouse/client

# Configuración del entorno

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

Ejecute el siguiente comando para configurar las variables de entorno:

export MYSCALE_HOST="TU_HOST_DE_CLÚSTER"
export MYSCALE_PORT=443 
export MYSCALE_USERNAME="TU_NOMBRE_DE_USUARIO" 
export MYSCALE_PASSWORD="TU_CONTRASEÑA_DE_CLÚSTER"
export OPENAI_API_KEY="TU_CLAVE_DE_API_DE_OPENAI"

# Indexar y consultar documentos

import { MyScaleStore } from "langchain/vectorstores/myscale";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
const vectorStore = await MyScaleStore.fromTexts(
  ["Hola mundo", "Adiós adiós", "hola mundo bonito"],
  [
    { id: 2, name: "2" },
    { id: 1, name: "1" },
    { id: 3, name: "3" },
  ],
  new OpenAIEmbeddings(),
  {
    host: process.env.MYSCALE_HOST || "localhost",
    port: process.env.MYSCALE_PORT || "443",
    username: process.env.MYSCALE_USERNAME || "nombre_de_usuario",
    password: process.env.MYSCALE_PASSWORD || "contraseña",
  }
);
const results = await vectorStore.similaritySearch("hola mundo", 1);
console.log(results);
const filteredResults = await vectorStore.similaritySearch("hola mundo", 1, {
  whereStr: "metadata.name = '1'",
});
console.log(filteredResults);

# Consultar documentos desde una colección existente

import { MyScaleStore } from "langchain/vectorstores/myscale";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";
const vectorStore = await MyScaleStore.fromExistingIndex(
  new OpenAIEmbeddings(),
  {
    host: process.env.MYSCALE_HOST || "localhost",
    port: process.env.MYSCALE_PORT || "443",
    username: process.env.MYSCALE_USERNAME || "nombre_de_usuario",
    password: process.env.MYSCALE_PASSWORD || "contraseña",
    database: "tu_base_de_datos", // por defecto es "default"
    table: "tu_tabla", // por defecto es "vector_table"
  }
);
const results = await vectorStore.similaritySearch("hola mundo", 1);
console.log(results);
const filteredResults = await vectorStore.similaritySearch("hola mundo", 1, {
  whereStr: "metadata.name = '1'",
});
console.log(filteredResults);