เมื่อพูดถึง database ก็คงหนีไม่พ้น SQL ภาษาที่เอาไว้ใช้ในการทำงานกับ database ของเรา หลายคนโดนเฉพาะมือใหม่อาจจะเจอปัญหาที่ว่า เราอยากได้ข้อมูลซักชุดแต่ว่ารู้จะเขียน SQL อย่างไรให้ดึงข้อมูลชุดนั้นได้ ทำให้ต้องเสียเวลาไปกับการค้นหา syntax ที่ต้องการ ทำงานให้เวลาในการทำงานเพิ่มขึ้น
แต่ในปัจจุบันนี้การเข้ามาของ GenerativeAI เป็นตัวช่วยให้เราทำงานอะไรหลายๆอย่างได้ง่ายขึ้นมาก ซึ่งหนึ่งในความสามารถที่เราจะเอามานำเสนอวันนี้คือ การเปลี่ยนข้อความให้กลายเป็น sql เพื่อทำงานข้อมูลใน database บทความนี้จะพาทุกคนไปทดลองใช้งาน text to sql เบื้องต้น ตั้งแต่การเตรียม server จนไปถึงการสร้าง api ในการใช้งาน ที่ทุกคนสามารถนำไปปรับใช้กับข้อมูลของตัวเองที่มีอยู่ได้
ตัวอย่างนี้เราจะใช้งาน EC2 instance สำหรับการติดตั้ง database และ api backend โดยเราจะใช้งาน EC2 type ที่ต้องการ Ram มากซักหน่อยเพื่อ run ตัว database โดย type ที่แนะนำก็จะเป็น large ขึ้นไปเช่น m5.large, c5.large, r5.large ที่มี spec เบื้องต้นเพียงพอต่อการใช้งาน และ storage ซัก 50GB ขึ้นไป และ OS ที่เลือกใช้เราจะใช้งานเป็น Ubuntu และอย่าลืม allow port สำหรับการเชื่อมต่อให้เรียบร้อยนะครับ ปล.เพื่อการทดสอบ เราอาจจะ allow ทุกอย่างเป็น public ได้ แต่การใช้งานจริงอาจจะต้อง design ส่วนนี้ให้รัดกุมมากยิ่งขึ้น
มาถึงการติดตั้ง database วิธีที่ง่ายที่สุดแล้วจะแนะนำก็คือการใช้งาน docker เป็นตัวช่วยในการติดตั้ง ดังนั้นเราจึงต้องมี docker ติดตั้งใน EC2 เราซะก่อน โดยใช้คำสั่งดังนี้
ศึกษาข้อมูลเพิ่มเติมได้จาก Install Docker Engine on Ubuntu | Docker Docs
ทำการติดตั้ง postgres ด้วย docker
เพียงเท่านี้เราก็จะได้ postgres database พร้อมใช้งานผ่าน port 5432
Source code สำหรับบทความนี้เราจะอ้างอิงจาก
GitHub - vultureprime/deploy-ai-model ในตัวอย่าง text-to-sql-openai-postgresSQL ใน aws-example ในตัวอย่างนี้เราจะใช้ FastAPI ในการสร้าง API, Llamaindex เป็นตัวกลางในการทำ data model และ LLM model ที่เป็น GPT-4 ดังนั้นในการใช้งานจำเป็นต้องการสร้าง API-KEY ของ openai ซะก่อนที่ https://platform.openai.com/
ทำการติดตั้ง python3 library ที่จำเป็นสำหรับ FastAPI
สร้างไฟล์ app.py และทำการ initial FastAPI ขึ้นมา
จากตัวอย่าง code จะเป็นการ initial FastAPI project แล้ว enable CORS สำหรับการเชื่อมต่อกับ frontend ให้เรียบร้อย และการสั่ง run จะใช้คำสั่งว่า
เป็นการสั่งให้ FastAPI ที่เราประกาศไว้ในไฟล์ app.py ทำงาน โดย server จะรันที่ port 8000 เป็น default
ติดตั้ง library
ประกาศ parameter ในการสร้าง connection โดยการดึงข้อมูลจาก ENV เครื่องดังนั้นเราจึงต้องประกาศ ENV ไว้ก่อน
และจาก github ตัวอย่างเรามีการสร้าง API ไว้สำหรับเตรียม table และ ข้อมูลไว้ให้แล้ว ซึ่งเป็นข้อมูลเกี่ยวกับนักเรียน ที่จะมีข้อมูลน้ำหนัก และส่วนสูง ทุกคนสามารถรันตามลำดับเพื่อใส่ข้อมูลลง database ได้เลยไล่ตั้งแต่
ในที่สุดก็มาถึงจุดสำคัญของเราตัวอย่างนี้แล้ว นั่นคือการนำ GenerativeAI มาใช้งาน โดยสิ่งที่เราใช้จะมี 2 ตัวด้วยกันคือ
เริ่มกันที่การติดตั้ง Library Llamaindex
ประกาศ ENV สำหรับ openai-key
ส่วนของการใช้งานจะอยู่ใน function queryWithPrompt หลักการทำงานก็คือการรับ query ในรูปแบบที่เป็น Text จากนั้น Llamaindex จะทำงานร่วมกับ LLM ในการเชื่อมต่อไปยัง database และสร้าง SQL ที่ต้องการกลับมาให้
การ deploy เราสามารถทำได้หลายวิธีด้วยกัน ตัวอย่างการ deploy ครั้งนี้จะใช้ผ่าน screen นะครับ ซึ่งผมมองว่าเป็นหนึ่งในวิธีที่ใช้งานไม่ยาก และทุกๆคนน่าจะใช้งานกันได้ เริ่มต้นจาก
Step 1: สร้าง session โดยค่า name ให้เราเปลี่ยนเป็นชื่อที่เราต้องการได้
Step 2: เข้าไปยัง folder ของ api
Step 3: สั่ง start FastAPI
Step 4: ออกจาก session screen ปัจจุบัน (detach)
เราก็จะได้ server ทำงานอยู่ background สำหรับการใช้งานได้
เราจะทดสอบกันว่า API ที่เราได้ deploy ไปใช้งานได้หรือไม่โดยเราจะมาดูผลลัพธ์ที่ต้องการกัน
ทดลอง query ผ่าน PGadmin
ปิดท้ายด้วยการนำ API ที่ได้ไปทำการเชื่อต่อกับ API Gateway สำหรับการนำไปใช้งาน เพื่อที่เราจะได้ทำการ manage การใช้งานต่างๆได้เพิ่มเติมโดยที่ลดงาน coding ลงไป เช่นการเพิ่ม Authentication เป็นต้น อ่านข้อมูลเพิ่มเติมได้ที่ API Gateway · VulturePrime
ทิ้งท้ายบทความสำหรับ Text2SQL