Erkunden von Herausforderungen beim Abrufen von Informationen – Skalierung und Genauigkeit

Abgeschlossen

Das Abrufen der erweiterten Generation (RAG) hängt davon ab, die richtigen Passagen aus Ihren Daten zu ziehen, bevor das Modell antwortet. Zwei Probleme werden angezeigt, wenn Ihre Inhalte wachsen: Skalierung und Genauigkeit. Skalierung geht davon aus, wie Ihre Datengröße und Zugriffsmuster wachsen und wie schnell Ergebnisse zurückgegeben werden. Genauigkeit ist, ob diese Ergebnisse tatsächlich die Frage beantworten. Wenn der Abruf langsam oder ungenau ist, leidet die Erfahrung unabhängig von der Stärke des Modells.

Scale

In einer RAG löst jede Benutzerfrage eine nächste Nachbarsuche über Vektoren aus. Wenn mehr Zeilen hinzugefügt werden und mehr Benutzer die Daten gleichzeitig abfragen, verlangsamt sich der Datenzugriffsmuster und der Parallelitätsdruck erhöht die Verzögerung.

Behalten Sie den Abruf innerhalb der Azure-Datenbank für PostgreSQL bei, und entscheiden Sie, wie Ergebnisse in der Datenbank durchsucht und bewertet werden. Beginnen Sie mit pgvector der Vektorgleichheitssuche. Verwenden Sie beim Vergrößern von Datensätzen einen ungefähren Index, damit Abfragen nicht mit jeder Zeile verglichen werden. Um die Leistung zu verbessern, bietet pgvector Indexoptionen wie IVFFlat oder HNSW an. Für sehr große Datasets sollten Sie DiskANN die Erweiterung pg_diskann in Betracht ziehen, die für eine hohe Wiederauffindbarkeit, hohe QPS (Abfragen pro Sekunde) und niedrige Latenz bei großen Skalen festgelegt wurde.

Genauigkeit

Schnelle Abfragen helfen nicht, wenn sie die falschen Passagen zurückgeben. Fehlende relevante Zeilen oder deren schlechte Einordnung zwingt das Modell, zu raten.

Behandeln Sie die Genauigkeit als zweistufiges Problem in der Datenbank. Generieren Sie zunächst gute Kandidaten mit pgvector unter Verwendung einer Abstandsfunktion, die zu Ihren Einbettungen passt, und einem Index, der Recall und Latenz für Ihre Größe ausbalanciert. Zweitens, verbessern Sie die Reihenfolge bei Bedarf. Sie können die Ergebnisse direkt in SQL, mithilfe der semantischen Operatoren in der azure_ai Erweiterung, neu ordnen, z. B. azure_ai.rank für eine Relevanzbewertung auf LLM-Basis.

Es gibt auch einen Lösungsbeschleuniger für den Semantischen Ranker in der Azure-Datenbank für PostgreSQL, wenn Sie ein vollständiges Beispiel für eine Pipeline haben möchten, das auf diesem Muster basiert. Beide Ansätze sollen mit PostgreSQL als einzelne Datenebene ausgeführt werden.

Wenn Beziehungen helfen

Einige Domänen profitieren von der Modellierung, wie Dinge verbunden sind. Ein Diagrammschritt kann das Abrufen mithilfe von Beziehungen und Prominenzsignalen verbessern. Graph-Abfragen sind in der Azure-Datenbank für PostgreSQL über die Apache AGE-Erweiterung verfügbar. GraphRAG ist ein Microsoft Research-Ansatz, der die Vektorsuche mit Graph-Abfragen kombiniert, um die Abrufgenauigkeit zu verbessern. Es extrahiert ein Wissensdiagramm aus Ihren Daten und verwendet diese Struktur, um einen besseren Kontext für das Große Sprachmodell bereitzustellen.

Messen und Überwachen

Sie müssen eine Überwachungsstrategie einrichten, die wichtige Metriken erfasst und Einblicke in die Abfrageleistung bietet.

Erstellen Sie einen Basisplan ihrer RAG-Abfrageleistung mithilfe von:

  • Abfragespeicher – Erfasst Abfragetext, Laufzeit- und Wartezeitstatistiken, sodass Sie die wichtigsten Abfragen und Trends im Laufe der Zeit anzeigen können.
  • Abfrageleistungserblick – Visualisiert Abfragespeicherdaten für flexiblen Server, um lange ausgeführte und ressourcenintensive Abfragen hervorzuheben.
  • Azure Monitor Metriken und Workbooks - Charts und Dashboards auf Server-Level für Latenz, Verbindungen, CPU, IO und mehr.

Diese Tools helfen Ihnen, Engpässe und Bereiche zur Verbesserung ihrer RAG-Pipeline zu erkennen. Sie helfen Ihnen dabei, Ermittlungen zur Leistung (Skalierung) zu treffen, aber Sie benötigen andere Strategien, um die Abrufgenauigkeit sicherzustellen.

Messgenauigkeit:

Während die Messung der Genauigkeit nicht so einfach ist wie die Messung der Skalierung, können Sie einige der Lektionen aus dem Architekturcenter-Artikel zur Evaluierungsphase verwenden.

  • Protokollieren von Anforderungen und Metriken – Speichern Sie für jede Frage den Fragetext, die zeilen, die aus PostgreSQL mit ihrer Rangfolge und Entfernung abgerufen wurden, den genauen Kontext, der an das Modell gesendet wurde, und die endgültige Antwort des Modells.
  • Berechnen von Signalen – Berechnen Sie in Ihrem Anwendungscode drei einfache Signale:
    • Relevanz und Auslastung – Messen Sie, wie viel der wichtigsten Ausdrücke der Antwort auch in den abgerufenen Passagen angezeigt werden und wie oft diese Passagen zitiert oder wiedergegeben werden.
    • Groundedness - Prüfen Sie, ob jeder spezifische Anspruch in der Antwort mindestens eine abgefragte Zeile unterstützt.
    • Vollständigkeit – Überprüfen Sie, ob die Hauptteile der Frage in der Antwort mit Unterstützendem Text aus den abgerufenen Zeilen behandelt werden.
  • Führen Sie Änderungen mit Bewertungen durch – Verwenden Sie die Bewertungen, um Änderungen zu leiten, und führen Sie dann denselben kleinen Testsatz erneut aus:
    • Wenn in den Antworten Elemente der Frage fehlen, erhöhen Sie k oder passen Sie chunking an.
    • Wenn die richtigen Zeilen nicht angezeigt werden, erhöhen Sie die IVFFlat Probes in pgvector oder die DiskANNl_value_is Einstellung, damit die Suche mehr Nachbarn berücksichtigt.
    • Wenn die Sortierung das Problem darstellt, fügen Sie mithilfe der Semantikbewertungslösung für Azure Database for PostgreSQL einen reranking pass in SQL hinzu.
    • Wenn Beziehungen wichtig sind, fügen Sie vor dem letzten Vektorschritt einen kurzen Diagrammschritt mit Apache AGE hinzu.
  • Verfolgen Sie Trends im Laufe der Zeit – Überwachen Sie, um zu bestätigen, dass die Genauigkeit verbessert wurde, nicht nur geschwindigkeit.

Wenn Ihre Anwendung wächst, bewerten Sie die Leistung Ihrer Anwendung erneut, und passen Sie Die RAG-Pipeline nach Bedarf an. Es ist wichtig, sowohl die Abrufgeschwindigkeit als auch die Genauigkeit im Laufe der Zeit zu überwachen.

Wichtige Erkenntnisse

Für einen Rag-Pfad von Postgres behalten Sie den Abruf in der Datenbank bei, beginnen mit pgvectorund wechseln zum entsprechenden Index, wenn die Datenmenge und der Datenverkehr wächst. Fügen Sie einen semantischen Rangfolgendurchlauf in SQL hinzu, wenn die Sortierung enger sein muss. Fügen Sie GraphRAG hinzu, um einen kurzen Diagrammschritt hinzuzufügen, wenn Beziehungen Bedeutung tragen. Bewerten Sie regelmäßig und überwachen Sie in der Produktion, damit das System sowohl schnell als auch richtig bleibt, wenn Daten und Nutzungsänderungen geändert werden.