Vektordatabaser: Pinecone, Weaviate og pgvector · Lektion

Integration med LLM-frameworks

Lær at forbinde vektordatabaser med populære orkestreringsframeworks til LLM'er som LangChain eller LlamaIndex.

Lektion 2 af 412 trin

Integration med LLM-frameworks er en gratis Vektordatabaser: Pinecone, Weaviate og pgvector-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Vektordatabaser: Pinecone, Weaviate og pgvector, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Vektordatabaser: Pinecone, Weaviate og pgvector-kurset indeholder 4 lektioner i alt.

LLM-frameworks til RAG

Velkommen! I denne lektion lærer vi, hvordan du forbinder vektordatabaser med effektive frameworks til orkestrering af LLM'er. Disse frameworks gør det nemmere at bygge komplekse AI-applikationer som Retrieval-Augmented Generation (RAG).

Tænk på dem som værktøjer, der hjælper din sprogmodel med at kommunikere effektivt med din vektordatabase.

Hvorfor bruge LLM-frameworks?

Det kræver mange trin at bygge RAG-applikationer: indlæsning af data, opdeling af tekst, generering af indlejringer, lagring af dem i en vektordatabase, hentning af relevante tekststykker og til sidst overførsel af dem til en LLM.

LLM-frameworks effektiviserer denne proces ved at:

  • Abstrahere kompleksitet: Levere en samlet grænseflade til forskellige komponenter.
  • Give modularitet: Gøre det nemt at udskifte forskellige modeller eller databaser.
  • Håndtere arbejdsgange: Hjælpe med at kæde forskellige operationer sammen.

Introduktion til LangChain

LangChain er et populært framework til udvikling af applikationer, der drives af sprogmodeller. Det er kendt for sit modulære design, som gør det nemt at bygge komplekse LLM-arbejdsgange.

Vigtige begreber i LangChain omfatter:

  • Kæder: Sekvenser af kald til LLM'er eller andre hjælpeværktøjer.
  • Agenter: LLM'er, der beslutter, hvilke værktøjer der skal bruges, og i hvilken rækkefølge.
  • Hentere: Komponenter, der henter dokumenter fra en datakilde.
  • Vektorlager: Integrationer med forskellige vektordatabaser.

Introduktion til LlamaIndex

LlamaIndex (tidligere GPT Index) er endnu et førende dataframework til LLM-applikationer. Det fokuserer i høj grad på dataindlæsning, indeksering og hentning for at udvide LLM'ers viden.

LlamaIndex er især stærk inden for:

  • Datastik: Nem indlæsning af data fra mange kilder.
  • Dataindeks: Strukturering af data til effektiv hentning (f.eks. VectorStoreIndex).
  • Forespørgselsmotorer: En grænseflade til forespørgsler i dine indekserede data.

LangChain: Konfiguration af et vektorlager

LangChain gør det nemt at integrere med forskellige vektordatabaser. Her bruger vi en Chroma-database i hukommelsen til at demonstrere konfigurationen.

Bemærk, hvordan `Chroma.from_documents` håndterer både indlejring og lagring.

from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_core.documents import Document

# Dummy Embedding Model for demonstration
class DummyEmbeddings(OpenAIEmbeddings):
    def embed_documents(self, texts):
        return [[0.1] * 1536 for _ in texts]
    def embed_query(self, text):
        return [0.1] * 1536

embeddings = DummyEmbeddings()

docs = [
    Document(page_content="The quick brown fox."),
    Document(page_content="AI is transforming industries."),
    Document(page_content="Vector databases are key."),
]

# Create an in-memory Chroma vector store
db = Chroma.from_documents(docs, embeddings)

print("Chroma vector store initialized.")
print(f"Number of documents: {len(docs)}")

LangChain: Håndtering af dokumenter

Før data gemmes i en vektordatabase, skal de ofte indlæses og behandles. LangChain indeholder DocumentLoaders til at læse data og TextSplitters til at opdele dem i håndterbare tekststykker.

Det sikrer optimal hentning og en passende promptlængde for LLM'er.

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
import os

# Create a dummy text file
with open("sample.txt", "w") as f:
    f.write("This is a long text about RAG. "
            "It combines retrieval with generation. "
            "Vector databases are essential here.")

# Load documents
loader = TextLoader("sample.txt")
documents = loader.load()

# Split documents into chunks
text_splitter = CharacterTextSplitter(
    chunk_size=50, chunk_overlap=0
)
split_docs = text_splitter.split_documents(documents)

print(f"Original doc content: {documents[0].page_content[:40]}...")
print(f"Number of split chunks: {len(split_docs)}")
print(f"First chunk: {split_docs[0].page_content}")

os.remove("sample.txt") # Clean up

LangChain: Oprettelse af en henter

Når dit vektorlager er konfigureret, kan du omdanne det til en Retriever. Denne komponent har ansvaret for at hente relevante dokumenter baseret på en forespørgsel, hvilket er afgørende for RAG's 'hentning'.

Henteren abstraherer vektordatabasens underliggende søgelogik.

from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_core.documents import Document

# Dummy Embeddings & Documents
class DummyEmbeddings(OpenAIEmbeddings):
    def embed_documents(self, texts): return [[0.1] * 1536 for _ in texts]
    def embed_query(self, text): return [0.1] * 1536
embeddings = DummyEmbeddings()
docs = [
    Document(page_content="Apples are red."),
    Document(page_content="Bananas are yellow."),
    Document(page_content="Grapes are purple."),
]
db = Chroma.from_documents(docs, embeddings)

# Convert the vector store into a retriever
retriever = db.as_retriever()

query = "What color are grapes?"
retrieved_docs = retriever.invoke(query)

print(f"Query: '{query}'")
print(f"Retrieved {len(retrieved_docs)} documents.")
for i, doc in enumerate(retrieved_docs):
    print(f"  Doc {i+1}: {doc.page_content}")

LlamaIndex: Indeksering af dokumenter

LlamaIndex bruger begrebet 'indeks' til at strukturere dine data, så de effektivt kan hentes. VectorStoreIndex er en almindelig type, der bruger en vektordatabase til lighedssøgning.

Dette eksempel viser, hvordan du opretter et indeks i hukommelsen, der er baseret på Chroma, med LlamaIndex.

from llama_index.core import VectorStoreIndex, Document
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.vector_stores.chroma import ChromaVectorStore
import chromadb
from llama_index.core import Settings

# Initialize an in-memory Chroma client
db = chromadb.Client()
chroma_collection = db.get_or_create_collection("my_ll_docs")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

# Dummy documents
documents = [
    Document(text="LlamaIndex builds LLM apps."),
    Document(text="It helps with data indexing."),
    Document(text="Vector dbs are core for retrieval."),
]

# Dummy embedding model for runnable example
class DummyLlamaIndexEmbeddings(OpenAIEmbedding):
    def _get_query_embedding(self, query): return [0.2] * 1536
    def _get_text_embedding(self, text): return [0.2] * 1536

Settings.embed_model = DummyLlamaIndexEmbeddings()

# Create a VectorStoreIndex
index = VectorStoreIndex.from_documents(
    documents, vector_store=vector_store
)

print("LlamaIndex VectorStoreIndex created.")

LlamaIndex: Forespørgsler i indekset

Når et indeks er oprettet i LlamaIndex, kan du bruge en QueryEngine til at udføre søgninger. Forespørgselsmotoren håndterer hentningen fra det underliggende vektorlager og kan valgfrit interagere med en LLM for at sammenfatte et svar.

Her fokuserer vi på selve hentningen.

from llama_index.core import VectorStoreIndex, Document
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.vector_stores.chroma import ChromaVectorStore
import chromadb
from llama_index.core import Settings

# Initialize in-memory Chroma client & store
db = chromadb.Client()
chroma_collection = db.get_or_create_collection("my_ll_docs_query")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)

# Dummy documents
documents = [
    Document(text="LlamaIndex helps build context-augmented LLM apps."),
    Document(text="It provides tools for data ingestion."),
    Document(text="Retrieval is key for RAG."),
]

# Dummy embedding model
class DummyLlamaIndexEmbeddings(OpenAIEmbedding):
    def _get_query_embedding(self, query): return [0.2] * 1536
    def _get_text_embedding(self, text): return [0.2] * 1536

Settings.embed_model = DummyLlamaIndexEmbeddings()

# Create and populate index
index = VectorStoreIndex.from_documents(
    documents, vector_store=vector_store
)

# Create a query engine
query_engine = index.as_query_engine()

# Perform a query
query = "What does LlamaIndex do?"
response = query_engine.query(query)

print(f"Query: '{query}'")
print(f"Response (partial): {str(response)[:80]}...")

Forbindelse af frameworks og VDB'er

Både LangChain og LlamaIndex tilbyder robuste integrationer med forskellige vektordatabaser (f.eks. Pinecone, Weaviate, pgvector osv.). De leverer et abstraktionslag, så du kan skifte mellem VDB'er med minimale kodeændringer.

Det gør det nemmere at udvikle og vedligeholde RAG-applikationer, fordi applikationslogikken afkobles fra den specifikke databaseimplementering.

Test af frameworkkomponenter

Hvilke af følgende er almindelige komponenter eller begreber i frameworks til orkestrering af LLM'er (som LangChain eller LlamaIndex), når du bygger RAG-applikationer?

Opsummering: Integration med frameworks

Godt gået! Du har lært, hvordan frameworks til orkestrering af LLM'er som LangChain og LlamaIndex gør det nemmere at bygge RAG-applikationer ved at integrere med vektordatabaser.

  • De leverer abstraktioner til VDB'er.
  • De tilbyder værktøjer til indlæsning, opdeling og indeksering af dokumenter.
  • De muliggør effektiv hentning gennem hentere og forespørgselsmotorer.

Disse frameworks er afgørende for at håndtere kompleksiteten i moderne AI-applikationer.

Gratis at komme i gang

Lær Vektordatabaser: Pinecone, Weaviate og pgvector med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Integration med LLM-frameworks” gratis?

Ja — alle 3 lektioner i læringssporet Vektordatabaser: Pinecone, Weaviate og pgvector, inklusive “Integration med LLM-frameworks”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Vektordatabaser: Pinecone, Weaviate og pgvector-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Integration med LLM-frameworks”?

Lær at forbinde vektordatabaser med populære orkestreringsframeworks til LLM'er som LangChain eller LlamaIndex. Du øver dig i Vektordatabaser: Pinecone, Weaviate og pgvector med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Vektordatabaser: Pinecone, Weaviate og pgvector?

Der kræves ingen tidligere erfaring. Vektordatabaser: Pinecone, Weaviate og pgvector på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Integration med LLM-frameworks”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Vektordatabaser: Pinecone, Weaviate og pgvector-lektion?

Ja. Alle Vektordatabaser: Pinecone, Weaviate og pgvector-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Oversigt over RAG-systemarkitektur
  2. Integration med LLM-frameworks
  3. Kontekstuel informationshentning
  4. Chunking-strategier til RAG
← Tilbage til Vektordatabaser: Pinecone, Weaviate og pgvector