Сховище та пошук у RAG за допомогою векторних баз даних

Розроблення застосунків LLM за допомогою LangChain

Jonathan Bennion

AI Engineer & LangChain Contributor

Кроки розробки RAG

Загальний робочий процес RAG: завантажувач документів, розбивач документів і процес зберігання та пошуку.

  • У фокусі відео: зберігання і пошук
Розроблення застосунків LLM за допомогою LangChain

Що таке векторна база даних і навіщо вона потрібна?

Типовий робочий процес RAG.

Розроблення застосунків LLM за допомогою LangChain

Яку векторну базу даних обрати?

 

Огляд доступних векторних баз даних, розділених на open source і закриті, а також на спеціалізовані та ті, що лише підтримують цю операцію.

 

Варто зважити:

  • Open source vs. закрита (ліцензія)
  • Хмара vs. локально
  • Легка vs. потужна
1 Зображення: Yingjun Wu
Розроблення застосунків LLM за допомогою LangChain

Познайомтесь із документами…

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"}
    )
]
Розроблення застосунків LLM за допомогою LangChain

Налаштування векторної бази даних 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} )
Розроблення застосунків LLM за допомогою LangChain

Створення шаблону підказки

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)])
Розроблення застосунків LLM за допомогою LangChain

З'єднуємо все докупи!

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!
Розроблення застосунків LLM за допомогою LangChain

Давайте потренуємось!

Розроблення застосунків LLM за допомогою LangChain

Preparing Video For Download...