Armazenamento e recuperação em RAG usando bancos vetoriais

Desenvolvimento de aplicativos de LLM com LangChain

Jonathan Bennion

AI Engineer & LangChain Contributor

Etapas de desenvolvimento do RAG

O fluxo de trabalho geral do RAG: um carregador de documentos, um divisor de documentos e o processo de armazenamento e recuperação.

  • Foco deste vídeo: armazenamento e recuperação
Desenvolvimento de aplicativos de LLM com LangChain

O que é um banco de dados vetorial e qual o seu uso?

Um fluxo de trabalho típico de RAG.

Desenvolvimento de aplicativos de LLM com LangChain

Qual banco de dados vetorial devo usar?

 

O panorama dos diferentes bancos de dados vetoriais disponíveis, divididos entre código aberto e código fechado, e também entre bancos de dados vetoriais dedicados ou que simplesmente aceitam essa operação.

 

Necessário considerar:

  • Código aberto vs. código fechado (licença)
  • Nuvem vs. local
  • Leveza vs. potência
1 Crédito da imagem: Yingjun Wu
Desenvolvimento de aplicativos de LLM com LangChain

Conheça os 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"}
    )
]
Desenvolvimento de aplicativos de LLM com LangChain

Criando um banco de dados vetorial 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} )
Desenvolvimento de aplicativos de LLM com LangChain

Criando um modelo 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)])
Desenvolvimento de aplicativos de LLM com LangChain

Juntando tudo!

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!
Desenvolvimento de aplicativos de LLM com LangChain

Vamos praticar!

Desenvolvimento de aplicativos de LLM com LangChain

Preparing Video For Download...