← Resources
TUTORIAL · 2026-02-12
Produktive RAG-Pipeline ohne LangChain bauen (2026)
Sie können eine produktionsreife RAG-Pipeline in wenigen hundert Codezeilen ausliefern, indem Sie Anbieter-SDKs, pgvector und einen Reranker direkt kombinieren. Überspringen Sie LangChains Abstraktionen, bis Sie einen konkreten Bedarf haben, den sie tatsächlich lösen.
Warum Teams 2026 LangChain entbündeln
Bis 2026 ist das Entfernen von LangChain aus der Produktion zu einem erkennbaren Engineering-Muster geworden, mit öffentlichen Postmortems von Teams, die es einst evangelisiert haben. Die Beschwerden sind konsistent: geschichtete Abstraktionen, die verdecken, was tatsächlich an das Modell gesendet wird, häufige Breaking Changes zwischen Minor-Versionen und Debugging-Sessions, die sich in Höhlenexpeditionen durch Wrapper-Klassen verwandeln.
Der zugrundeliegende Wandel ist, dass Anbieter-SDKs gut geworden sind. Die OpenAI-, Anthropic- und Google-SDKs liefern jetzt First-Class-Streaming, strukturierte Outputs, Tool-Calls und Batching. Voyage, Cohere und Jina stellen saubere REST-Endpunkte für Embeddings und Reranking bereit. Postgres mit pgvector bewältigt ANN-Suche bis zu rund 10 Mio. Vektoren ohne dedizierte Vektordatenbank.
Für die meisten RAG-Workloads ist das Framework, das Sie 2023 wollten, jetzt vier Funktionsaufrufe und eine SQL-Query. Die vernünftige Voreinstellung 2026 ist, mit rohen SDKs zu beginnen, eine dünne Pipeline-Abstraktion hinzuzufügen, wenn Sie echten Schmerz spüren, und Schwergewichts-Frameworks als Opt-in zu behandeln.
Die fünf Stufen, die jede RAG-Pipeline braucht
Jedes produktive RAG-System, unabhängig vom Framework, zerfällt in dieselben fünf Stufen. Sie explizit zu benennen, macht den Code testbarer und stückweise ersetzbar.
- Ingest: Quelldokumente laden, Encoding normalisieren, Boilerplate entfernen.
- Chunk: in Retrieval-Einheiten mit stabilen IDs und Quellmetadaten zerlegen.
- Embed und Index: Chunks in einen Vektorspeicher kodieren, neben einem lexikalischen Index für Hybridsuche.
- Retrieve und Rerank: einen breiten Kandidatensatz ziehen, dann mit einem Cross-Encoder-Reranker eingrenzen.
- Generate und Cite: einen Prompt mit abgerufenem Kontext zusammenstellen und Antworten mit Quellenangabe zurückgeben.
Halten Sie jede Stufe als reine Funktion mit typisierten Inputs und Outputs. Die Retrieval-Stufe sollte nicht wissen, welches LLM generieren wird; die Generierungsstufe sollte nicht wissen, welches Embedding-Modell verwendet wurde. Diese Trennung ist das, was Frameworks versprechen und selten liefern, weil sie Stufen über opake Chain-Objekte koppeln. Es selbst zu schreiben dauert einen Nachmittag und entfernt eine Kategorie von Upgrade-Risiko.
Chunking-Strategien: semantisch, rekursiv und agentisch
Beim Chunking wird die meiste RAG-Qualität gewonnen oder verloren. Drei Muster dominieren 2026.
Rekursive Zeichenaufteilung an einer Hierarchie von Trennern (Absätze, Sätze, dann Zeichen) ist die Baseline. Sie ist schnell, deterministisch und gut genug für Prosa. Semantisches Chunking embeddet Kandidaten-Splits und führt benachbarte Chunks zusammen, deren Embeddings nah beieinander liegen, und produziert thematisch kohärente Einheiten zu höheren Ingest-Kosten. Agentisches Chunking lässt ein kleines LLM Split-Punkte für strukturierte Dokumente wie Verträge oder Transkripte vorschlagen, bei denen Überschriften und Sprecherwechsel mehr zählen als Zeichenanzahl.
def recursive_chunk(text, max_chars=1200, overlap=150):
seps = ["\n\n", "\n", ". ", " "]
def split(s, depth=0):
if len(s) <= max_chars or depth == len(seps):
return [s]
parts, sep = [], seps[depth]
for p in s.split(sep):
parts.extend(split(p, depth + 1))
return parts
raw = split(text)
return [raw[i] + raw[i+1][:overlap] for i in range(len(raw)-1)] + [raw[-1]]
Beginnen Sie rekursiv, messen Sie, und steigen Sie erst zu semantisch auf bei den Dokumentklassen, bei denen die Evaluation zeigt, dass es sich auszahlt.
Embeddings und Reranker: Voyage, BGE und Cohere
Das Bild für Retriever 2026 ist klarer als vor einem Jahr. Voyage AI, jetzt Teil von MongoDB, liefert voyage-3-large als starkes Allzweck-Dense-Modell und hat Anfang 2026 die voyage-4-Familie mit einer Mixture-of-Experts-Variante veröffentlicht, die auf die Spitze der RTEB-Bestenliste zielt. Coheres embed-v4 ist der andere produktive Spitzenreiter. Für Open-Weight-Self-Hosting bleibt BAAIs bge-m3 die Voreinstellung: ein einzelnes Modell, das Dense-, Sparse- und Multi-Vector-Retrieval über 100+ Sprachen hinweg unterstützt, mit einem 8192-Token-Kontext.
Fürs Reranking ist Cohere rerank-v3.5 das Arbeitspferd: ein mehrsprachiges Modell, 4096-Token-Chunks und etwa 80-150 ms p50-Latenz bei typischen Payloads. Voyage rerank-2 ist konkurrenzfähig und integriert sich sauber, wenn Sie bereits Voyage-Embeddings verwenden.
Die praktische Regel: Wählen Sie einen Dense-Embedder, einen Reranker und frieren Sie das Paar hinter einer Schnittstelle ein. Ein späterer Tausch kostet einen Reindex, kein Rewrite.
Retrieval, Generierung und Zitationen verdrahten
Mit pgvector bekommen Sie Hybridsuche und Zitationen in geradlinigem SQL. Speichern Sie Chunks mit ihrer Dokument-ID, dem Embedding und einem tsvector für lexikalischen Recall. Rufen Sie einen breiten Kandidatensatz ab, reranken Sie, und geben Sie die Top N an das LLM weiter mit expliziten Quell-IDs, die das Modell zitieren soll.
import psycopg, voyageai, cohere
vo, co = voyageai.Client(), cohere.Client()
def retrieve(query, k=40, top_n=8):
qvec = vo.embed([query], model="voyage-3-large").embeddings[0]
with psycopg.connect(DSN) as conn:
rows = conn.execute(
"SELECT id, doc_id, text FROM chunks ORDER BY embedding <=> %s LIMIT %s",
(qvec, k)).fetchall()
docs = [r[2] for r in rows]
ranked = co.rerank(model="rerank-v3.5", query=query, documents=docs, top_n=top_n)
return [rows[r.index] for r in ranked.results]
```
Für pgvector verwenden Sie standardmäßig einen HNSW-Index mit m=16 und ef_construction=64, fügen einen Tenant- oder Aktualitäts-Vorfilter hinzu, damit der ANN-Scan eng beginnt, und kombinieren `ORDER BY embedding <=> $1` immer mit einem `LIMIT`. Übergeben Sie abgerufene Chunks an das LLM mit ihren IDs und weisen Sie das Modell an, Zitationsmarker auszugeben; lösen Sie diese Marker in einem Nachbearbeitungsschritt zurück in Quell-URLs auf.
Evaluation: Hit Rate, MRR und Faithfulness
Eine RAG-Pipeline ohne Evaluation-Harness ist Raterei. Bauen Sie den Harness, bevor Sie irgendetwas tunen. Das Minimalkit ist eine gelabelte Query-Menge von 100 bis 500 Beispielen, die die tatsächlich erwarteten Fragetypen abdeckt, plus drei Metriken.
Hit Rate bei K beantwortet, ob der korrekte Chunk es in den Kandidatensatz geschafft hat, was die Retrieval-Qualität isoliert. Mean Reciprocal Rank erfasst, wie hoch der richtige Chunk gerankt wurde, was der Reranker verbessern soll. Faithfulness, bewertet von einem LLM-Judge, der angewiesen ist, jede generierte Aussage mit den zitierten Chunks zu vergleichen, erfasst, ob das Modell über seinen Kontext hinaus halluziniert hat.
Fahren Sie den Harness bei jeder Änderung: eine neue Chunk-Größe, ein anderer Embedder, eine Prompt-Bearbeitung. Tragen Sie die drei Metriken im Zeitverlauf im selben Dashboard auf. Wenn eine Änderung MRR verbessert, aber Faithfulness einbrechen lässt, surft der Reranker Distraktoren hoch und der Generierungs-Prompt braucht Leitplanken, nicht mehr Retrieval-Tuning.
Wann zu einem Managed Orchestrator wechseln
Selbstgebaute Pipelines bleiben wartbar, solange ein Team sie besitzt und die Stufenanzahl klein ist. Der Punkt, an dem sich ein Managed Orchestrator auszahlt, ist, wenn Nicht-Entwickler das Retrieval tunen müssen, wenn Sie viele Pipelines parallel für verschiedene Dokumentklassen fahren oder wenn Sie versionierte Configs und A/B-Routing ohne Redeploy wollen.
An diesem Punkt ist die Wahl zwischen Schwergewichts-Frameworks wie LlamaIndex oder Haystack und config-getriebenen Plattformen, die Retrieval-Stufen als deklarative Einheiten offenlegen. osStudio, der No-Code-Orchestrierungseditor in osFoundry, nimmt den zweiten Ansatz: Die fünf Stufen oben sind First-Class-Config-Objekte mit Managed-Voyage-Embeddings und Reranking hinter einem einzigen Proxy, sodass Sie BYOK auf der LLM-Seite behalten und Framework-Lock-in auf der Retrieval-Seite vermeiden.
Die nützliche Frage ist nicht Framework versus Kein-Framework. Sie ist, ob Ihre Pipeline-Konfiguration Code, Config oder UI sein sollte, und diese Antwort ändert sich, wenn das Team wächst.
Frequently asked questions
- Brauche ich tatsächlich eine Vektordatenbank für RAG?
- Wahrscheinlich nicht, bevor Sie mehrere Millionen Vektoren überschreiten. Postgres mit pgvector bewältigt bequem bis zu rund 10 Millionen Vektoren mit einem HNSW-Index, Hybridsuche über tsvector und Standard-SQL-Filtern für Mandantenfähigkeit und Aktualität. Sie erben Backups, Replikation und Zugriffskontrolle von der Datenbank, die Sie bereits betreiben. Dedizierte Vektordatenbanken wie Qdrant, Milvus oder Weaviate werden ihre Betriebskosten wert, wenn Sie geshardete Milliarden-Skalen-Indizes, spezialisierte Filterung bei sehr hoher QPS oder Features wie Multi-Vector-Retrieval brauchen, das pgvector noch nicht abdeckt. Beginnen Sie mit pgvector und migrieren Sie erst, wenn ein gemessener Engpass es erzwingt.
- Ist ein Reranker die Latenz wirklich wert?
- Für die meisten retrieval-lastigen Workloads, ja. Ein Cross-Encoder-Reranker wie Cohere rerank-v3.5 oder Voyage rerank-2 fügt typischerweise 80 bis 200 Millisekunden bei p50 auf einem Kandidatensatz von 40 bis 100 Chunks hinzu und hebt Mean Reciprocal Rank konsistent um 10 bis 30 Prozent gegenüber Dense-Retrieval allein. Die Latenz wird hinter dem folgenden LLM-Call versteckt, der das nutzersichtbare Budget meist dominiert. Überspringen Sie den Reranker nur bei latenzkritischen Autocomplete-artigen Flows unter 200 Millisekunden end-to-end oder wenn Ihr Kandidatensatz bereits klein genug ist, dass das Dense-Ranking zuverlässig ist.
- Wie handhabe ich Chunk-Overlap ohne Speicheraufblähung?
- Verwenden Sie kleine Überlappungen von 10 bis 15 Prozent der Chunk-Größe, gespeichert als Zeichen-Offsets im Quelldokument statt als duplizierter Text. Zur Retrieval-Zeit können Sie optional den benachbarten Chunk für Kontexterweiterung abrufen. Das hält den Index schlank und vermeidet, dass Sie dieselben Tokens beim Embedding doppelt bezahlen. Wenn Sie reicheren Kontext für die Generierung brauchen, funktioniert ein Parent-Document-Muster gut: Indexieren Sie kleine Chunks für Retrieval-Präzision, lösen Sie dann Treffer zurück zu ihrem Eltern-Abschnitt auf, bevor sie an das LLM weitergegeben werden. Der Eltern-Lookup ist eine einzelne indexierte Abfrage und fügt vernachlässigbare Latenz hinzu.
- Was ist der einfachste Weg, RAG-Qualität zu evaluieren?
- Bauen Sie eine gelabelte Menge von 100 bis 200 repräsentativen Queries mit den Chunk-IDs, die abgerufen werden sollten. Berechnen Sie Hit Rate bei K und Mean Reciprocal Rank allein aus der Retrieval-Stufe, was die Retriever-Qualität vom Generierungsrauschen isoliert. Für Faithfulness verwenden Sie einen LLM-Judge, der angewiesen ist, jede generierte Aussage mit den zitierten Chunks zu vergleichen und gegründet gegenüber nicht gestützt zu bewerten. Lassen Sie die drei Zahlen bei jeder bedeutsamen Änderung laufen und behandeln Sie Regressionen als Blocker. Dieser Drei-Metriken-Aufbau fängt die Mehrheit der RAG-Regressionen in der Praxis und vermeidet die Falle, eine Zahl zu optimieren, während eine andere still leidet.
Sources