AI
November 18, 2023

Navigating the Text-to-SQL Website Project: A Product Owner's Perspective

อีก Use Case หนึ่งที่สามารถพบเจอได้ในการทำ Project ที่เกี่ยวข้องกับ Generative AI คือ Text-to-SQL หรือการแปลงจากภาษามนุษย์ให้เป็น SQL นั่นเอง สำหรับบทความนี้ก็ยังคงเป็น Guideline ในมุมมองของ PO ว่า หากเราต้องดูแล Project Text-to-SQL เราต้องรู้อะไรบ้างเช่นเคย ถ้าพร้อมแล้วเราก็มาเริ่มกันค่ะ 😆

สำหรับบทความนี้เราจะอ้างอิงการทำงานมาจาก Demo ที่ทาง Vulture Prime ได้ทำขึ้น ก็คือลักษณะเป็น Chatbot ที่สามารถตอบคำถามเป็น SQL และผลลัพธ์จาก Database ที่เราเชื่อมต่อได้

สำหรับ BA หรือ PM, PO ที่อาจจะต้องการ Query ข้อมูลจาก Database แต่ยังไม่เชี่ยวชาญในการใช้ SQL มากพอ Chatbot Text-to-SQL ตัวนี้ จะสามารถช่วยคุณเขียน SQL และสรุปข้อมูลที่คุณต้องการ เพียงแค่คุณแปะ BE Endpoint ที่ต้องการ คุณก็จะได้ SQL ไปใช้งาน รวมถึงข้อมูลที่ต้องการจะทราบอีกด้วย

หมายเหตุ : มีการเพิ่ม Function Random ข้อมูลลงใน Schema ในกรณีที่ข้อมูล Metadata จาก Database ยังไม่ครบ เพื่อให้ง่ายต่อการ Demo

โดย Demo ตัวนี้ ยังมี Constraint อยู่ 1 ข้อ ก็คือ BE Endpoint ที่เชื่อมต่อกับ Chatbot ใน 1 Endpoint Database จะมีได้แค่ 1 Table เท่านั้น

หลังจากรู้ Text-to-SQL Chatbot ของเราคร่าว ๆ แล้ว ทีนี้เราก็มาดูกันว่าถ้าจะทำ Text-to-SQL บ้าง ต้องทำอะไรหรือรู้อะไรกันบ้าง?

Implementing Text-to-SQL Website

ในการทำ Text-to-SQL Chatbot เนื่องจากเราต้องการให้ตอบโจทย์กลุ่ม user ที่ไม่มีความรู้เรื่อง SQL จะสามารถสื่อสารกับ Database ด้วย SQL ได้ รวมถึงมี UI ที่ทำให้ user เข้าถึงและเข้าใจได้ง่าย โดยการที่มีช่อง Chat ให้สามารถพิมพ์คำถามด้วยภาษาพูดปกติ และแสดงผลตอบกลับมาในกล่องข้อความเช่นกัน ก็ทำให้ user สามารถใช้งานได้สะดวกยิ่งขึ้นด้วย

โดย user flow ก็จะประมาณนี้

ก็คือเริ่มจากให้ user แปะ Endpoint BE ที่เชื่อมต่อกับ Postgres Database ที่ช่อง Endpoint แล้วกดเชื่อมต่อ (อันนี้เดี๋ยวอธิบายเพิ่มเติมอีกทีหนึ่ง) หน้าเว็บไซต์ก็จะแสดง Schema และ Data ที่อยู่ใน Database เสร็จแล้วก็ให้ user เขียน Prompt หรือข้อความลงใน Chat แล้วกดส่ง เว็บไซต์ก็จะตอบคำถามพร้อมแสดง SQL ให้ user ผ่านทาง Chat เช่นกัน

โดย Step การ Implement Text-to-SQL ก็จะยังคล้ายเดิม (สามารถไปอ่านเพิ่มเติมได้ในบทความ Q&A Chatbot) ดังนี้

ยกเว้นในส่วนของการ Design BE และ Implement ที่จะต้องทำเพิ่มในส่วนของ Database ที่ต้องการนำมาเชื่อมต่อด้วย ว่าจะใช้ฐานข้อมูลของอะไร ข้อมูลจากไหน และ Setup Database อย่างไร

ต่อไปเราจะมาเจาะรายละเอียดของพาร์ทค่ะว่า Demo ของเราได้เลือกใช้อะไรบ้าง ใช้เทคนิคอะไร แล้วทำไมถึงเลือกใช้อันนี้กันต่อค่ะ

Connecting Postgres's Database as a Query Engine

เนื่องจากการทำ Text-to-SQL จุดสำคัญก็คือการ Query ข้อมูลจาก Database มาใช้งานต่อ เราจึงเลือก Postgres มาเป็น Query Engine ทำให้การเชื่อมต่อมีความเสถียร เพื่อช่วยให้เว็บไซต์สามารถ Handle การ Query ที่มีข้อมูลเยอะและซับซ้อนได้ user ก็จะได้ข้อมูลอย่างรวดเร็วและถูกต้องอีกด้วย

Setting up Postgres Database on EC2

เราได้เลือก Set Up Postgres Database บน Amazon EC2 ซึ่งเป็น Service ของ AWS Cloud Provider ซึ่งมีข้อดีคือ Cloud นั้นสามารถ Scale เข้าออกได้ไม่จำกัด ทำให้สามารถรองรับ Load ที่อาจจะเพิ่มขึ้นได้ดีกว่า มีความปลอดภัย เสถียรและยังมีค่าใช้จ่ายที่ถูกกว่าการเช่า Server ซึ่งทำให้เรามั่นใจได้ว่าเว็บไซต์สามารถเชื่อมต่อกับ Database ได้อย่างมีประสิทธิภาพ

Using Brazilian E-Commerce Public Dataset by Olist

สำหรับ Demo ของเรา ได้เลือกใช้ Dataset ของ Brazillian E-Commerce Public Dataset ของ Olist เพื่อให้ user ได้ลองทดสอบกับชุดข้อมูลที่เป็นข้อมูลจริง โดย Demo เราได้เลือกใช้ Dataset ข้อมูลนักเรียนที่ประกอบด้วย ID ชื่อ นามสกุล ส่วนสูง และน้ำหนัก

Handling Error from SQL Generated from LLMs

ให้ Handle Error ที่เกิดขึ้นจาก SQL Generated จากโมเดล LLMs ด้วย เพื่อให้ UX ดีขึ้น มีความ Smooth ในการใช้งาน ก็คือมีการแจ้งเตือน Error เมื่อเกิดข้อผิดพลาดขึ้น

Using LlamaIndex for Text-to-SQL and Database Connection

ใน Demo Text-to-SQL ครั้งนี้ เราได้เลือกใช้ LlamaIndex เป็น Framework ในการทำ Text-to-SQL และการเชื่อมต่อ Database เพื่อให้การแปลงจาก Text ไปเป็น SQL มีประสิทธิภาพมากขึ้น

Using OpenAI as a LLMs Service

ส่วนของตัวโมเดล LLMs เราได้เลือกใช้โมเดลของ OpenAI โดย LLMs จะเพิ่มประสิทธิภาพในการใช้ภาษา ซึ่งจะทำให้ Chatbot ของเราหลังจากได้ Prompt แล้ว ก็สามารถนำมาเรียบเรียงตอบคำถามได้เป็นธรรมชาติมากกว่าเดิม ทำให้ user อ่านแล้วเข้าใจได้ดียิ่งขึ้น

Using FastAPI to Serve the Backend

ในส่วนของตัว API เราได้เลือกใช้ FastAPI เป็น Service ในการทำ Backend เนื่องจาก FastAPI มีประสิทธิภาพสูง สามารถใช้งานได้ง่ายและง่ายต่อการบำรุงรักษา อีกทั้งยังช่วยเพิ่มประสิทธิภาพโดยรวมของ Project อีกด้วย

Deploying Backend into EC2

เหมือนกับด้านบน Backend เราได้เลือก Deploy บน Cloud โดยเราได้เลือกใช้ Cloud ของ AWS และเลือกใช้ Service Amazon EC2 ซึ่งเป็น Infrastructure as a Service ให้คุณสามารถจัดการ Server ของคุณได้เอง

ปล. จริง ๆ แล้วก็ยังมี Cloud เจ้าอื่นให้คุณสามารถเลือกใช้ได้ตามความถนัด ซึ่งการที่เราเลือกใช้ AWS เนื่องจากเราเชี่ยวชาญ AWS เป็นพิเศษจึงเลือกใช้ Cloud เจ้านี้เป็นหลักค่ะ

ขายของ → บริษัทเราเชี่ยวชาญด้าน Cloud และพร้อมเป็นที่ปรึกษาให้กับคุณ หากสนใจสามารถ ติดต่อเรา หรือสำหรับใครที่ต้องการตรวจสอบ AWS Cloud Cost ตอนนี้เรามี Cloud Cost Check ให้คุณฟรี! หรือสำหรับใครลองเล่นหรือกำลังศึกษา Cloud อยู่แล้วต้องการคำปรึกษาในการใช้งาน Cloud ก็สามารถทักมาสอบถามคุยเล่นกับเราได้เช่นกันค่ะ 😆

Connecting EC2 with API Gateway for CORS

นอกจากที่เราจะเลือกใช้ Cloud แล้ว เรายังมีการใช้ API Gateway เข้ามาต่อกับ EC2 เพื่อช่วยจัดการ Cross-Origin Resource Sharing หรือ CORS โดยข้อดีของการใช้งาน API Gateway คือจะทำให้การสื่อสารระหว่างหน้าเว็บไซต์และ Backend เป็นไปอย่างราบรื่น เพราะ API Gateway จะมาช่วยจัดการ Traffic ของ API นั่นเอง

ขายของ → ใครที่อยากศึกษาทำความเข้าใจเกี่ยวกับ API Gateway เพิ่มเติม สามารถอ่านต่อได้ใน API Gateway

จบไปแล้วกับ Guideline สำหรับชาว PO เมื่อต้องทำ Text-to-SQL หวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อยค่ะ สำหรับใครที่ยังมีข้อสงสัยหรือต้องการสอบถามเพิ่มเติมสามารถติดต่อที่ Facebook Page : Vulture Prime ไว้พบกับบทความหน้า 👋

ปล. สำหรับคนที่ต้องการดูโค้ด สามารถอ่านเพิ่มเติมได้ใน Text-to-SQL OpenAI

ทิ้งท้ายบทความสำหรับ Text2SQL

Text-to-SQL frontend

Text-to-SQL backend

Github frontend

Github backend

FAQ Facebook Group

Aa

© 2023, All Rights Reserved, VulturePrime co., ltd.