Eine Low-Code-Plattform, die die Einfachheit von No-Code mit der Leistung von Full-Code verbindet 🚀
Jetzt kostenlos starten

LangChain Chroma-Integration: Vollständiges Vector Store-Tutorial

Inhaltsverzeichnis
LangChain Chroma-Integration: Vollständiges Vector Store-Tutorial

LangChain Chroma Integration ist ein innovatives Tool, das die Dokumentensuche durch semantische Vektorsuchen revolutioniert. Im Gegensatz zu herkömmlichen schlüsselwortbasierten Systemen erkennt dieser Ansatz den Kontext und die Bedeutung von Abfragen und ist daher besonders effektiv für Anwendungen wie Kundensupport, Rechtsrecherche und Wissensmanagement. Durch die Kombination LangChainDurch die Kombination der Orchestrierungstools mit der Vektordatenbank von Chroma können Benutzer Systeme erstellen, die die relevantesten Dokumente auf der Grundlage konzeptioneller Ähnlichkeit abrufen.

Zu den wichtigsten Vorteilen zählen die dauerhafte Speicherung von Einbettungen, die effiziente Speichernutzung und die hohen Abrufgeschwindigkeiten. So kann beispielsweise eine Suche nach „Automobil“ Dokumente zum Thema „Autos“ liefern, oder eine Abfrage nach „Umsatzwachstum“ kann Ergebnisse zum Thema „Umsatzsteigerungen“ liefern. Dadurch eignet sich die Lösung ideal für die Verarbeitung großer Wissensdatenbanken mit vielfältigen Abfragen.

Zum Einrichten von LangChain Chroma müssen mehrere Python-Pakete installiert werden, darunter langchain-chroma und chromadbEntwickler können zwischen lokaler Bereitstellung für die Entwicklung oder Cloud-Bereitstellung für Skalierbarkeit wählen. Durch die Organisation von Projekten mit sicherer API-Schlüsselverwaltung und strukturierten Verzeichnissen können Benutzer häufige Fehler wie Konfigurationsfehler oder Datenverlust vermeiden.

Für diejenigen, die nach einfacheren Arbeitsabläufen suchen, Latenknoten bietet eine visuelle Alternative. Es ermöglicht Benutzern den Aufbau von Dokumentenabrufsystemen ohne komplexe Datenbankkonfigurationen und macht sie auch für nicht-technische Benutzer zugänglich. Durch die Automatisierung von Aufgaben wie der Einbettungsgenerierung und Vektorspeicherung reduziert Latenode Entwicklungszeit und -aufwand.

Egal, ob Sie ein Kundensupportsystem aufbauen, juristische Recherchen durchführen oder technische Dokumentationen verwalten, LangChain Chroma und Tools wie Latenode bieten die Flexibilität und Leistung, die Sie für Ihre Anforderungen benötigen.

Die richtigen Langkette und Open Source Vector DB Chroma für die semantische Suche mit OpenAI's LLM | Code

Langkette

Voraussetzungen und Umgebungseinrichtung

Zum Einrichten der LangChain Chroma-Integrationist es wichtig, die richtigen Paketversionen zu verwenden und Abhängigkeiten sorgfältig zu verwalten.

Erforderliche Pakete und Abhängigkeiten

Die Integration zwischen LangChain und Chroma basiert auf mehreren Schlüsselpaketen, die jeweils zur Speicherung, Abfrage und Verarbeitung von Vektoren beitragen. Das Hauptpaket, langchain-chroma, fungiert als Verbindung zwischen dem Framework von LangChain und der Vektordatenbank von Chroma.

Um die erforderlichen Pakete zu installieren, verwenden Sie die folgenden Befehle:

pip install -qU "langchain-chroma>=0.1.2"
pip install chromadb
pip install langchain
pip install -qU langchain-openai
pip install python-dotenv
  • langchain-chroma: Bietet die Integrationsschicht für die nahtlose Interaktion zwischen LangChain und Chroma.
  • chromadb: Behandelt die Kernoperationen der Vektordatenbank.
  • langchain: Stellt die grundlegenden Tools für die Dokumentenverarbeitung und Kettenorchestrierung bereit.
  • langchain-openai: Aktiviert OpenAI-Einbettungsmodelle. Sie können dies durch Alternativen wie ersetzen langchain-google-genai or langchain-huggingface wenn benötigt.
  • python-dotenv: Verwaltet Umgebungsvariablen sicher.

Ein häufiges Problem während der Einrichtung wurde von einem Stapelüberlauf Benutzer beim Erstellen einer Chat-PDF-Anwendung:

"ImportError: Chromadb Python-Paket konnte nicht importiert werden. Bitte installieren Sie es mit pip install chromadb" [1]

Dieser Fehler tritt typischerweise auf, wenn chromadb fehlt entweder oder es liegen Versionskonflikte vor. Eine Neuinstallation oder ein Upgrade des Pakets behebt das Problem.

Sobald die Abhängigkeiten installiert sind, ist es an der Zeit, Ihr Projekt zu organisieren und API-Schlüssel sicher zu verwalten.

Projektstruktur und API-Schlüsselverwaltung

Ein gut strukturierter Projektaufbau hilft, Konfigurationsfehler zu vermeiden und stellt sicher, dass sensible Daten geschützt bleiben. Hier ist ein Vorschlag für eine Struktur:

langchain-chroma-project/
├── .env
├── .gitignore
├── main.py
├── documents/
│   └── sample_docs/
├── vector_store/
│   └── chroma_db/
└── requirements.txt
  • .env: Verwenden Sie diese Datei, um API-Schlüssel und Konfigurationsvariablen sicher zu speichern. Sie sollte niemals in die Versionskontrolle aufgenommen werden.
  • .gitignore: Hinzufügen .env und vector_store/chroma_db/ um zu verhindern, dass vertrauliche Daten und große Datenbankdateien festgeschrieben werden.

Hier ist ein Beispiel für Umgebungsvariablen, die in die .env Datei:

OPENAI_API_KEY=your_openai_api_key_here
CHROMA_HOST=localhost
CHROMA_PORT=8000

Um diese Variablen in Ihre Anwendung zu laden, verwenden Sie die python-dotenv Paket. Callum Macphersons Tutorial zur Implementierung von RAG mit LangChain und Chroma empfiehlt beispielsweise die Verwendung dotenv.load_dotenv() als zuverlässige Methode zur sicheren Verwaltung von API-Schlüsseln [2].

Wenn Ihr Projekt organisiert und die Abhängigkeiten bereit sind, besteht der nächste Schritt darin, zwischen lokaler und Cloud-Bereitstellung für Ihr Chroma-Setup zu wählen.

Lokale vs. Cloud-Chroma-Bereitstellungsoptionen

Bei der Bereitstellung Ihrer LangChain Chroma Vektorstore, Sie können sich je nach Ihren Leistungs- und Skalierbarkeitsanforderungen für eine lokale oder Cloud-Bereitstellung entscheiden.

  • Lokale Bereitstellung: Ideal für Entwicklung und Prototyping. Die lokale Ausführung von Chroma bietet volle Kontrolle und eliminiert Hosting-Kosten. Allerdings kann die Skalierbarkeit eingeschränkt sein und erfordert die manuelle Verwaltung von Backups.
  • Cloud-Bereitstellung: Diese Option bietet höhere Skalierbarkeit, automatische Backups und reduzierten Wartungsaufwand durch den gehosteten Dienst von Chroma oder selbstverwaltete Cloud-Instanzen. Der Nachteil sind die zusätzlichen Kosten für das Hosting und die Abhängigkeit von externer Infrastruktur.

Bei den meisten Projekten ermöglicht Ihnen eine lokale Bereitstellung die Validierung Ihres Setups, ohne externe Abhängigkeiten oder Netzwerklatenz einzuführen. Sobald Sie die Details geklärt haben, kann der Übergang zu einer Cloud-Umgebung größere Anwendungen unterstützen.

Während LangChain Chroma erweiterte Vektorsuchfunktionen ermöglicht, vereinfachen Tools wie Latenode den Prozess mit visuellen Workflows und machen komplexe Datenbankkonfigurationen überflüssig.

Erstellen eines LangChain Chroma Vector Store

Erstellen einer LangChain Chroma Vektorspeicher umfasst mehrere wichtige Schritte: Laden von Dokumenten, Generieren von Einbettungen, Initialisieren des Speichers und Einrichten von Abrufmethoden. Jeder Schritt spielt eine entscheidende Rolle beim Aufbau eines effizienten und skalierbaren Systems für den Dokumentenabruf.

Dokumente in LangChain laden

Das Laden von Dokumenten dient als Grundlage für die Integration von LangChain Chroma. Das Framework unterstützt verschiedene Dateiformate und verfügt über für unterschiedliche Dokumenttypen optimierte Ladeprogramme.

So können beispielsweise PDF-Dokumente mit dem PyPDFLoader, das Text extrahiert und dabei die Struktur des Dokuments beibehält:

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("path/to/document.pdf")
documents = loader.load()
print(f"Loaded {len(documents)} pages from PDF")

Wenn Sie mehrere Dateien in einem Ordner bearbeiten, DirectoryLoader vereinfacht den Prozess durch Stapelladen aller relevanten Dateien:

from langchain_community.document_loaders import DirectoryLoader, TextLoader

loader = DirectoryLoader(
    "documents/",
    glob="**/*.txt",
    loader_cls=TextLoader,
    show_progress=True
)
documents = loader.load()

Für webbasierte Inhalte ist die WebBaseLoader Ruft HTML-Dokumente von URLs ab und verarbeitet sie:

from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://example.com/article")
web_documents = loader.load()

Bei der Arbeit mit großen Dateien ist es wichtig, diese in kleinere, kontexterhaltende Teile aufzuteilen. Die RecursiveCharacterTextSplitter bewältigt dies effektiv:

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len
)
chunks = text_splitter.split_documents(documents)

Dieser Chunking-Prozess stellt sicher, dass die Dokumente verwaltbar und zum Einbetten und Abrufen bereit sind.

Einbettungen erstellen und konfigurieren

Embeddings bilden das Rückgrat der semantischen Suche und wandeln Text in numerische Darstellungen um. LangChain Chroma unterstützt mehrere Embedding-Modelle, wobei OpenAI-Embeddings eine beliebte Wahl für Produktionsumgebungen sind.

Zum Einrichten von OpenAI-Einbettungen benötigen Sie einen API-Schlüssel und ein angegebenes Modell:

import os
from langchain_openai import OpenAIEmbeddings
from dotenv import load_dotenv

load_dotenv()

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    openai_api_key=os.getenv("OPENAI_API_KEY")
)

Für diejenigen, die nach budgetfreundlichen Optionen suchen, Gesicht umarmen bietet kostenlose Einbettungsmodelle:

from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L6-v2"
)

Bevor Sie fortfahren, sollten Sie Ihr Einbettungs-Setup testen, um sicherzustellen, dass alles richtig funktioniert:

# Test embedding generation
test_text = "This is a sample document for testing embeddings."
test_embedding = embeddings.embed_query(test_text)
print(f"Embedding dimension: {len(test_embedding)}")

Sobald die Einbettungen überprüft wurden, können Sie mit der Erstellung eines persistenten Vektorspeichers fortfahren.

Initialisieren und Beibehalten des Vektorspeichers

Der Chroma-Vektor-Store fungiert als Datenbank zum Speichern von Dokumenteinbettungen. Es ermöglicht außerdem eine dauerhafte Speicherung, sodass die gespeicherten Einbettungen wiederverwendet werden können.

So erstellen Sie einen neuen Vektorspeicher aus Ihren Dokumenten:

from langchain_chroma import Chroma

# Create vector store from documents
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./vector_store/chroma_db"
)

print(f"Vector store created with {vectorstore._collection.count()} documents")

Wenn bereits ein Vektorspeicher vorhanden ist, kann dieser direkt geladen werden, ohne ihn neu zu erstellen:

# Load existing vector store
vectorstore = Chroma(
    persist_directory="./vector_store/chroma_db",
    embedding_function=embeddings
)

Um mehrere Sammlungen innerhalb einer einzelnen Chroma-Instanz zu verwalten, können Sie einen Sammlungsnamen angeben:

# Create named collection
vectorstore = Chroma(
    collection_name="technical_docs",
    embedding_function=embeddings,
    persist_directory="./vector_store/chroma_db"
)

Durch das Beibehalten von Einbettungen ermöglichen Sie einen effizienten Abruf, der für Anwendungen, die eine schnelle und genaue Dokumentsuche erfordern, von entscheidender Bedeutung ist.

Dokumentindizierungs- und Abrufmuster

LangChain Chroma bietet vielseitige Tools zum Indizieren, Aktualisieren und Abrufen von Dokumenten und ist daher ideal für Retrieval-Augmented Generation (RAG)-Systeme.

So fügen Sie neue Dokumente hinzu:

# Add new documents
new_documents = ["Additional document content here"]
vectorstore.add_texts(
    texts=new_documents,
    metadatas=[{"source": "manual_addition", "date": "2025-08-22"}]
)

Zum Abrufen von Dokumenten ermittelt die Ähnlichkeitssuche die engsten Übereinstimmungen basierend auf der Vektornähe:

# Perform similarity search
query = "What are the main features of the product?"
results = vectorstore.similarity_search(
    query=query,
    k=3  # Return top 3 most similar documents
)

for i, doc in enumerate(results):
    print(f"Result {i+1}: {doc.page_content[:200]}...")

Um Vertrauensmetriken einzubeziehen, verwenden Sie die Ähnlichkeitssuche mit Bewertungen:

# Similarity search with scores
results_with_scores = vectorstore.similarity_search_with_score(
    query=query,
    k=3
)

for doc, score in results_with_scores:
    print(f"Score: {score:.4f} - Content: {doc.page_content[:150]}...")

Für vielfältigere Ergebnisse sorgt die Suche nach maximaler marginaler Relevanz (MMR), bei der Relevanz und Vielfalt im Gleichgewicht gehalten werden:

# MMR search for diverse results
mmr_results = vectorstore.max_marginal_relevance_search(
    query=query,
    k=3,
    fetch_k=10,  # Fetch more candidates
    lambda_mult=0.7  # Balance relevance vs diversity
)

Während LangChain Chroma sich durch die Verwaltung von Einbettungen und Suchen auszeichnet, bieten Plattformen wie Latenode einen visuelleren Ansatz zur Automatisierung von Arbeitsabläufen und reduzieren so den Bedarf an komplexer Datenbankverwaltung.

Leistungsoptimierung und häufige Fallstricke

Sobald Ihr Vektorspeicher eingerichtet ist, ist die Feinabstimmung seiner Leistung für einen schnellen und präzisen Datenabruf unerlässlich. Richtig optimierte Konfigurationen können die Abrufgeschwindigkeit um bis zu 300 % und die Genauigkeit um 45 % im Vergleich zur einfachen Textsuche steigern. Diese Verbesserungen sind jedoch nur möglich, wenn Sie die richtigen Optimierungstechniken beherrschen und häufige Fehler vermeiden, die Ihre Implementierung beeinträchtigen können.

Leistungsoptimierung für Vector Stores

Bei der Arbeit mit großen Dokumentsammlungen ist die Stapelindizierung eine praktische Möglichkeit, den Aufnahmeprozess zu beschleunigen. Das Hinzufügen einzelner Dokumente kann langsam und ressourcenintensiv sein, aber die Stapelverarbeitung reduziert den Aufwand und verbessert die Speichernutzung.

# Adding documents one by one (inefficient)
for doc in documents:
    vectorstore.add_documents([doc])

# Adding documents in batches (optimized)
batch_size = 100
for i in range(0, len(documents), batch_size):
    batch = documents[i:i + batch_size]
    vectorstore.add_documents(batch)
    print(f"Processed batch {i // batch_size + 1}")

Ein weiterer wichtiger Bereich ist die Optimierung der Suchparameter. Das Anpassen von Werten wie k (Anzahl der nächsten Nachbarn) und das Festlegen von Ähnlichkeitsschwellenwerten gewährleisten sowohl Geschwindigkeit als auch Relevanz in den Suchergebnissen.

# Optimized search configuration
results = vectorstore.similarity_search_with_score(
    query=query,
    k=5,
    score_threshold=0.7
)

# Filter results based on confidence scores
filtered_results = [(doc, score) for doc, score in results if score >= 0.75]

Effizientes Speichermanagement ist ebenfalls unerlässlich, insbesondere bei großen Vektorspeichern. Techniken wie Stapelverarbeitung und Chunking helfen, Speicherprobleme zu vermeiden. Die Persistenzfunktionen von Chroma gewährleisten Stabilität durch die Speicherung der Daten auf der Festplatte.

# Managing memory with chunking
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    length_function=len
)

# Selecting an efficient embedding model
embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L6-v2",
    model_kwargs={'device': 'cpu'}
)

Für Produktionsumgebungen, Chroma Cloud bietet eine serverlose Vektorspeicherlösung, die lokale Ressourcenbeschränkungen eliminiert. Es verspricht eine schnelle Datenbankerstellung und -bereitstellung – angeblich in weniger als 30 Sekunden – und bietet neuen Benutzern 5 US-Dollar an Gratisguthaben [3].

Diese Strategien bilden die Grundlage für zuverlässige Leistung und machen Ihren Vektorspeicher bereit für reale Anwendungen.

Fehlerbehebung bei häufigen Problemen

Auch bei sorgfältiger Optimierung können gewisse Herausforderungen auftreten. Ein häufiges Problem ist Einbettungsdimensionskonflikte, die auftreten, wenn unterschiedliche Modelle für die Indizierung und Abfrage verwendet werden. Diese Inkonsistenz führt zu inkompatiblen Vektordarstellungen.

# Problem: Dimension mismatch due to different embedding models
# Indexing with one model
indexing_embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(docs, indexing_embeddings)

# Querying with another model
query_embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

# Solution: Use the same embedding model consistently
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(docs, embeddings)
results = vectorstore.similarity_search(query)

Eine weitere häufige Falle ist Persistenzprobleme, was zu Datenverlust führen kann, wenn der Vektorspeicher nicht ordnungsgemäß gespeichert oder wiederhergestellt wird. Geben Sie immer ein Persistenzverzeichnis an und testen Sie den Wiederherstellungsprozess regelmäßig, um die Datenintegrität sicherzustellen.

# Setting up persistence
vectorstore = Chroma(
    persist_directory="./chroma_db",
    embedding_function=embeddings,
    collection_name="my_documents"
)

# Save the state
vectorstore.persist()
print(f"Stored {vectorstore._collection.count()} documents")

# Test loading the saved data
loaded_store = Chroma(
    persist_directory="./chroma_db",
    embedding_function=embeddings,
    collection_name="my_documents"
)

Auch eine unsachgemäße Aufteilung der Daten in Blöcke kann die Abrufleistung beeinträchtigen. Zu kleine oder zu große Blöcke können den Kontext verlieren oder die Effizienz beeinträchtigen. Achten Sie auf ein Gleichgewicht, das den Kontext beibehält und gleichzeitig die Größe überschaubar hält.

Optimierungsbereich Beste Übung Impact
Indizierung Verwenden Sie die Stapelverarbeitung (100–500 Dokumente pro Stapel). Beschleunigt die Einnahme
Suchparameter Melodie k (z. B. 3–5) und legen Sie Ähnlichkeitsschwellenwerte fest (≥0.7). Verbessert Relevanz und Geschwindigkeit
Speicherverwaltung Text in 500–1000 Zeichen aufteilen und Persistenz aktivieren Verhindert Speicherprobleme
Einbettung von Konsistenz Verwenden Sie dasselbe Modell für die Indizierung und Abfrage Vermeidet Dimensionsabweichungen
Beharrlichkeit Wiederherstellungsvorgänge regelmäßig sichern und testen Verhindert Datenverlust

Schließlich Fehlkonfigurationen von Umgebungsvariablen kann Authentifizierungsprobleme verursachen, insbesondere in Cloud-Bereitstellungen. Mit Tools wie der Chroma CLI und .env Dateien vereinfachen die Einrichtung der Umgebung und minimieren Fehler.

# Setting up environment variables for Chroma Cloud
import os
from dotenv import load_dotenv

load_dotenv()

# Check required environment variables
required_vars = ["CHROMA_API_KEY", "CHROMA_SERVER_HOST"]
for var in required_vars:
    if not os.getenv(var):
        raise ValueError(f"Missing required environment variable: {var}")

Indem Sie diese allgemeinen Herausforderungen angehen und die beschriebenen Optimierungen implementieren, können Sie sicherstellen, dass Ihr Vektorspeicher auch unter anspruchsvollen Bedingungen effizient und zuverlässig arbeitet.

sbb-itb-23997f1

Praktische Codebeispiele für LangChain Chroma-Anwendungsfälle

Dieser Abschnitt befasst sich mit der praktischen Anwendung von LangChain und Chroma und bietet Schritt-für-Schritt-Beispiele für die Handhabung verschiedener Dokumenttypen und komplexer Abfrageaufgaben. Diese Beispiele sollen Ihnen beim Erstellen funktionaler, produktionsreifer Integrationen helfen.

Schnelle Integrationseinrichtung in 10 Minuten

Codebeispiel: Einrichten der LangChain + Chroma-Integration

Hier ist ein einfaches Beispiel, wie Sie eine LangChain- und Chroma-Integration in nur 10 Minuten zum Laufen bringen. Dieses Setup konzentriert sich auf die wesentlichen Komponenten, die für die meisten Retrieval-Augmented Generation (RAG)-Anwendungen erforderlich sind.

import os
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from dotenv import load_dotenv

# Load environment variables
load_dotenv()

# Initialize embeddings
embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    openai_api_key=os.getenv("OPENAI_API_KEY")
)

# Load and split documents
loader = TextLoader("sample_document.txt")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len
)
splits = text_splitter.split_documents(documents)

# Create vector store with persistence
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=embeddings,
    persist_directory="./chroma_db",
    collection_name="quick_setup"
)

# Test the setup
query = "What is the main topic discussed?"
results = vectorstore.similarity_search(query, k=3)
print(f"Found {len(results)} relevant chunks")

Dieses Beispiel zeigt, wie man einen funktionalen Vektorspeicher mit sinnvollen Standardwerten erstellt. Es verwendet Texteinbettung-3-klein Für kostengünstige Einbettungen werden Dokumente in Segmente mit jeweils 1,000 Zeichen und einer Überlappung von 200 Zeichen unterteilt, um den Kontext beizubehalten, und die lokale Persistenz wird für die Zuverlässigkeit verwendet.

Um das Setup zu überprüfen, können Sie den Vektorspeicher mit dem similarity_search Methode, die die relevantesten Dokumentblöcke basierend auf der Vektorähnlichkeit abruft.

# Enhanced search with confidence scores
results_with_scores = vectorstore.similarity_search_with_score(
    query="main topic",
    k=5
)

for doc, score in results_with_scores:
    print(f"Score: {score:.3f}")
    print(f"Content: {doc.page_content[:100]}...")
    print("---")

Kombinieren mehrerer Dokumenttypen

Einheitlicher Dokumentenspeicher: Mit diesem Ansatz können Sie Dokumente verschiedener Formate – wie PDFs, Textdateien, Webseiten und CSV-Dateien – in einen einzigen Chroma-Vektorspeicher laden und verarbeiten. Durch die Zentralisierung Ihrer Wissensdatenbank vereinfachen Sie den Abruf aus verschiedenen Quellen. [4].

Für reale Anwendungsfälle ist die Verarbeitung mehrerer Dateitypen oft unerlässlich. Die Dokumentlader von LangChain erleichtern die Verarbeitung dieser Formate und gewährleisten gleichzeitig konsistente Chunking-Strategien.

from langchain_community.document_loaders import (
    DirectoryLoader,
    PyPDFLoader,
    WebBaseLoader,
    CSVLoader
)
from pathlib import Path

def load_mixed_documents():
    all_documents = []

    # Load PDFs from directory
    pdf_loader = DirectoryLoader(
        path="./documents/pdfs/",
        glob="**/*.pdf",
        loader_cls=PyPDFLoader
    )
    pdf_docs = pdf_loader.load()
    all_documents.extend(pdf_docs)

    # Load web content
    web_urls = [
        "https://example.com/article1",
        "https://example.com/article2"
    ]
    web_loader = WebBaseLoader(web_urls)
    web_docs = web_loader.load()
    all_documents.extend(web_docs)

    # Load CSV data
    csv_loader = CSVLoader(
        file_path="./data/knowledge_base.csv",
        csv_args={'delimiter': ','}
    )
    csv_docs = csv_loader.load()
    all_documents.extend(csv_docs)

    return all_documents

# Process all document types uniformly
documents = load_mixed_documents()

# Assign document type metadata
for doc in documents:
    if hasattr(doc, 'metadata'):
        source = doc.metadata.get('source', '')
        if source.endswith('.pdf'):
            doc.metadata['doc_type'] = 'pdf'
        elif source.startswith('http'):
            doc.metadata['doc_type'] = 'web'
        elif source.endswith('.csv'):
            doc.metadata['doc_type'] = 'csv'

Indem Sie jedes Dokument mit Metadaten wie dem Typ versehen, können Sie die Ergebnisse beim Abrufen einfach filtern. Dies gewährleistet eine konsistente Verarbeitung über alle Formate hinweg und bietet gleichzeitig die Flexibilität, bestimmte Dokumenttypen abzufragen.

# Create unified vector store
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,
    chunk_overlap=100,
    separators=["", "", " ", ""]
)

splits = text_splitter.split_documents(documents)

# Add chunk metadata
for i, split in enumerate(splits):
    split.metadata['chunk_id'] = i
    split.metadata['chunk_size'] = len(split.page_content)

vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=embeddings,
    persist_directory="./multi_format_db",
    collection_name="mixed_documents"
)

# Search with document type filtering
def search_by_document_type(query, doc_type=None, k=5):
    if doc_type:
        # Filter by document type using metadata
        results = vectorstore.similarity_search(
            query=query,
            k=k*2,  # Get more results to filter
            filter={"doc_type": doc_type}
        )
        return results[:k]
    else:
        return vectorstore.similarity_search(query, k=k)

# Example searches
pdf_results = search_by_document_type("technical specifications", "pdf")
web_results = search_by_document_type("latest updates", "web")

Diese einheitliche Einrichtung vereinfacht nicht nur die Dokumentenverwaltung, sondern verbessert auch die Abrufgenauigkeit durch die Nutzung von Metadaten zum Filtern.

Verwenden von LangChain Chroma in RAG-Ketten

Durch die Integration von Chroma-Vektorspeichern in RAG-Ketten (Retrieval-Augmented Generation) werden statische Dokumentsammlungen in dynamische, abfragegesteuerte Systeme umgewandelt. Durch die Kombination von Vektorsuche und Sprachmodellgenerierung können Sie hochgradig reaktionsschnelle Retrieval-Workflows erstellen.

from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate

# Initialize language model
llm = ChatOpenAI(
    model="gpt-3.5-turbo",
    temperature=0.1,
    openai_api_key=os.getenv("OPENAI_API_KEY")
)

# Create retriever from vector store
retriever = vectorstore.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={
        "k": 4,
        "score_threshold": 0.7
    }
)

# Custom prompt template for RAG
rag_prompt = PromptTemplate(
    template="""Use the following context to answer the question. If you cannot find the answer in the context, say "I don't have enough information to answer this question."

Context: {context}

Question: {question}

Answer:""",
    input_variables=["context", "question"]
)

# Create RAG chain
rag_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    chain_type_kwargs={"prompt": rag_prompt},
    return_source_documents=True
)

# Test the RAG
rag_result = rag_chain({"question": "What is the main topic?"})
print(rag_result)

Dieses Beispiel zeigt, wie Chroma-Vektorspeicher in eine RAG-Kette integriert werden, um kontextbezogene Abfrageverarbeitung und dynamische Inhaltsgenerierung zu ermöglichen. Durch die Kombination von Retrieval und Sprachmodellierung können Sie Systeme erstellen, die präzise, ​​kontextbezogene Antworten liefern.

Latenknoten: Visuelle Dokumentenintelligenz-Workflows

Latenknoten

Latenode vereinfacht Dokumentenintelligenz-Workflows mit seinen visuellen Tools und bietet eine Alternative zu LangChain Chroma für die semantische Dokumentensuche. Durch die Verwendung visueller Komponenten zur Verwaltung von Vektorähnlichkeiten und -abrufen macht Latenode komplexe Datenbank-Setups überflüssig und gestaltet den Prozess reibungsloser und zugänglicher.

Vereinfachte Dokumentenintelligenz, Chroma-ähnliche Effizienz

Die visuellen Verarbeitungstools von Latenode rationalisieren die Entwicklung und reduzieren den Wartungsaufwand im Vergleich zu herkömmlichen Vektordatenbankintegrationen. Die visueller Workflow-Builder ermöglicht Benutzern die Automatisierung von Einbettungsmodellen, Vektorspeicherung und Abrufketten mit Drag-and-Drop-Funktionalität und reduziert so den Zeit- und Arbeitsaufwand für codeintensive Konfigurationen.

Mit seiner eingebaute DatenbankLatenode übernimmt Aufgaben wie Chunking, Embedding-Generierung und Ähnlichkeitssuche automatisch. Manuelle Konfigurationen wie Textsplitter oder die Auswahl von Embedding-Modellen sind nicht erforderlich. Dieser Ansatz bietet die gleichen Vorteile wie LangChain Chroma – präzise Dokumentensuche und kontextsensitive KI-Antworten – ohne die technischen Herausforderungen der Verwaltung einer Vektordatenbank.

Latenode unterstützt über 200 KI-Modelle, darunter OpenAI, Claude und Gemini, und ermöglicht die nahtlose Verarbeitung abgerufener Dokumentblöcke mit jedem Sprachmodell. Durch die Automatisierung der Dokumentenextraktion aus mehreren Quellen macht Latenode separate Loader und Vorverarbeitungsskripte überflüssig und vereinfacht den Workflow noch weiter.

LangChain Chroma vs. Latenode: Ein Workflow-Vergleich

Aspekt LangChain Chroma Latenknoten
Ersteinrichtung Abhängigkeiten installieren, Einbettungen konfigurieren, Vektorspeicher einrichten Komponenten ziehen, Datenquellen verbinden
Laden von Dokumenten Schreiben Sie Loader für jedes Format (PDF, CSV, Web) Integrierte Konnektoren verarbeiten mehrere Formate
Vektorverwaltung Manuelle Einbettungskonfiguration und Persistenz Automatische Einbettung und Speicherung
Abruflogik Code-Ähnlichkeitssuche und Bewertungsschwellen Visuelle Ähnlichkeitskomponenten mit UI-Steuerelementen
Umsetzung der RAG Verketten Sie mehrere Komponenten programmgesteuert Verbinden Sie den Abruf visuell mit KI-Modellen
Wartung Abhängigkeiten aktualisieren, Datenbankversionen verwalten Plattform verarbeitet Updates automatisch
Skalierung Clustereinstellungen konfigurieren, Abfragen optimieren Automatische Skalierung basierend auf Ausführungsguthaben
Fehlerbeseitigung Protokollanalyse und Code-Debugging Visueller Ausführungsverlauf und Wiederholungen

Die Workflows von Latenode vereinfachen die semantische Suche und den Kontextabruf und bieten eine intuitive, visuelle Alternative zu herkömmlichen Setups.

Vorteile des visuellen Workflow-Ansatzes von Latenode

Eines der herausragenden Merkmale von Latenode ist seine EntwicklungsgeschwindigkeitAufgaben, deren Konfiguration und Test mit LangChain Chroma Stunden dauern könnte, können mit den vorgefertigten Komponenten von Latenode oft in wenigen Minuten erledigt werden.

Für erweiterte Anforderungen bietet Latenode KI-Code-Copilot schließt die Lücke zwischen visuellen Tools und benutzerdefinierten Funktionen. Es generiert JavaScript-Code direkt in Workflows, sodass Teams ihre Fähigkeiten erweitern können, ohne den Code komplett neu schreiben zu müssen.

Die Plattform zeichnet sich außerdem durch DebuggingAnstatt Protokolldateien zu durchsuchen, können Benutzer jeden Schritt des Dokumentenverarbeitungs-Workflows visuell verfolgen. Wenn etwas schiefgeht, können bestimmte Segmente mit anderen Parametern erneut ausgeführt werden, was die Fehlerbehebung deutlich effizienter macht.

Das Preismodell von Latenode trägt zu seiner Attraktivität bei. Mit Plänen ab $ 19 / Monat, einschließlich 5,000 Ausführungsguthaben und bis zu 10 aktiven Workflows, stellt eine kostengünstige Lösung dar. Im Gegensatz zu Setups, die eine separate Vektordatenbankinfrastruktur erfordern, berechnet Latenode die Kosten auf Basis der Ausführungszeit, was häufig zu niedrigeren Betriebskosten führt.

Für Teams, die sich um den Datenschutz sorgen, bietet Latenode Self-Hosting-Optionen, sodass Workflows auf eigenen Servern ausgeführt werden können. Dies gewährleistet die Sicherheit vertraulicher Dokumente und bietet gleichzeitig die Vorteile visueller Workflows. Darüber hinaus Webhook-Trigger und -Antworten ermöglichen die Echtzeit-Dokumentenverarbeitung und die nahtlose Integration in bestehende Systeme. Anstatt APIs rund um LangChain Chroma zu erstellen, bietet Latenode HTTP-Endpunkte, die Authentifizierung, Ratenbegrenzung und Fehlerantworten automatisch handhaben.

Strategien für Produktionsbereitstellung und Skalierung

Die Bereitstellung von LangChain Chroma in einer Produktionsumgebung erfordert eine gut durchdachte Infrastruktur, effizientes Datenmanagement und Leistungsoptimierung, um die zunehmenden Datenmengen effektiv zu bewältigen.

Erweiterte Chroma-Funktionen

Chromas Cloud-Bereitstellung Dank der Funktionen von Chroma können Vektorspeicher auf einzelnen Maschinen zu verteilten Systemen weiterentwickelt werden, wodurch sie für Workloads im Unternehmensmaßstab geeignet sind. Mit Funktionen wie automatischer Skalierung, Backup-Management und Bereitstellung in mehreren Regionen gewährleistet Chroma einen nahtlosen Übergang zum produktionsbereiten Betrieb.

Für Organisationen, die mehrere Kunden oder Abteilungen bedienen, Multi-Tenant-Architekturen sind von unschätzbarem Wert. Sie ermöglichen isolierte Sammlungen, Zugriffskontrollen und Ressourcenkontingente für verschiedene Mandanten. Dieser Ansatz reduziert die Infrastrukturkosten, da separate Bereitstellungen vermieden werden und gleichzeitig eine robuste Datensicherheit gewährleistet ist.

Ein weiteres wichtiges Merkmal ist automatisierte Rückverfolgung, das Einblicke in die Abfrageleistung und Einbettungsqualität bietet. Durch die Integration von Tools wie Datadog or New RelicTeams können in Echtzeit überwachen und Warnmeldungen erhalten, wenn Latenzprobleme auftreten oder eingebettete Modelle inkonsistente Ergebnisse liefern. Diese Tools stellen sicher, dass die Produktionsarbeitslasten effizient und zuverlässig bleiben.

Diese erweiterten Funktionen bilden die Grundlage für skalierbare und sichere Produktionsstrategien.

Produktionsreife Strategien

Die Skalierung von Chroma für die Produktion erfordert eine horizontale Erweiterung und robuste Datenschutzmaßnahmen.

Horizontale Skalierung beinhaltet die Partitionierung von Sammlungen über mehrere Chroma-Instanzen. Dies kann durch Sharding basierend auf Dokumenttyp, Datumsbereich oder Inhaltskategorien erreicht werden, wodurch schnelle Abfrageantworten auch bei wachsendem Datenvolumen gewährleistet werden.

Umsetzung Backup- und Disaster-Recovery-Protokolle ist entscheidend für den Schutz von Vektoreinbettungen und Metadaten. Strategien wie regelmäßige inkrementelle Backups, vollständige Snapshots und regionsübergreifende Replikation minimieren Datenverluste und erhöhen die Ausfallsicherheit, insbesondere bei unternehmenskritischen Anwendungen.

Treffen US-Datenschutzstandards Unternehmen müssen gemäß den Standards SOC 2 Typ II und HIPAA die Verschlüsselung ruhender und übertragener Daten durchsetzen, Prüfprotokolle für alle Vektoroperationen führen und Kontrollen für den Datenspeicherort einrichten. Zusätzliche Maßnahmen wie vom Kunden verwaltete Verschlüsselungsschlüssel und private Netzwerkkonnektivität stärken Compliance und Sicherheit zusätzlich.

Durch die Übernahme dieser Strategien können Bereitstellungen effizient skaliert werden, während gleichzeitig die Sicherheit und Einhaltung gesetzlicher Vorschriften gewährleistet wird.

Skalierung für große Dokumentsammlungen

Beim Umgang mit umfangreichen Dokumentensammlungen horizontale Skalierung wird unerlässlich. Techniken wie konsistentes Hashing oder bereichsbasierte Partitionierung verteilen Vektoroperationen auf mehrere Chroma-Instanzen, ermöglichen so eine parallele Verarbeitung und sorgen für eine hohe Abfrageleistung.

Wenn die Sammlungen wachsen, Speicheroptimierung spielt eine entscheidende Rolle. Algorithmen wie HNSW mit fein abgestimmten Parametern reduzieren den Speicherverbrauch und gewährleisten gleichzeitig hohe Rückrufraten. Bei der Datenaufnahme im großen Maßstab optimieren Batch-Embedding und Bulk-Insertions den Durchsatz und verhindern Speicherengpässe während Spitzenzeiten.

Die Skalierung der Infrastruktur ist zwar notwendig, die Vereinfachung der Arbeitsabläufe ist jedoch ebenso wichtig. Hier zeichnet sich Latenode aus. Seine visuellen Workflows automatisieren Aufgaben wie die semantische Suche und den Kontextabruf, sodass sich Produktionsteams auf geschäftliche Prioritäten konzentrieren können, anstatt sich mit komplexer Infrastruktur herumzuschlagen.

Beschleunigen Sie die Entwicklung dokumentenbasierter KI-Lösungen mit der visuellen Verarbeitungsplattform von Latenode – einer effizienten Alternative zu LangChain Chroma für den Aufbau skalierbarer, intelligenter Systeme.

FAQs

Wie verbessert die Integration von LangChain mit Chroma die Dokumentsuche im Vergleich zu herkömmlichen stichwortbasierten Methoden?

Die Integration von LangChain mit Chroma bringt die Dokumentensuche auf ein neues Niveau durch die Nutzung Vektoreinbettungen für die semantische Suche. Im Gegensatz zu herkömmlichen schlüsselwortbasierten Systemen, die auf exakten Übereinstimmungen von Begriffen beruhen, konzentriert sich die semantische Suche auf die Kontext und Bedeutung hinter den Wörtern und ist daher ideal für die Bearbeitung komplexer oder differenzierter Abfragen.

Chroma organisiert Dokumente anhand ihrer Einbettungen und kann so relevante Informationen abrufen, auch wenn bestimmte Schlüsselwörter fehlen. Diese Methode sorgt nicht nur für genauere Ergebnisse, sondern steigert auch die Effizienz von Retrieval-Augmented Generation (RAG) Anwendungen, bei denen die Aufrechterhaltung von Präzision und Kontext von entscheidender Bedeutung ist.

Um einen LangChain Chroma-Vektorspeicher für die semantische Suche einzurichten, installieren Sie zunächst die Chroma-Datenbank und konfigurieren Sie sie in Ihrer LangChain-Umgebung. Sobald die Datenbank bereit ist, erstellen Sie einen Vektorspeicher in LangChain und wählen Sie Chroma als Speicher-Backend. Bereiten Sie Ihre Dokumente vor, indem Sie Einbettungen mit einem geeigneten Einbettungsmodell generieren und diese anschließend in der Chroma-Vektordatenbank speichern.

Um eine effiziente und präzise Abfrage zu gewährleisten, passen Sie Einstellungen wie Ähnlichkeitsmetriken und Indexierungsstrategien an Ihre spezifischen Anforderungen an. Aktivieren Sie für eine langfristige Nutzung die Datenbankpersistenz, um Daten zu speichern und zukünftige Updates zu planen. Durch die Einhaltung bewährter Methoden bei der Dokumentvorverarbeitung und Einbettungsgenerierung können Sie die Relevanz und Präzision Ihrer Suchergebnisse deutlich verbessern.

Wie erleichtert Latenode den Aufbau von Dokumentenabrufsystemen im Vergleich zu herkömmlichen Methoden?

Latenode vereinfacht den Aufbau von Dokumentenabrufsystemen durch die Bereitstellung eines visuelle No-Code-Plattform Das automatisiert komplexe Prozesse wie Vektorähnlichkeit und semantische Suche. Herkömmliche Ansätze erfordern oft ein tiefes Verständnis von Vektoreinbettungen und Datenbankverwaltung, was für viele eine Hürde darstellen kann. Latenode beseitigt diese Komplexität und ermöglicht es Benutzern, Workflows ohne technisches Fachwissen zu erstellen.

Durch die Vereinfachung dieser Aufgaben verkürzt Latenode nicht nur die Entwicklungszeiten, sondern eliminiert auch den Aufwand für die Wartung der Datenbankinfrastruktur. So können sich die Teams auf die Verbesserung der Anwendungsfunktionen und die schnellere Bereitstellung von Ergebnissen konzentrieren. Dokumentenabrufsysteme werden einem breiteren Publikum zugänglich gemacht und gleichzeitig die Effizienz gesteigert.

Ähnliche Artikel

Apps austauschen

Anwendung 1

Anwendung 2

Schritt 1: Wählen ein Auslöser

Schritt 2: Wähle eine Aktion

Wenn das passiert ...

Name des Knotens

Aktion, zum Beispiel löschen

Name des Knotens

Aktion, zum Beispiel löschen

Name des Knotens

Aktion, zum Beispiel löschen

Name des Knotens

Beschreibung des Auslösers

Name des Knotens

Aktion, zum Beispiel löschen

Vielen Dank! Ihre Einreichung wurde erhalten!
Hoppla! Beim Absenden des Formulars ist ein Fehler aufgetreten.

Mach das.

Name des Knotens

Aktion, zum Beispiel löschen

Name des Knotens

Aktion, zum Beispiel löschen

Name des Knotens

Aktion, zum Beispiel löschen

Name des Knotens

Beschreibung des Auslösers

Name des Knotens

Aktion, zum Beispiel löschen

Vielen Dank! Ihre Einreichung wurde erhalten!
Hoppla! Beim Absenden des Formulars ist ein Fehler aufgetreten.
Probieren Sie es jetzt

Keine Kreditkarte notwendig

Ohne Einschränkung

Georgi Miloradowitsch
Forscher, Texter und Usecase-Interviewer
August 22, 2025
18
min lesen

Verwandte Blogs

Anwendungsfall

Unterstützt von