Contenido del curso

Pinecone como vector store con LangChain

Resumen

Elegir una vector database adecuada define el rendimiento de cualquier aplicación de machine learning que use embeddings. Pinecone es una solución gestionada en la nube que destaca por su escalabilidad y facilidad de uso para búsquedas semánticas a gran escala, y aquí vas a ver cómo conectarla con LangChain y OpenAI paso a paso.

¿Qué es Pinecone y por qué usarlo como vector store?

Pinecone es un vector store gestionado que almacena representaciones numéricas de texto (vectores) y permite recuperar fragmentos relevantes mediante búsqueda por similitud. A diferencia de Chroma, que suele correr en local, Pinecone vive en la nube y se enfoca en aplicaciones que necesitan alto rendimiento sobre millones de vectores.

¿Qué es una vector database? Es una base de datos que guarda vectores numéricos generados por un modelo de embeddings y permite buscar los más cercanos a una consulta usando métricas como coseno o distancia euclidiana.

La elección entre Pinecone y Chroma depende del caso de uso, la escalabilidad esperada y los costos. Pinecone es de pago, así que cada vector cargado cuenta.

¿Cómo crear un index en Pinecone con las dimensiones correctas?

Dentro del panel de Pinecone, la sección de index es donde nacen los proyectos y se gestionan las API keys [01:00]. Al crear un nuevo index hay que respetar reglas de nombre (no se permiten mayúsculas) y, sobre todo, definir bien la dimensión.

La dimensión es el número de vectores que produce el modelo de embeddings que vas a usar. Si los números no coinciden, la carga falla.

  • Modelo elegido: text-embedding-3-large de OpenAI.
  • Dimensión correspondiente: 3072 vectores [02:10].
  • Métrica de distancia: coseno o euclidiana, según el caso.
  • Proveedor cloud: Azure, Google Cloud o AWS, con su región.

Una vez creado el index, los dos datos críticos para el código son el nombre del index y la API key de Pinecone.

¿Qué métrica de distancia conviene elegir?

La diferencia de cosenos es la más común para texto porque mide el ángulo entre vectores y funciona bien con embeddings normalizados. La distancia euclidiana, que viene del álgebra lineal, mide la separación absoluta y se usa más cuando la magnitud importa.

¿Cómo conectar LangChain con Pinecone y OpenAI?

En Colaboratory necesitas tener cargadas la OpenAI API key, la API key de Pinecone y las dependencias langchain-openai, langchain-community y langchain-pinecone [04:30]. Un truco rápido para confirmar la conexión con OpenAI es usar invoke sobre el Large Language Model y revisar que devuelva respuesta.

El flujo de trabajo se resume así:

  1. Cargar el documento fuente (en este caso un TXT corto, un poema sobre el hidrógeno generado con ChatGPT).
  2. Dividirlo en fragmentos con CharacterTextSplitter.
  3. Generar embeddings con OpenAI.
  4. Cargar los vectores al index de Pinecone.

¿Cómo configurar el chunk size y el overlap?

El chunk_size define cuántos caracteres tiene cada fragmento y el chunk_overlap cuántos se repiten entre uno y otro para preservar contexto. En el ejemplo se probó primero con valores muy bajos (15 y 5) y LangChain lanzó una alerta por fragmentos demasiado pequeños [08:20].

  • Valor inicial probado: chunk size 15, overlap 5.
  • Valor final recomendado para el texto: chunk size 200, overlap 40.
  • Regla práctica: el overlap suele ser entre el 10% y el 20% del chunk size.

Después de ajustar estos números, la división se ejecuta sin advertencias.

¿Cómo cargar los embeddings al index y hacer búsquedas semánticas?

El modelo se inicializa con OpenAIEmbeddings(model="text-embedding-3-large") y la carga se hace con PineconeVectorStore.from_documents, pasando los documentos fragmentados, el index_name y el objeto embedding (no como string, sino como variable) [10:45].

python from langchain_pinecone import PineconeVectorStore

vector_store = PineconeVectorStore.from_documents( documents=docs, index_name=index_name, embedding=embedding, )

El tiempo de carga depende del volumen: con un TXT corto tarda segundos, pero con CSV de muchas filas o PDFs largos puede tardar minutos. Siempre conviene verificar en el panel de Pinecone que el index dejó de estar vacío.

¿Cómo sé que los vectores se cargaron en Pinecone? El index deja de mostrarse vacío en el panel y el objeto vector_store permite acceder a los valores numéricos de cada vector y a los metadatos asociados.

¿Cómo hacer una consulta por similitud?

Una buena práctica para validar la carga es generar preguntas a partir del texto original. En el ejemplo, la consulta fue ¿dónde nació el hidrógeno? y se ejecutó con similarity_search sobre el vector_store.

La respuesta devuelve objetos Document ordenados por cercanía al vector de la pregunta, no por coincidencia exacta de palabras. Eso es lo que diferencia una búsqueda semántica de un buscador tradicional.

¿Qué cuidados debes tener al usar herramientas de pago?

Tanto Pinecone como OpenAI cobran por uso, así que monitorear el consumo es parte del trabajo de un ingeniero de natural language processing. En entornos empresariales suelen existir límites de gasto, y aun cuando no los haya, conviene autoimponerlos.

  • Empieza con archivos pequeños para calibrar costos.
  • Revisa el dashboard de consumo en cada plataforma.
  • Ajusta el chunk_size para no inflar el número de vectores innecesariamente.

El siguiente paso natural después de tener la vector store lista es construir una cadena RAG que combine recuperación y generación. Y aquí va una pregunta para ti: además de la búsqueda por similitud, ¿qué otros tipos de búsqueda existen y cuál es la importancia de cada una? Déjala en los comentarios.