Ein CLI-Tool, mit dem Sie GPT-Fragen zu jeder Postgres-Datenbank stellen können. Geben Sie einfach Ihre Verbindungsdetails ein und ask-your-database lädt automatisch das Schema, ruft Beispieldaten ab und führt Abfragen für Sie aus. Am besten funktioniert es mit GPT-4.
Hinweis: Dadurch werden von GPT bereitgestellte Abfragen direkt in der von Ihnen bereitgestellten Datenbank ausgeführt. Sofern es sich nicht um eine schreibgeschützte Verbindung handelt, bedeutet dies, dass Daten versehentlich gelöscht oder aktualisiert werden. Gehen Sie bitte mit Vorsicht vor und bewahren Sie stets Sicherheitskopien Ihrer Daten auf.
Erstellen Sie zunächst eine JSON-Konfigurationsdatei:
{
"openAIAPIKey" : " xxx " ,
"openAIModel" : " gpt-4 " ,
"dbTimeoutMs" : 20000 ,
"apiTimeoutMs" : 30000 ,
"postgresConnection" : {
"host" : " localhost " ,
"port" : 5432 ,
"database" : " imdb " ,
"user" : " imdb " ,
"password" : " 1234 "
}
}
Rufen Sie dies dann mit der Konfigurationsdatei wie folgt auf:
npx ask-your-database myConfig.json
In diesem Beispiel wird eine Beispiel-IMDB-Postgres-Datenbank von RyanMarcus/imdb_pg_dataset verwendet. Sie können es laden, indem Sie dieses Archiv herunterladen und pg_restore --database=db_name --user=user imdb_pg11
verwenden.
Dies wird Ihnen zunächst etwas über Ihre Datenbank erzählen und Sie zu einer ersten Frage auffordern:
> npx [email protected] imdbConfig.json
You are connected to the database imdb. It has the following tables:
aka_name, aka_title, cast_info, char_name, comp_cast_type, company_name, company_type,
complete_cast, info_type, keyword, kind_type, link_type, movie_companies, movie_info,
movie_info_idx, movie_keyword, movie_link, name, person_info, role_type, title
? Ask me a question about this database, and I'll try to answer! (q to quit)
Dann können Sie eine Frage stellen, zum Beispiel:
> What movies did Keanu Reeves act in?
Wenn die Antwort eine SQL-Abfrage enthält, führt dieses Tool diese automatisch für Sie aus und zeigt die Ergebnisse an:
To answer your question, we'll need to join the 'name' table to find Keanu Reeves' person_id,
and then join the 'cast_info' table to get the movie_ids in which Keanu Reeves appeared as an
actor, and finally join the 'title' table to get the titles of those movies.
Please run the following query:
SELECT title.title
FROM name
JOIN cast_info ON name.id = cast_info.person_id
JOIN title ON cast_info.movie_id = title.id
JOIN role_type ON cast_info.role_id = role_type.id
WHERE name.name ILIKE 'Reeves, Keanu' AND role_type.role = 'actor';
Returned 253 rows. Here are the first 101 rows:
┌─────────┬────────────────────────────────────────────────────────────────────────────┐
│ (index) │ title │
├─────────┼────────────────────────────────────────────────────────────────────────────┤
│ 0 │ '101 Biggest Celebrity Oops' │
│ 1 │ '1992 MTV Movie Awards' │
│ 2 │ '1993 MTV Movie Awards' │
│ 3 │ '1995 MTV Movie Awards' │
│ 4 │ '1999 MTV Movie Awards' │
│ 5 │ '2000 Blockbuster Entertainment Awards' │
│ 6 │ '2003 MTV Movie Awards' │
│ 7 │ '2004 Taurus World Stunt Awards' │
│ 8 │ '2006 MTV Movie Awards' │
│ 9 │ '47 Ronin' │
│ 10 │ "A Man's Story" │
│ 11 │ 'A Scanner Darkly' │
... some results truncated
Wenn Sie die Antwort an GPT senden, wird das Ergebnis eingefügt:
> This is great, but it includes things that aren't movies. Can you filter to only
movies, and also sort to show the most recent first?
Mithilfe der neuen Ergebnisse und des früheren Kontexts führt GPT dann weitere Abfragen aus und verbessert seine Ergebnisse:
To filter only movies and sort them by the most recent first, we need to join the 'kind_type'
table to get the movie kind and filter by 'movie', and order the result by 'production_year'
in descending order. Please run the following query:
SELECT title.title, title.production_year
FROM name
JOIN cast_info ON name.id = cast_info.person_id
JOIN title ON cast_info.movie_id = title.id
JOIN role_type ON cast_info.role_id = role_type.id
JOIN kind_type ON title.kind_id = kind_type.id
WHERE name.name ILIKE 'Reeves, Keanu' AND role_type.role = 'actor' AND kind_type.kind = 'movie'
ORDER BY title.production_year DESC;
Returned 64 rows. Here are the first 51 rows:
┌─────────┬─────────────────────────────────────┬─────────────────┐
│ (index) │ title │ production_year │
├─────────┼─────────────────────────────────────┼─────────────────┤
│ 0 │ 'John Wick' │ null │
│ 1 │ 'Passengers' │ null │
│ 2 │ 'Jekyll' │ null │
│ 3 │ 'Jekyll' │ null │
│ 4 │ 'Man of Tai Chi' │ 2013 │
│ 5 │ '47 Ronin' │ 2013 │
│ 6 │ 'Side by Side' │ 2012 │
│ 7 │ 'Generation Um...' │ 2012 │
│ 8 │ 'Sunset Strip' │ 2012 │
... some results truncated
(Unser Beispieldatensatz umfasst nur Daten bis 2013)
Anschließend können Sie die Ergebnisse weiter verfeinern:
> This is great, but can you omit the ones with null production_year?
Die Antwort:
To omit the ones with null production_year, add a condition in the WHERE clause. Please run the
following query:
SELECT title.title, title.production_year
FROM name
JOIN cast_info ON name.id = cast_info.person_id
JOIN title ON cast_info.movie_id = title.id
JOIN role_type ON cast_info.role_id = role_type.id
JOIN kind_type ON title.kind_id = kind_type.id
WHERE name.name ILIKE 'Reeves, Keanu' AND role_type.role = 'actor' AND kind_type.kind = 'movie' AND title.production_year IS NOT NULL
ORDER BY title.production_year DESC;
Returned 60 rows. Here are the first 51 rows:
┌─────────┬─────────────────────────────────────┬─────────────────┐
│ (index) │ title │ production_year │
├─────────┼─────────────────────────────────────┼─────────────────┤
│ 0 │ '47 Ronin' │ 2013 │
│ 1 │ 'Man of Tai Chi' │ 2013 │
│ 2 │ 'Sunset Strip' │ 2012 │
│ 3 │ 'Side by Side' │ 2012 │
│ 4 │ 'Generation Um...' │ 2012 │
│ 5 │ "A Man's Story" │ 2010 │
│ 6 │ "Henry's Crime" │ 2010 │
│ 7 │ 'The Private Lives of Pippa Lee' │ 2009 │
│ 8 │ 'Street Kings' │ 2008 │
│ 9 │ 'The Day the Earth Stood Still' │ 2008 │
... some results truncated
Und so weiter!
Dies vereint ein paar einfache Dinge:
Verwenden Sie pnpm oder den Node-Paketmanager Ihrer Wahl:
pnpm install
pnpm start yourConfig.json
Beachten Sie, dass Ihr Datenbankschema und alle von GPT abgefragten Daten zur Verarbeitung in der Cloud an OpenAI gesendet werden. Lassen Sie je nach Ihren Daten die entsprechende Vorsicht walten.