Full Stack Vector -Suche nach JStor Open Source -Artikeln - Suche nach Bedeutung, nicht nach Schlüsselwörtern!
Backend mit einer Tinecone -Vektor -Datenbank, Umarmung/Transformatoren für Einbettungen und eine Fastapi -API mit zwei Endpunkten zum Abfragen mit oder ohne Metadatenfilter. Frontend mit React.js gemacht
Dieses Projekt soll mit lokalen Datensätzen verwendet werden, die aus dem offiziellen Datenpartner von JSTOR im JSONL -Format aus der vollständigen Daten -Download -Option erstellt werden.
Derzeit werden die Titel und Untertitel von Artikeln kombiniert und eingebettet, und eine semantische Ähnlichkeit wird von der Abfrage zu diesen eingebetteten Titeln und Untertiteln gemessen. Detailliertere Informationen zu den Artikeln werden als Teil der Metadaten zurückgegeben.
Durch die API und die Frontend Web App können die gewünschte obere k -Anzahl der Ergebnisse übergeben werden, und Filter wie Datum und Seitenzahl können ebenfalls in Form eines Filterwörterbuchs unter Verwendung der Pinecone -Metadaten -Abfragesprache übergeben werden.
Durch die API sollte das Wörterbuch von Metadatenfiltern das Wörterbuchformat direkt widerspiegeln, das an Pnecone übergeben werden kann, obwohl die Web -App das Hinzufügen der Tasten und der Benutzer nur die Werte in einem Formular eingeben kann.
Um mit Python und den Abhängigkeiten eingerichtet zu werden, um dieses Projekt auszuführen:
$ python -m venv <evironment_name>$ <evironment_name>Scriptsactivate.bat$ pip install -r requirements.txt$ python <filename>.py PINECONE_API_KEY='<YOUR API KEY>'
PINECONE_ENV='<YOUR ENVIRONMENT>'
Fügen Sie Ihrem Tierenindex Daten hinzu:
Dies sollte alle Elemente im Datensatz in Ihren Tinecone -Index einbetten und erhöhen. Beachten Sie, dass dies zum aktuellen Index hinzugefügt wird. Wenn Sie also möchten, dass sich nur die neuen Daten im Index befinden, sollten Sie den Index zuerst löschen, der mit der Methode ._delete_index () der DBClient -Klasse in diesem Repository erfolgen kann.
Aus dem Ordner /Backend -Ordner kann die API von beiden ausgeführt werden:
$ uvicorn main:app , die die API nicht mit Entwicklungsänderungen aktualisiert, aber mit einem Strg + C im Terminal einfach geschlossen werden kann$ uvicorn main:app --reload , das die API mit allen Entwicklungsänderungen aktualisiert, aber mit Strg + C nicht abgeschaltet wird Die API verfügt über zwei Endpunkte, eine für eine einfache Suche nur für die Suche und eine für eine Suche mit Abfrage plus Metadatenfilter. Die Art und Weise, wie die Filter verarbeitet werden, bedeutet jedoch, dass der gefilterte Endpunkt mit einem leeren DICT funktioniert und daher der einzige Endpunkt ist, der aus der Web -App aufgerufen wird.
GET /api/v1/query/{query_string}/{top_n}
Nimmt zwei Pfadparameter an: - query_string (Datentyp: String) - die Hauptsuchabfrage, die den Ergebnissen semantisch ähnlich sein sollte, die der Benutzer will - Top_n (Datentyp: Integer) - die Anzahl der Übereinstimmungen,
POST /api/v1/filter-query/{query_string}/{top_n}
Nimmt die gleichen zwei Pfadparameter an: - Query_String (Datentyp: String) - Die Hauptsuchabfrage, die den Ergebnissen semantisch ähnlich sein sollte - TOP_N (Datentyp: Integer) - die Anzahl der Übereinstimmungen, die zurückgegeben werden sollen
Plus ein Filterdikt in der Anfrage -Körperschaft, zum Beispiel:
{
"document_type" : { "$eq" : " document " },
"word_count" : { "$gte" : 2000 }
}Beide Endpunkte geben den gleichen Antworttyp zurück, wobei die Hauptergebnisse als Array innerhalb der Schlüsselstrecke 'Übereinstimmungen', zum Beispiel:
{
"matches" : [
{
"id" : " 123-abc-321 " ,
"score" : 18.792 ,
"values" : [],
"metadata" : {
"categories" : [
" Language & Literature " ,
" Humanities "
],
"creator" : [
" A. Creator "
],
"date_published" : " 2020/04/01 " ,
"document_sub_type" : " " ,
"document_type" : " document " ,
"issue_number" : " 1 " ,
"language" : [
" eng "
],
"page_count" : 10.0 ,
"parent_publication" : " A publication " ,
"publisher" : " A publisher " ,
"sub_title" : " " ,
"title" : " An example " ,
"url" : " http://www.jstor.org/stable/1234 " ,
"volume_number" : " 2123 " ,
"word_count" : 123.0
}
}
],
"namespace" : " "
}Sobald das Backend eingerichtet ist und die API ausgeführt wird, sollten Sie die Web -App verwenden können, um mit der API zu interagieren und einfacher zu suchen. Um dies zu tun:
$ npm install aus, um Abhängigkeiten zu installieren$ npm start um die Web -App lokal zu starten