เครื่องมือ CLI ที่จะให้คุณถามคำถาม GPT เกี่ยวกับฐานข้อมูล Postgres เพียงระบุรายละเอียดการเชื่อมต่อของคุณ แล้วฐานข้อมูลถามคุณก็จะโหลดสคีมา รับข้อมูลตัวอย่าง และดำเนินการสืบค้นให้คุณโดยอัตโนมัติ ทำงานได้ดีที่สุดกับ GPT-4
หมายเหตุ: การดำเนินการนี้จะเรียกใช้การค้นหาที่ GPT ให้ไว้โดยตรงในฐานข้อมูลที่คุณระบุ เว้นแต่จะเป็นการเชื่อมต่อแบบอ่านอย่างเดียว นั่นหมายความว่าอาจลบหรืออัปเดตข้อมูลโดยไม่ได้ตั้งใจ โปรดใช้ด้วยความระมัดระวังและสำรองข้อมูลของคุณไว้เสมอ
ขั้นแรก ให้สร้างไฟล์การกำหนดค่า JSON:
{
"openAIAPIKey" : " xxx " ,
"openAIModel" : " gpt-4 " ,
"dbTimeoutMs" : 20000 ,
"apiTimeoutMs" : 30000 ,
"postgresConnection" : {
"host" : " localhost " ,
"port" : 5432 ,
"database" : " imdb " ,
"user" : " imdb " ,
"password" : " 1234 "
}
}
จากนั้นเรียกสิ่งนี้ด้วยไฟล์ปรับแต่งดังนี้:
npx ask-your-database myConfig.json
ตัวอย่างนี้ใช้ตัวอย่างฐานข้อมูล IMDB postgres จาก RyanMarcus/imdb_pg_dataset คุณสามารถโหลดได้โดยดาวน์โหลดไฟล์เก็บถาวรนี้และใช้ pg_restore --database=db_name --user=user imdb_pg11
ขั้นแรก สิ่งนี้จะบอกคุณเล็กน้อยเกี่ยวกับฐานข้อมูลของคุณ และขอให้คุณถามคำถามเบื้องต้น:
> 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)
จากนั้นคุณสามารถถามคำถามเช่น:
> What movies did Keanu Reeves act in?
หากการตอบกลับมีการสืบค้น SQL เครื่องมือนี้จะเรียกใช้ให้คุณโดยอัตโนมัติและแสดงผลลัพธ์:
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
เมื่อคุณส่งการตอบกลับไปยัง GPT ผลลัพธ์จะรวมอยู่ด้วย:
> 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?
เมื่อใช้ผลลัพธ์ใหม่และบริบทที่ผ่านมา GPT จะดำเนินการค้นหาเพิ่มเติมและปรับปรุงผลลัพธ์:
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
(ชุดข้อมูลตัวอย่างของเรามีเฉพาะข้อมูลจนถึงปี 2013)
จากนั้น คุณสามารถปรับแต่งผลลัพธ์ต่อไปได้:
> This is great, but can you omit the ones with null production_year?
การตอบสนอง:
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
และอื่นๆ!
นี่เป็นการรวมสิ่งง่ายๆ สองสามอย่างเข้าด้วยกัน:
การใช้ pnpm หรือตัวจัดการแพ็กเกจโหนดที่คุณเลือก:
pnpm install
pnpm start yourConfig.json
โปรดทราบว่าสคีมาฐานข้อมูลของคุณและข้อมูลใดๆ ที่ GPT สอบถามจะถูกส่งไปยัง OpenAI เพื่อประมวลผลในระบบคลาวด์ ใช้ความระมัดระวังในปริมาณที่เหมาะสมโดยขึ้นอยู่กับข้อมูลของคุณ