Bazy wektorowe: Chroma i FAISS
Tworzenie i utrwalanie baz wektorowych, wyszukiwanie podobieństwa, pobieranie MMR, wyszukiwanie hybrydowe.
Bazy wektorowe: Chroma i FAISS to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Czym jest magazyn wektorowy?
Magazyn wektorowy przechowuje fragmenty, dla których utworzono embeddingi, i wyszukuje te najbardziej podobne do wektora zapytania. Jest wyszukiwarką znajdującą się w centrum systemu RAG. Dwa popularne rozwiązania to Chroma i FAISS.
pip install langchain-chroma faiss-cpuTworzenie magazynu Chroma
Chroma.from_documents tworzy embeddingi fragmentów i indeksuje je za pomocą jednego wywołania. Należy przekazać dokumenty oraz obiekt embeddingów. Chroma zwraca magazyn, w którym można od razu wyszukiwać.
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
db = Chroma.from_documents(chunks, embeddings)Zapisywanie Chroma na dysku
Należy przekazać persist_directory, aby indeks został zapisany na dysku i zachował się po ponownym uruchomieniu aplikacji. Później można go wczytać, tworząc obiekt Chroma z tym samym katalogiem i embeddingami, co pozwala uniknąć kosztu ponownego tworzenia embeddingów.
db = Chroma.from_documents(
chunks, embeddings,
persist_directory="./chroma_db"
)
# Reload later
db = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)Wyszukiwanie podobieństwa
Należy wykonać zapytanie za pomocą similarity_search(query, k=4). Metoda tworzy embedding zapytania, wyszukuje k najbliższych fragmentów i zwraca je jako obiekty Document. Parametr k określa liczbę pobieranych fragmentów.
results = db.similarity_search("How do I reset my password?", k=4)
for doc in results:
print(doc.page_content[:80])Wyniki wyszukiwania
Za pomocą similarity_search_with_score można dodatkowo uzyskać wynik odległości dla każdego rezultatu. Mniejsza odległość oznacza większe podobieństwo. Wyniki pomagają odfiltrować słabe dopasowania przed przekazaniem ich do LLM.
pairs = db.similarity_search_with_score("password reset", k=4)
for doc, score in pairs:
print(round(score, 3), doc.page_content[:60])Wprowadzenie do FAISS
FAISS (Facebook AI Similarity Search) to wysokowydajna biblioteka do wyszukiwania wektorowego. Jest niezwykle szybka i oszczędna pamięciowo, dlatego dobrze nadaje się do dużych lokalnych indeksów niewymagających osobnego serwera.
Tworzenie magazynu FAISS
API działa podobnie jak w przypadku Chroma: FAISS.from_documents tworzy indeks. FAISS przechowuje indeks w pamięci, dlatego świetnie nadaje się do wyszukiwania z przewagą odczytu wykonywanego w obrębie procesu.
from langchain_community.vectorstores import FAISS
db = FAISS.from_documents(chunks, embeddings)
results = db.similarity_search("refund policy", k=3)Zapisywanie i wczytywanie FAISS
Indeks FAISS można zapisać za pomocą save_local i wczytać za pomocą load_local. Wczytywanie wymaga ustawienia allow_dangerous_deserialization=True, ponieważ indeks korzysta z formatu pickle.
db.save_local("faiss_index")
db = FAISS.load_local(
"faiss_index", embeddings,
allow_dangerous_deserialization=True
)Trafność a różnorodność
Zwykłe wyszukiwanie podobieństwa może zwrócić cztery niemal identyczne fragmenty. Czasami potrzebują Państwo różnorodnych wyników obejmujących różne aspekty odpowiedzi. Właśnie w tym pomaga MMR.
Wyszukiwanie MMR
Maximal Marginal Relevance (MMR) równoważy trafność i różnorodność, wybierając fragmenty trafne, ale niezawierające powtórzeń. Należy użyć search_type="mmr" za pośrednictwem interfejsu retrievera.
retriever = db.as_retriever(
search_type="mmr",
search_kwargs={"k": 4, "fetch_k": 20}
)
docs = retriever.invoke("password reset")Wybór między Chroma a FAISS
Chroma jest przyjazna w użyciu, zapewnia trwałość danych i dobrze nadaje się do prototypów oraz małych aplikacji. FAISS jest szybszy przy dużej skali i idealnie nadaje się do wyszukiwania w pamięci. Oba rozwiązania udostępniają similarity_search oraz as_retriever, więc przełączanie między nimi jest łatwe.
Szybki test
Sprawdźcie Państwo swoją wiedzę na temat magazynów wektorowych.
Podsumowanie: Chroma i FAISS
Zbudowali Państwo magazyny wektorowe za pomocą Chroma.from_documents (z użyciem persist_directory) oraz FAISS.from_documents, wykonywali wyszukiwanie za pomocą similarity_search(query, k=4) i zapisywali oraz wczytywali oba indeksy. Używali Państwo as_retriever wraz z MMR, aby uzyskiwać różnorodne wyniki, a także nauczyli się, kiedy wybrać poszczególne magazyny.
Często zadawane pytania
Czy lekcja „Bazy wektorowe: Chroma i FAISS” jest bezpłatna?
Tak — pełny tekst „Bazy wektorowe: Chroma i FAISS” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Bazy wektorowe: Chroma i FAISS”?
Tworzenie i utrwalanie baz wektorowych, wyszukiwanie podobieństwa, pobieranie MMR, wyszukiwanie hybrydowe. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Bazy wektorowe: Chroma i FAISS”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Architektura LangChain i LCEL
- Wczytywanie, dzielenie i osadzanie dokumentów
- Bazy wektorowe: Chroma i FAISS
- Tworzenie systemu pytań i odpowiedzi RAG od początku do końca