Almacenamiento y recuperación RAG mediante bases de datos vectoriales

Desarrollo de aplicaciones LLM con LangChain

Jonathan Bennion

AI Engineer & LangChain Contributor

Pasos del desarrollo de RAG

Flujo de trabajo general de RAG: un cargador de documentos, un divisor de documentos y el proceso de almacenamiento y recuperación.

  • Foco de este vídeo: almacenamiento y recuperación
Desarrollo de aplicaciones LLM con LangChain

¿Qué es una base de datos vectorial y por qué la necesito?

Un flujo de trabajo típico de RAG.

Desarrollo de aplicaciones LLM con LangChain

¿Qué base de datos vectorial debo utilizar?

 

El panorama de las diferentes bases de datos vectoriales disponibles, divididas en código abierto y código cerrado y también en función de si son bases de datos vectoriales específicas o si simplemente admiten esa operación.

 

Se debe tener en cuenta:

  • Código abierto frente a código cerrado (licencia)
  • Nube frente a local
  • Ligero frente a potente
1 Créditos de la imagen: Yingjun Wu
Desarrollo de aplicaciones LLM con LangChain

Conoce los documentos...

docs
[
    Document(
        page_content="In all marketing copy, TechStack should always be written with the T and S
        capitalized. Incorrect: techstack, Techstack, etc.",
        metadata={"guideline": "brand-capitalization"}
    ),
    Document(
        page_content="Our users should be referred to as techies in both internal and external
        communications.",
        metadata={"guideline": "referring-to-users"}
    )
]
Desarrollo de aplicaciones LLM con LangChain

Configuración de una base de datos de vectores Chroma

from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

embedding_function = OpenAIEmbeddings(api_key=openai_api_key, model='text-embedding-3-small')


vectorstore = Chroma.from_documents( docs, embedding=embedding_function, persist_directory="path/to/directory" )
retriever = vectorstore.as_retriever( search_type="similarity", search_kwargs={"k": 2} )
Desarrollo de aplicaciones LLM con LangChain

Creación de una plantilla de prompt

from langchain_core.prompts import ChatPromptTemplate

message = """
Review and fix the following TechStack marketing copy with the following guidelines in consideration:

Guidelines:
{guidelines}

Copy:
{copy}

Fixed Copy:
"""

prompt_template = ChatPromptTemplate.from_messages([("human", message)])
Desarrollo de aplicaciones LLM con LangChain

Encadenémoslo todo

from langchain_core.runnables import RunnablePassthrough

rag_chain = ({"guidelines": retriever, "copy": RunnablePassthrough()}
             | prompt_template
             | llm)

response = rag_chain.invoke("Here at techstack, our users are the best in the world!")
print(response.content)
Here at TechStack, our techies are the best in the world!
Desarrollo de aplicaciones LLM con LangChain

¡Vamos a practicar!

Desarrollo de aplicaciones LLM con LangChain

Preparing Video For Download...