Lektion 4 von 6·10 Min Lesezeit

RAG mit AI SDK

Retrieval-Augmented Generation (RAG) verbindet LLMs mit Ihren eigenen Daten — Wissensbasis, Dokumente, Datenbanken. Das AI SDK bietet native Unterstützung für Embedding-Generierung und nahtlose Integration mit Vector Stores.

Embedding-Generierung

Was sind Embeddings?

Embeddings sind numerische Repräsentationen von Text in einem hochdimensionalen Vektorraum. Semantisch ähnliche Texte haben ähnliche Vektoren — das ermöglicht semantische Suche.

Embeddings mit dem AI SDK

import { embed, embedMany } from 'ai'
import { openai } from '@ai-sdk/openai'

// Einzelnes Embedding
const { embedding } = await embed({
  model: openai.embedding('text-embedding-3-large'),
  value: 'Was ist Kubernetes?',
})

// Batch-Embeddings
const { embeddings } = await embedMany({
  model: openai.embedding('text-embedding-3-large'),
  values: ['Dokument 1...', 'Dokument 2...', 'Dokument 3...'],
})

Embedding-Modelle 2026

ModellDimensionenStärke
text-embedding-3-large (OpenAI)3.072Beste Qualität, vielseitig
text-embedding-3-small (OpenAI)1.536Gutes Preis-Leistungs-Verhältnis
voyage-3-large (Anthropic/Voyage)1.024Stark für Code und technische Texte
multilingual-e5-large (Open Source)1.024Mehrsprachig, Self-hosted möglich

Vector Store Integration

Unterstützte Vector Stores

Das AI SDK integriert sich mit allen gängigen Vector-Datenbanken:

  • Pinecone: Managed, serverless, skaliert automatisch
  • Supabase pgvector: PostgreSQL-Extension, ideal für Supabase-Nutzer
  • Weaviate: Open Source, hybrid Search (Vektor + Keyword)
  • Qdrant: Open Source, hohe Performance, Rust-basiert
  • ChromaDB: Einfach, gut für Prototyping

RAG-Pipeline mit Supabase pgvector

1. Dokumente indexieren:

import { embedMany } from 'ai'
import { openai } from '@ai-sdk/openai'
import { supabase } from '@/lib/supabase'

async function indexDocuments(documents: string[]) {
  const { embeddings } = await embedMany({
    model: openai.embedding('text-embedding-3-large'),
    values: documents,
  })

  for (let i = 0; i < documents.length; i++) {
    await supabase.from('documents').insert({
      content: documents[i],
      embedding: embeddings[i],
    })
  }
}

2. Relevante Dokumente abrufen:

async function findRelevantDocs(query: string) {
  const { embedding } = await embed({
    model: openai.embedding('text-embedding-3-large'),
    value: query,
  })

  const { data } = await supabase.rpc('match_documents', {
    query_embedding: embedding,
    match_threshold: 0.7,
    match_count: 5,
  })

  return data
}

3. Kontext an LLM übergeben:

export async function POST(req: Request) {
  const { messages } = await req.json()
  const lastMessage = messages[messages.length - 1]

  const relevantDocs = await findRelevantDocs(lastMessage.content)
  const context = relevantDocs.map(d => d.content).join('\n\n')

  const result = streamText({
    model: openai('gpt-4.1'),
    system: `Beantworte Fragen basierend auf diesem Kontext:\n\n${context}`,
    messages,
  })

  return result.toDataStreamResponse()
}

Context Window Management

Das Kernproblem

LLMs haben ein begrenztes Context Window (128K–2M Tokens). Effektives RAG muss relevante Informationen in dieses Fenster packen — ohne es zu überladen.

Strategien

StrategieBeschreibungWann
Top-K RetrievalDie K ähnlichsten DokumenteStandard
RerankingErgebnisse mit einem Reranker-Modell neu sortierenHöhere Qualität
ChunkingDokumente in kleinere Teile aufteilenLange Dokumente
HierarchicalErst grob suchen, dann detailliertGroße Wissensbasen
Hybrid SearchVektor + Keyword + Filter kombinierenKomplexe Anfragen

Chunking Best Practices

  • Chunk-Größe: 500–1.000 Tokens pro Chunk (zu klein = Kontext verloren, zu groß = Rauschen)
  • Overlap: 10–20 % Überlappung zwischen Chunks (Kontextbrüche vermeiden)
  • Semantisches Chunking: An natürlichen Grenzen teilen (Absätze, Kapitel) — nicht mitten im Satz
  • Metadata: Jeder Chunk speichert Quelle, Kapitel und Position für Citations

RAG-Realität: Die Qualität Ihres RAG-Systems hängt zu 80 % von der Datenaufbereitung ab (Chunking, Cleaning, Metadata) und nur zu 20 % vom Modell. Investieren Sie in Ihre Datenpipeline.