Produktions-RAG auf Azure: Chunking, hybride Suche, Filter und Zitate
Für die Unternehmensdatenabrufung sind strukturbewusste Datenblöcke, hybride Suchverfahren, ACL-Filter, Neubewertung der Ergebnisse, fundierte Anfragen sowie eine Bewertungsmethode erforderlich – nicht nur eine PDF-Demo.
RAG-Demos wirken einfach: PDF → Abschnitte → Embeddings → Vektor-Datenbank → Anfrage an das Modell. Dann kommen fünftausend Dokumente herein und jemand fragt nach den Regeln für die Erstattung von Reisekosten im Ausland. Der schwierige Teil ist die zuverlässige Einbringung der richtigen Belege in das Modell.
1. Beginnen Sie mit den Daten, nicht mit dem LLM
Überprüfen Sie vor der Auswahl eines Chat-Modells die Quellen, den Zugriffskontrollmechanismus, die Aktualität sowie die Formate. Schlechte Datensätze führen zu fehlerhaften, aber flüssig klingenden Antworten.
2. Teilung in Abschnitte: Teilen Sie nicht blind alle N Zeichen auf
Ziehen Sie Teilungen unter Berücksichtigung der Struktur vor (Überschriften, Seiten, Tabellen) mit Überschneidungen. Gebührentabellen und Vertragsklauseln leiden unter naiven Zeichensegmenten.
3. Erstellung von Embeddings
Wählen Sie eine feste Implementierung für die Erstellung von Embeddings aus; notieren Sie bei jeder Indexierung Dimension und Modell-ID. Das Mischen verschiedener Modelle beeinträchtigt heimlich die Genauigkeit der Ergebnisse.
document = {
"document_id": "HR-2026-001",
"title": "Employee Benefits Policy",
"department": "HR",
"country": "India",
"version": "2026.1",
"effective_date": "2026-01-01",
"source": "HR Portal"
}
def chunk_text(text, size=1000):
return [
text[i:i + size]
for i in range(0, len(text), size)
]
def chunk_by_sections(document):
chunks = []
for section in document.sections:
chunks.append({
"title": section.title,
"content": section.text,
"document_id": document.id
})
return chunks
pip install openai azure-identity
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://ai.azure.com/.default"
)
client = OpenAI(
base_url="https://YOUR-RESOURCE.openai.azure.com/openai/v1/",
api_key=token_provider
)
response = client.embeddings.create(
model="text-embedding-3-small",
input="Employees are eligible after completing 12 months of service."
)
vector = response.data[0].embedding
{
"id": "HR-2026-001-004",
"document_id": "HR-2026-001",
"title": "Employee Benefits Policy",
"content": "...",
"country": "India",
"version": "2026.1",
"content_vector": embedding
}
from azure.search.documents import SearchClient
from azure.search.documents.models import VectorizedQuery
query = "Can I work remotely from another country?"
query_vector = client.embeddings.create(
model="text-embedding-3-small",
input=query
).data[0].embedding
vector_query = VectorizedQuery(
vector=query_vector,
k_nearest_neighbors=10,
fields="content_vector"
)
results = search_client.search(
search_text=query,
vector_queries=[vector_query],
top=5,
select=["title", "content", "document_id", "country"]
)
results = search_client.search(
search_text=query,
vector_queries=[vector_query],
filter="country eq 'India'",
top=5
)
context = "\n\n".join(
f"Source: {r['title']}\n{r['content']}"
for r in results
)
prompt = f"""
You are an enterprise policy assistant.
Answer the user's question using only the provided evidence.
If the evidence does not contain the answer, say that you don't have enough information.
Do not invent policies.
Evidence: {context}
Question: {query}
"""
{
"document_id": "HR-2026-001",
"page": 14,
"section": "Eligibility",
"content": "..."
}
def answer_question(question):
# 1. Embed the question
vector = embed(question)
# 2. Hybrid retrieval
candidates = search(
query=question,
vector=vector,
top=20
)
# 3. Apply metadata/business filters
candidates = apply_filters(candidates)
# 4. Rerank
ranked = rerank(question, candidates)
# 5. Keep only useful evidence
evidence = ranked[:5]
# 6. Build grounded prompt
prompt = build_prompt(
question,
evidence
)
# 7. Generate answer
response = generate(prompt)
# 8. Return answer + citations
return {
"answer": response,
"sources": extract_sources(evidence)
}
test_cases = [
{
"question": "What is the India travel allowance?",
"expected_source": "travel-policy-india.pdf"
},
{
"question": "How long is parental leave?",
"expected_source": "leave-policy-2026.pdf"
}
]
4. Speichern Sie Embeddings in Azure AI Search
Speichern Sie Texte, Vektoren sowie filterbares Metadaten (Doc-ID, Produkt, Lokalisation, ACL-Gruppe, updated_at).
5. Hybride Suche ist für die meisten Unternehmen besser als reine Vektor-Suche
Kombinieren Sie dichte Ähnlichkeitsbetrachtung mit BM25/Schlüsselwörtern für IDs, Codes und seltene Eigennamen.
6. Filtern Sie vor dem Verwenden des Kontexts
wenden Sie Sicherheits- und Mietfilter in der Abfrage an – nicht erst, nachdem das Modell bereits verbotene Abschnitte gesehen hat.
7. Die Abfrageergebnisse sind kein endgültiger Kontext
Rangieren Sie die Ergebnisse neu, entfernen Sie Duplikate und begrenzen Sie die Anzahl der Tokens. Mehr Abschnitte bedeuten nicht automatisch bessere Antworten.
8. Erstellen Sie die Anfrage anhand von Belegen
Die Anweisungen sollten nur Antworten aus den bereitgestellten Abschnitten erfordern und angeben, wenn Beweise fehlen.
9. Begründungen mit Zitaten
Geben Sie die IDs der Abschnitte/Seiten an, damit die Nutzer nachprüfen können. Flüssiges Schreiben ohne Zitate ist ein Nachteil.
10. Ein Pipeline-System, das bereit für die Verwendung ist
Eingabe → Aufteilung in Blöcke → Einbetten → Indizierung → hybride Suche → Filtern → Neubewertung → Anfrage stellen → Erstellung → Zitieren → Bewertung.
11. Was in der Regel schiefgeht
Schlechte Aufteilung in Blöcke; mangelhafte Metadaten; Suche ausschließlich mit Vektoren; zu großer Kontextumfang; kein Bewertungssatz; keine Zitate; fehlende ACL-Einstellungen; stille Änderungen der Einbettungsmodelle; keine Angabe zur Aktualität.
Fazit
Produktionsreife RAG-Systeme sind Informationssuchsysteme mit einem angehängten LLM-Endpunkt – und nicht umgekehrt. Investieren Sie in die Aufteilung in Blöcke, hybride Suchverfahren, Filter, Zitate und Bewertungen; das Chat-Modell ist nur der letzte Schritt.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Bewahren Sie für jeden Domainbereich ein „goldenes“ Fragepaket auf: Abfragen nach exakten IDs, Paraphrasierungsfragen sowie ACL-negative Fälle. Automatisieren Sie diese Prozesse im CI, sobald sich die Einstellungen zur Aufteilung in Blöcke oder zum Einbetten ändern.
Die Bewertung sollte im selben Repository wie die Konfiguration für das Chunking liegen: Wenn jemand die Überschneidungen nur leicht anpasst, sollte das „Golden Pack“ bereits vor dem Zeitpunkt versagen, an dem die Nutzer es bemerken.
Die hybride Suche benötigt weiterhin gute Analysewerkzeuge sowie Synonymlisten für Fachbegriffe aus dem jeweiligen Bereich; allein Embeddings können keinen fehlerhaft eingegebenen Policy-Code retten.
Dokumentieren Sie den Vertrag bezüglich des ACL-Feldes auf einer Seite, damit jede neue Eingabearbeitung genau die Angaben enthält, die der Abruffilter erwartet.
Die Bewertung sollte im selben Repository wie die Konfiguration für das Chunking liegen: Wenn jemand die Überschneidungen nur leicht anpasst, sollte das „Golden Pack“ bereits vor dem Zeitpunkt versagen, an dem die Nutzer es bemerken.