Startseite / Artikel

Ermögliche fundierte PDF-Fragen und -Antworten mithilfe von Azure AI Search und Foundry-Agenten.

Führe einen privaten Index für PDFs mit Embeddings ein, verbinde einen Foundry-Agenten mit dem Vektorindex und behebe die Authentifizierungs- sowie Anweisungslücken, die dazu führen, dass RAG nicht richtig funktioniert.

Verlag: REACTAPP.TOP9 Min. Lesezeit2147 Wörter

Quellen: Building a Grounded RAG Agent on Azure AI Search and Azure AI Foundry

Einführung

Ein Anbieter für Schulungen in Digitalforensik verfügt über jahrelange PDF-Lehrmaterialien – Präsentationsfolien, Übungen, Referenzkapitel. Analysten benötigen ein bestimmtes Konzept, das in Dutzenden von Dokumenten verteilt ist. Die Suche nach Schlüsselwörtern in verstreuten Dateien ist langsam und unzuverlässig. Das gewünschte Produkt sind Fragen-Antworten in einfachem Sprachstil, die aus genau diesem Material stammen, nicht eine Paraphrase eines allgemeinen Lehrbuchs.

Das ist das Prinzip von RAG: Relevante Abschnitte aus einer privaten Dokumentensammlung abrufen und die Erstellung von Inhalten darauf aufbauen. Diese Lösung implementiert dieses Muster vollständig auf Azure – Azure AI Search indiziert echte PDF-Dateien mithilfe von Embeddings, und ein Azure AI Foundry-Agent beantwortet Fragen anhand des Index statt auf Grundlage allgemeiner Kenntnisse.

Aus diesem Grund entwickelte sich auch eine Art „Debugging-Geschichte“. Fast nichts scheiterte an einer falschen Idee; die Fehler entstanden durch kleine Unstimmigkeiten zwischen Ressourcen, Authentifizierungsmodellen und dem Standardverhalten der Agenten. Diese Problempunkte werden dokumentiert, anstatt beseitigt zu werden.

Verständnis der Architektur

Vier Azure-Dienste übernehmen jeweils eine bestimmte Aufgabe.

Blob Storage speichert die Quelldokumente – in diesem Fall forensische PDFs; jedes Dokument aus einem privaten Domänenkontext folgt derselben Struktur.

Azure AI Search indiziert und liefert die gewünschten Dokumente. Ein Skillset teilt die Dokumente in Abschnitte auf, ruft ein Embedding-Modell auf und speichert den Text zusammen mit Vektoren. Bei einer Abfrage liefert Search semantisch ähnliche Abschnitte, nicht nur Dokumente mit passenden Schlüsselwörtern.

Azure AI Foundry hostet Modelle sowie den Agenten: eine Embedding-Implementierung zur Vektorisierung von Indizes/Abfragen und eine Chat-Implementierung für Antworten. Der Agent umhüllt das Chat-Modell mit einer Wissensquelle sowie Anweisungen.

Managed Identity und RBAC bestimmen, wer was abfragen darf. Verbindungen (Search→Blob, Search→embeddings, agent→index) sollten vorzugsweise auf skopierten Rollen statt auf eingebetteten Schlüsseln beruhen. Diese Version erreichte keine vollständig schlüsselfreie Kette; dieser Mangel wird unten erläutert.

Erste Phase: Quelldokumente

Ein privater Blob-Container (knowledge-docs) erhielt die PDFs des Kurses. Der Zugriff blieb privat – es gab keine anonymen Lesezugriffe – was im Einklang mit der Behandlung der Materialien als sensibel steht.

Zweite Phase: Modellimplementierungen in Azure AI Foundry

Zwei Implementierungen innerhalb eines Foundry-Projekts:

  • Chat (chat-deploy) für Antworten
  • Embeddings (embed-deploy, text-embedding-3-small) für Dokumenten- und Abfragenvektoren
  • Stellen Sie sicher, dass beide vorhanden sind, bevor Sie Search-Skillsets oder -Agenten verbinden; fehlende Implementierungen führen später zu unklaren Indexierungsfehlern.

    Phase drei: Azure AI Search und der vektorisierte Index

    Erstellen Sie zunächst einen Search-Dienst und anschließend einen Index, dessen Felder Textblöcke, Vektoren sowie Dokumentmetadaten enthalten. Fügen Sie ein Skillset hinzu, das Folgendes tut:

    1. Blobs aus knowledge-docs abruft
    2. sie in überschneidende Blöcke aufteilt
    3. die Embedding-Implementierung aufruft
    4. die Vektoren im Index speichert

    Indexierer benötigen Berechtigungen, um Blobs zu lesen und den Embedding-Endpunkt aufzurufen. Auch Rollenzuweisungen, die „fast richtig“ erscheinen, führen bei der Ausführung zu Fehlern – überprüfen Sie die genauen Ressourcen IDs.

    Web Api response status: 'NotFound'
    DeploymentNotFound: The API deployment for this resource does not exist.
    
    Web Api response status: 'Unauthorized' (401)
    Access denied due to invalid subscription key or wrong API endpoint.
    
    Access denied when connecting to the MCP server ... HTTP 403 Forbidden
    
    You are an assistant that answers questions about digital forensics course material.
    For every user question, you MUST first search the connected knowledge base before answering.
    Only answer using information retrieved from the knowledge base.
    If the knowledge base returns no relevant results, say so explicitly rather than answering from general knowledge.
    

    Phase vier: Fehlschläge bei der Indizierung und ihre Bedeutung

    Fehlschläge bei der Indizierung treten selten durch einen einzigen klaren Fehler auf. Häufige Muster in diesem Fall sind:

    • Das Skillset kann nicht zur Bereitstellung des Embeddings zugreifen (Fehler bei der Authentifizierung oder falscher Endpunkt)
    • Der Schedule des Indexers läuft, doch die Dokumente bleiben bei null (Fehler im Containerpfad oder in der Referenz auf das Skillset)
    • Die Vektoren werden mit falschen Dimensionen geschrieben (Unstimmigkeit zwischen dem Modell und dem Indizeschema bei der Bereitstellung)

    Betrachten Sie jeden Fall als Konfigurationsfehler und nicht als Fehler im RAG-Konzept. Erfassen Sie vor dem gleichzeitigen Ändern von drei Einstellungen die Ausführungshistorie des Indexers.

    Phase fünf: Verbindung des Indexes mit einem Agenten

    In Foundry sollte der Suchindex als Wissensquelle für den Agenten hinzugefügt werden. Die Anweisungen müssen vorsehen, dass abgerufene Passagen zitiert werden und dass abgelehnt wird, wenn der Index nichts Relevantes liefert. Testen Sie dies mit einer Frage, deren Antwort nur auf einer PDF-Seite vorhanden ist – Erfolg bedeutet ein belegtes Zitat, nicht eine flüssige Vermutung.

    Schritt sechs: zwei verhaltensbezogene Probleme

    Neben der Konfiguration traten zwei verhaltensbezogene Probleme auf:

    1. Übermäßig hilfsbereite Fallback-Lösungen – das Chat-Modell antwortete mit vorherigem Wissen, wenn keine Informationen abgerufen werden konnten. Verschärfen Sie die Anweisungen sowie gegebenenfalls die Überprüfungen auf Belegbarkeit, sodass bei leeren Ergebnissen „nicht im Korpus“ angezeigt wird.
    2. Inkonsistente Authentifizierung – einige Links verwendeten weiterhin Schlüssel, während andere eine verwaltete Identität nutzten. Mischte Authentifizierung erschwert den Wechsel und verdeckt, welcher Benutzer tatsächlich erfolgreich war.

    Auch das eine ist keine Portal-Kontrollkiste; beides sind Produktentscheidungen, die in Anweisungen und Identitätsdesign kodiert sind.

    Was tatsächlich im Hintergrund geschieht

    Eine Benutzerfrage wird eingebettet, Search liefert die wichtigsten Abschnitte, der Agent erhält diese Abschnitte zusammen mit Anweisungen, und das Chat-Modell generiert eine Antwort, die (idealerweise) auf diesen Kontext beschränkt ist. Die Blob-Speicherung kommuniziert niemals direkt mit dem Agenten; Search bildet die Grenze für die Datensuche. Foundry ist für die Orchestrierung und den Host der Modelle zuständig.

    Herausforderungen und gelernte Lektionen

    • Region und Verfügbarkeit des Modells müssen vor der Erstellung von Ressourcen überprüft werden.
    • Die Dimension des Embeddings im Index-Schema muss exakt mit dem gewählten Embedding-Modell übereinstimmen.
    • RBAC-Fehler erscheinen wie leere Indexe, bis man die Details des Indexers liest.
    • Agenten-Anweisungen sind Teil der Korrektheit, keine Dekoration.
  • Dokumentieren Sie das tatsächlich bereitgestellte Authentifizierungsmodell, einschließlich der temporären Schlüssel.
  • Haupterkenntnisse

    Azure RAG besteht aus einer Kette kleiner Komponenten: Datenschutz für Blob-Daten, Berechtigungen für Skillsets und Einbettfunktionen, Schema des Indexes im Zusammenhang mit den Modelldimensionen, Anhängung von Wissensinhalten an Agenten sowie Richtlinien für fundierte Antworten. Wenn all diese Aspekte richtig umgesetzt sind, ist die Architektur auf eine gute Weise einfach – verpassen Sie einen Aspekt, müssen Sie tagelang debuggen und glauben dabei, „RAG funktioniere nicht.“

    Praktischer Tipp: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsbezeichnungen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, hilft diese Seite besser als das Durchsuchen von Portal-Screenshots. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei entscheidende Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind – falls die Fundiertheit der Antworten nachlässt, soll der Build fehlschlagen.

    Operative Tipps: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die Screenshots des Portals dabei, anstelle von umständlichen Recherchen direkt weiterzukommen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind – der Build fehlschlägt, falls die Zuverlässigkeit nachlässt.

    Operative Tipps: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die Screenshots des Portals dabei, anstelle von umständlichen Recherchen direkt weiterzukommen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind – der Build fehlschlägt, falls die Zuverlässigkeit nachlässt.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Führen Sie ein einseitiges Handbuch, das die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), den Indexnamen, den Skillset-Namen sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt auflistet. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die auf dieser Seite enthaltenen Portalscreenshots dabei, schneller als durch archäologisches Suchen an die Lösung zu gelangen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind, und bei einem Rückgang der Zuverlässigkeit den Build abbricht.

    Operative Tipps: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die Screenshots des Portals dabei, anstelle von mühsamen Recherchen direkt weiterzukommen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind – der Build fehlschlägt, falls die Zuverlässigkeit nachlässt.

    Operative Tipps: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, helfen die Screenshots des Portals dabei, anstelle von mühsamen Recherchen direkt weiterzukommen. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind – der Build fehlschlägt, falls die Zuverlässigkeit nachlässt.

    Operative Tipps: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, hilft diese Seite dabei, anhand von Portal-Screenshots weiterzukommen – ohne auf umständliche Recherche angewiesen zu sein. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind; falls die Zuverlässigkeit nachlässt, soll der Build fehlschlagen.

    Operative Tipps: Halten Sie ein einseitiges Handbuch bereit, in dem die genauen Ressourcennamen, Bereitstellungsnamen (nicht die Namen der Basismodelle), Indexnamen, Skillset-Names sowie die verwendeten verwalteten Identitäten oder Schlüssel für jeden Schritt aufgeführt sind. Wenn ein Indexierer um 02:00 Uhr versagt, hilft diese Seite dabei, anhand von Portal-Screenshots weiterzukommen – ohne auf umständliche Recherche angewiesen zu sein. Fügen Sie außerdem eine wöchentliche Aufgabe hinzu, die drei wichtige Fragen stellt, deren Antworten auf bekannten Seiten zu finden sind; falls die Zuverlässigkeit nachlässt, soll der Build fehlschlagen.