Versprechen der Abruf-Technology (RAG) ist, dass AI-Systeme Fragen verwenden können, indem sie aktuelle oder domänenspezifische Informationen beantworten, ohne das Modell umzusetzen. Die meisten Lag -Pipelines behandeln jedoch immer noch Dokumente und Informationen als flach und getrennt. Sie basieren isolierte Stücke auf der Grundlage der Ähnlichkeit von Vektor, ohne dass sich diese Brocken beziehen.
Um Rags Unkenntnis von – oft offensichtlichen – Verbindung zwischen Dokumenten und Brocken zu beheben, haben sich Entwickler auf Grafik -Rag Nicht die zusätzliche Komplexität der Implementierung wert.
In unserem letzten Artikel über Das Open-Supply Graph Rag-Projekt und GraphRetrieverWir haben einen neuen, einfacheren Ansatz eingeführt, der Ihre vorhandene Vektorsuche mit leichtem, metadatenbasiertem Diagramm-Traversal kombiniert, für das keine Grafikkonstruktion oder -speicher erforderlich ist. Die Grafikverbindungen können zur Laufzeit-oder sogar zur Abfragezeit-definiert werden, indem angegeben wird, welche Dokumentmetadatenwerte Sie zum Definieren von Graphen „Kanten“ verwenden möchten, und diese Verbindungen werden während des Abrufens im Graph-Lappen durchquert.
In diesem Artikel erweitern wir einen der Anwendungsfälle in der Dokumentation des Graph Rag -Projekts –Ein Demo -Notizbuch finden Sie hier– Dies ist ein einfaches, aber veranschaulichendes Beispiel: Durchsuchung von Filmkritiken aus einem Datensatz mit faulen Tomaten, die automatisch jede Rezension mit seinem lokalen Untergraphen der verwandten Informationen verbinden und dann Abfrageantworten mit vollem Kontext und Beziehungen zwischen Filmen, Rezensionen, Rezensenten und anderen Daten und Metadaten -Attributen zusammenstellen.
Der Datensatz: Rotten Tomaten -Rezensionen und Filmmetadaten
Der in dieser Fallstudie verwendete Datensatz stammt aus einem öffentlichen Kaggle -Datensatz mit dem Titel “ „Huge Rotten Tomaten Filme und Kritiken“. Es enthält zwei primäre CSV -Dateien:
- ROTTEN_TOMATOES_MOVIES.CSV – Enthält strukturierte Informationen zu über 200.000 Filmen, darunter Felder wie Titel, Besetzung, Regisseure, Genres, Sprache, Veröffentlichungsdatum, Laufzeit und Kassengewinne.
- ROTTEN_TOMATOES_MOVIE_REViews.csv-Eine Sammlung von quick 2 Millionen von Nutzern eingerichteten Filmbewertungen, mit Feldern wie Überprüfungstext, Bewertung (z.
Jede Rezension ist über einen gemeinsam genutzten Movie mit einem Movie verknüpft, wodurch eine natürliche Beziehung zwischen unstrukturierten Überprüfungsinhalten und strukturierten Filmmetadaten hergestellt wird. Dies macht es zum perfekten Kandidaten, um die Fähigkeit von GraphRetriever zu demonstrieren, Dokumentbeziehungen allein mithilfe von Metadaten zu durchqueren.
Durch die Behandlung von Metadatenfeldern wie Movie_ID, Style oder sogar gemeinsamen Schauspielern und Regisseuren als Graphenkanten können wir einen angeschlossenen Abruffluss erstellen, der jede Abfrage automatisch mit dem verwandten Kontext anreicht.
Die Herausforderung: Filmkritiken in den Kontext stellen
Ein häufiges Ziel bei AI-betriebenen Such- und Empfehlungssystemen ist es, Benutzer natürliche, offene Fragen zu stellen und sinnvolle, kontextbezogene Ergebnisse zu erzielen. Mit einem großen Datensatz von Filmkritiken und Metadaten möchten wir vollkontexte Antworten auf Eingabeaufforderungen unterstützen wie:
- „Was sind einige gute Familienfilme?“
- „Was sind einige Empfehlungen für aufregende Actionfilme?“
- „Was sind einige klassische Filme mit erstaunlicher Kinematographie?“
Eine großartige Antwort auf jede dieser Eingabeaufforderungen erfordert subjektive Überprüfungsinhalte sowie einige halbstrukturierte Attribute wie Style, Publikum oder visueller Stil. Um eine gute Antwort mit vollem Kontext zu geben, muss das System:
- Abrufen Sie die relevantesten Bewertungen anhand der Abfrage des Benutzers unter Verwendung einer vektorbasierten semantischen Ähnlichkeit ab
- Bereicherer jeder Rezension mit vollständigen Filmdetails – Title, Veröffentlichungsjahr, Style, Regisseur usw. – kann das Modell eine vollständige, geerdete Empfehlung vorlegen
- Verbinden Sie diese Informationen mit anderen Bewertungen oder Filmen, die einen noch breiteren Kontext bieten, z. B. was andere Rezensenten sagen? Wie vergleichen sich andere Filme im Style?
Eine herkömmliche Lag -Pipeline kann Schritt 1 intestine abwickeln und relevante Textausschnitte abgeben. Ohne zu wissen, wie sich die abgerufenen Stücke auf andere Informationen im Datensatz beziehen, können die Antworten des Modells den Kontext, die Tiefe oder die Genauigkeit fehlen.
Wie Grafiklag die Herausforderung angeht
Angesichts der Abfrage eines Benutzers kann ein einfaches Lag -System einen Movie empfehlen, der auf einer kleinen Reihe von direkt relevanten Bewertungen basiert. Aber Graph Rag und GraphRetriever können den relevanten Kontext – zum Beispiel andere Bewertungen derselben Filme oder andere Filme im selben Style – problemlos in denselben Style einsetzen und kontrastieren, bevor Sie Empfehlungen abgeben.
Vom Standpunkt der Implementierung bietet Graph Rag eine saubere, zweistufige Lösung:
Schritt 1: Erstellen Sie ein Standardlag -System
Erstens haben wir wie bei jedem Lappensystem den Dokumenttext mit einem Sprachmodell einbetten und die Einbettung in einer Vektor -Datenbank gespeichert. Jede eingebettete Überprüfung kann strukturierte Metadaten enthalten, wie z. Jede eingebettete Filmbeschreibung enthält Metadaten wie Movie_ID, Style, Release_year, Regisseur usw.
Dies ermöglicht es uns, ein typisches vektorbasiertes Abruf zu bewältigen: Wenn ein Benutzer eine Abfrage wie „Was sind einige gute Familienfilme?“ Eingibt, können wir schnell Bewertungen aus dem Datensatz abholen, die semantisch mit Familienfilmen verwandt sind. Das Verbinden dieser mit einem breiteren Kontext erfolgt im nächsten Schritt.
Schritt 2: Fügen Sie Graphtraversal mit GraphRetriever hinzu
Sobald die semantisch relevanten Überprüfungen in Schritt 1 unter Verwendung der Vektorsuche abgerufen wurden, können wir GraphRetriever verwenden, um Verbindungen zwischen den Bewertungen und ihren zugehörigen Filmaufzeichnungen zu durchqueren.
Insbesondere der GraphRetriever:
- Relevante Bewertungen über semantische Suche (LAG) abrufen
- Folgt metadatenbasierte Kanten (wie rezension_movie_id), um weitere Informationen abzurufen, die direkt mit jeder Bewertung zusammenhängen, z. B. Filmbeschreibungen und -attribute, Daten über den Rezensent usw.
- Fusioniert den Inhalt in ein einzelnes Kontextfenster, damit das Sprachmodell beim Generieren einer Antwort verwendet werden kann
Ein wichtiger Punkt: Es ist kein vorgefertigtes Wissensgraphen erforderlich. Die Grafik wird vollständig in Bezug auf Metadaten definiert und zur Abfragezeit dynamisch durchquert. Wenn Sie die Verbindungen auf gemeinsame Akteure, Genres oder Zeiträume erweitern möchten, aktualisieren Sie einfach die Edge -Definitionen in der Retriever -Konfiguration – und müssen die Daten nicht neu verarbeitet oder neu gestalten.
Wenn additionally ein Benutzer nach aufregenden Actionfilmen mit bestimmten Eigenschaften fragt, kann das System Datenpunkte wie das Veröffentlichungsjahr des Movies, das Style und die Besetzung einbringen und sowohl die Relevanz als auch die Lesbarkeit verbessern. Wenn jemand nach klassischen Filmen mit erstaunlicher Kinematographie fragt, kann das System auf Rezensionen älterer Filme zurückgreifen und sie mit Metadaten wie Style oder Ära kombinieren, die Reaktionen geben, die sowohl subjektiv als auch fakten sind.
Kurz gesagt, GraphRetriever überbrückt die Lücke zwischen unstrukturierten Meinungen (subjektiver Textual content) und strukturiertem Kontext (verbundene Metadaten) – produzierende Abfrageantworten, die intelligenter, vertrauenswürdiger und vollständiger sind.
GraphRetriever in Aktion
Um zu zeigen, wie GraphRetriever unstrukturierte Überprüfungsinhalte mit strukturierten Filmmetadaten verbinden kann, gehen wir mit einem Beispiel des Datensatzes für Rotten Tomaten durch ein Primary -Setup. Dies beinhaltet drei Hauptschritte: Erstellen eines Vektorspeichers, der Konvertierung von Rohdaten in Langchain -Dokumente und Konfiguration der Graph -Traversal -Strategie.
Sehen Das Beispiel -Notizbuch im Graph Rag -Projekt Für den vollständigen Arbeitscode.
Erstellen Sie den Vektor Retailer und Einbettungen
Wir beginnen damit, die Dokumente einzubetten und zu speichern, genau wie wir es in jedem Lappensystem tun würden. Hier verwenden wir Openaiembeding und den Astra DB Vector Retailer:
from langchain_astradb import AstraDBVectorStore
from langchain_openai import OpenAIEmbeddings
COLLECTION = "movie_reviews_rotten_tomatoes"
vectorstore = AstraDBVectorStore(
embedding=OpenAIEmbeddings(),
collection_name=COLLECTION,
)
Die Struktur von Daten und Metadaten
Wir speichern und betten Dokumentinhalte wie normalerweise für jedes Lappensystem ein, aber wir bewahren auch strukturierte Metadaten für die Verwendung in der Graphen -Durchquerung. Der Dokumentinhalt wird minimal gehalten (Überprüfungstext, Filmtitel, Beschreibung), während die reichhaltigen strukturierten Daten in den Feldern „Metadaten“ im gespeicherten Dokumentobjekt gespeichert werden.
Dies ist beispielsweise JSON aus einem Filmdokument im Vector Retailer:
> pprint(paperwork(0).metadata)
{'audienceScore': '66',
'boxOffice': '$111.3M',
'director': 'Barry Sonnenfeld',
'distributor': 'Paramount Photos',
'doc_type': 'movie_info',
'style': 'Comedy',
'movie_id': 'addams_family',
'originalLanguage': 'English',
'ranking': '',
'ratingContents': '',
'releaseDateStreaming': '2005-08-18',
'releaseDateTheaters': '1991-11-22',
'runtimeMinutes': '99',
'soundMix': 'Encompass, Dolby SR',
'title': 'The Addams Household',
'tomatoMeter': '67.0',
'author': 'Charles Addams,Caroline Thompson,Larry Wilson'}
Beachten Sie, dass der Graphtraversal mit GraphRetriever nur die Attribute dieses Metadatenfelds verwendet, kein spezialisiertes Diagramm -DB benötigt und keine LLM -Aufrufe oder andere teure verwendet wird
Konfigurieren und Ausführen von GraphRetriever
Der GraphRetriever durchquert ein einfaches Diagramm, das durch Metadatenverbindungen definiert ist. In diesem Fall definieren wir eine Kante von jeder Rezension zu seinem entsprechenden Movie unter Verwendung der Richtungsbeziehung zwischen reviewed_movie_id (in Bewertungen) und Movie_id (in Filmbeschreibungen).
Wir verwenden eine „eifrige“ Traversalstrategie, die eine der einfachsten Durchfahrtsstrategien ist. Sehen Dokumentation für das Graph Rag -Projekt Weitere Informationen zu Strategien.
from graph_retriever.methods import Keen
from langchain_graph_retriever import GraphRetriever
retriever = GraphRetriever(
retailer=vectorstore,
edges=(("reviewed_movie_id", "movie_id")),
technique=Keen(start_k=10, adjacent_k=10, select_k=100, max_depth=1),
)
In dieser Konfiguration:
start_k=10: Ruft 10 Dokumente mit semantischer Suche abadjacent_k=10: Ermöglicht bis zu 10 benachbarte Dokumente bei jedem Schritt des Graphen -Durchquellensselect_k=100: Bis zu 100 Dokumente können zurückgegeben werdenmax_depth=1: Die Grafik wird nur eine Stufe tief durchquert, von Rezension zum Movie
Beachten Sie, dass die Graph -Traversal -Tiefe in diesem einfachen Beispiel bei 1 zu einem überprüften Movie auf genau 1 auf 1 gestoppt wäre. Sehen Weitere Beispiele im Graph Rag -Projekt Für anspruchsvollere Traversal.
Eine Frage anrufen
Sie können jetzt eine natürliche Sprachfrage durchführen, wie z. B.:
INITIAL_PROMPT_TEXT = "What are some good household motion pictures?"
query_results = retriever.invoke(INITIAL_PROMPT_TEXT)
Und mit einer kleinen Sortierung und Reformatierung des Textes – siehe das Notizbuch für Particulars – können wir beispielsweise eine grundlegende Liste der abgerufenen Filme und Rezensionen ausdrucken:
Film Title: The Addams Household
Film ID: addams_family
Overview: A witty household comedy that has sufficient sly humour to maintain adults chuckling all through.
Film Title: The Addams Household
Film ID: the_addams_family_2019
Overview: ...The movie's simplistic and episodic plot put a serious dampener on what might have been a welcome breath of contemporary air for household animation.
Film Title: The Addams Household 2
Film ID: the_addams_family_2
Overview: This serviceable animated sequel focuses on Wednesday's emotions of alienation and advantages from the household's kid-friendly jokes and highway journey adventures.
Overview: The Addams Household 2 repeats what the primary film achieved by taking the favored household and turning them into one of the boringly generic youngsters movies in recent times.
Film Title: Addams Household Values
Film ID: addams_family_values
Overview: The title is apt. Utilizing these morbidly sensual cartoon characters as pawns, the brand new film Addams Household Values launches a witty assault on these with mounted concepts about what constitutes a loving household.
Overview: Addams Household Values has its moments -- reasonably a whole lot of them, in reality. You knew that simply from the title, which is a pleasant approach of turning Charles Addams' household of ghouls, monsters and vampires free on Dan Quayle.
Wir können dann die obige Ausgabe an die LLM übergeben, um eine endgültige Antwort zu erzeugen, wobei wir die vollständigen Set -Informationen aus den Bewertungen sowie den verknüpften Filmen verwenden.
Das Einrichten der letzten Eingabeaufforderung und des LLM -Anrufs sieht folgt aus:
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from pprint import pprint
MODEL = ChatOpenAI(mannequin="gpt-4o", temperature=0)
VECTOR_ANSWER_PROMPT = PromptTemplate.from_template("""
An inventory of Film Critiques seems beneath. Please reply the Preliminary Immediate textual content
(beneath) utilizing solely the listed Film Critiques.
Please embody all motion pictures that is likely to be useful to somebody searching for film
suggestions.
Preliminary Immediate:
{initial_prompt}
Film Critiques:
{movie_reviews}
""")
formatted_prompt = VECTOR_ANSWER_PROMPT.format(
initial_prompt=INITIAL_PROMPT_TEXT,
movie_reviews=formatted_text,
)
outcome = MODEL.invoke(formatted_prompt)
print(outcome.content material)
Und die endgültige Antwort aus dem Graph Rag -System könnte so aussehen:
Primarily based on the opinions supplied, "The Addams Household" and "Addams Household Values" are really helpful nearly as good household motion pictures. "The Addams Household" is described as a witty household comedy with sufficient humor to entertain adults, whereas "Addams Household Values" is famous for its intelligent tackle household dynamics and its entertaining moments.
Beachten Sie, dass diese endgültige Antwort das Ergebnis der ersten semantischen Suche nach Bewertungen conflict, in denen Familienfilme erwähnt werden – plus erweiterter Kontext aus Dokumenten, die in direktem Zusammenhang mit diesen Bewertungen stehen. Durch die Erweiterung des relevanten Kontextes über die einfache semantische Suche können das LLM- und das Gesamtgraf -Lappensystem vollständigere und hilfreiche Antworten zusammenstellen.
Probieren Sie es selbst aus
Die Fallstudie in diesem Artikel zeigt, wie:
- Mischen Sie unstrukturierte und strukturierte Daten in Ihre Lag -Pipeline
- Verwenden Sie Metadaten als dynamisches Wissensgrafik, ohne einen zu bauen oder zu speichern
- Verbessern Sie die Tiefe und Relevanz von AI-generierten Antworten, indem Sie den verbundenen Kontext aufnehmen
Kurz gesagt, dies ist ein Graph -Lappen in Aktion: Struktur und Beziehungen hinzuzufügen, um LLMs nicht nur abzurufen, sondern den Kontext und die Vernunft effektiver zu erstellen. Wenn Sie bereits neben Ihren Dokumenten reiche Metadaten aufbewahren, bietet Ihnen GraphRetriever eine praktische Möglichkeit, diese Metadaten zu funktionieren – ohne zusätzliche Infrastruktur.
Wir hoffen, dass dies Sie dazu inspiriert, GraphRetriever über Ihre eigenen Daten auszuprobieren-alles Open-Supply-, insbesondere wenn Sie bereits mit Dokumenten arbeiten, die implizit durch gemeinsame Attribute, Hyperlinks oder Referenzen verbunden sind.
Sie können hier die vollständigen Pocket book- und Implementierungsdetails untersuchen: Graph Lag auf Filmkritiken von Rotten Tomaten.
