ผมเชื่อนะว่าคนที่อยู่ในวงการ AI หรือแม้แต่คนอื่นๆ ก็คงรู้จักคำกว่า GenerativeAI กันแทบทุกคนแล้ว ไม่ว่าจะผ่านการเล่นตัว ChatGPT หรือ application ที่เอาไว้สร้างรูป profile ที่ออกมาให้ทุกคนได้เล่นกันในทุกวันนี้ วันนี้หากเราลองมองไปดูในส่วนของการนำ AI มาช่วยในการพูดคุย หรือหาคำตอบจากโลก internet มันก็เป็นตัวช่วยได้ดีทีเดียวแหละ ทั้งความสามารถในการค้นหา รวมถึงสรุปข้อมูลที่ได้นั้นออกมาให้เราในรูปแบบที่เราอ่านและเข้าใจมากที่สุด แต่ความสามารถของมันยังไม่ได้หมดแค่นั้น
ในปัจจุบันเราสามารถนำพวก AI ที่เป็น LLM มาช่วยในการอ่านและสรุปข้อมูลจาก เอกสารที่อยู่ในองค์กรของเราได้ด้วย โดยการใช้เทคนิคที่เรียกว่า RAG (retrieval augmented generation) อธิบายให้ง่ายที่สุด คือเทคนิคที่ช่วยให้เราเอาข้อมูลที่อยู่ในเอกสารมาประมวลผล และจัดเก็บลง database จากนั้นเราก็จะสามารถตั้งคำถามกับข้อมูลชุดนั้น โดยที่จะมีเจ้าตัว AI มาเป็นคนช่วยประมวลผล และตอบออกมาในรูปแบบที่เราจะเข้าใจมากที่สุด
ทั้งหมดนี้เราสามารถเขียน script เพื่อให้มันทำงานได้อย่างไม่ยาก แต่ว่าการที่เราจะเอาไปให้คนอื่นใช้ด้วยยังไงดีหล่ะ การสร้าง API จึงเป็นอะไรที่น่าจะเอามาช่วยในงานนี้ได้ดีที่สุด
ทั้งหมดนี้เรามีตัวอย่าง code ให้ download มาใช้งานได้ที่
GitHub - vultureprime/deploy-ai-model
ในการสร้าง API ของเรานั้น เราจะเลือกใช้เป็น FastAPI ที่เป็น framework การทำ api ด้วยภาษา python ก็เนื่องด้วยว่า Library ทั้งหมดในการทำ RAG นั้นส่วนมากจะเป็น python เป็นหลักดังนั้นการใช้ FastAPI จึงเป็นอะไรที่ง่าย และเข้ากันได้ดีกับส่วนอื่นๆที่เหลือ
ในส่วนการทำงานหลักๆที่เราควรมีจะประกอบไปด้วย
ทั้งหมดนี้เป็นตัวอย่างการทำงานเบื้องต้นที่ควรมีสำหรับการทำ API ของ RAG ในเบื้องต้น
และถ้าหากใครสนใจที่อยากได้ source ไปทดลองเล่นเรามีให้บริการที่นี่
GitHub - vultureprime/deploy-ai-model
และสำหรับการ deployments ก็ทำได้ไม่ยาก เดี๋ยวเรามามีสิธีการนำไปติดตั้งใน server โดยในที่นี้เราจะยกตัวอย่างกันด้วย AWS EC2 และจะใช้งานตัว AWS API Gateway ในการ deploy ตัว application ของเรา
สิ่งที่เราจะขาดไม่ได้ในงานนี้ก็คือ Python ให้เราทำการเช็คก่อนเลยว่า python เราใช้งานได้หรือไม่โดย
จะได้ค่าคืนกลับมาเป็น version ที่ใช้งานอยู่ และถ้าหากข้อมูลไม่มาตามนัดให้ทำการติดตั้งให้เรียบร้อยก่อน
ทำการติดตั้ง library เบื้องต้นที่จำเป็นต้องใช้งาน
เพียงเท่านี้เครื่อง EC2 ของเราก็พร้อมที่จะใช้งานในเบื้องต้นแล้วครับ ระหว่างการทำงานถ้ามี library ต้องใช้งานเพิ่มเติมก็สามารถติดตั้งเพิ่มได้เลยนะครับ
การ initial FastAPi project นั้นง่ายมากๆ เริ่มต้นด้วยการสร้าง main.py และเขียน code ดังนี้ครับ
อันนี้จะเป็น code เริ่มต้นในการสร้าง API ที่จะ return ค่า {"message": "Hello World"} คืนกลับมาให้เราในการเรียกที่ root path
และถ้าต้องการจะเพิ่ม method อื่นๆก็สามารถทำได้ดังนี้ เช่นเราจะทำการเพิ่ม method POST สำหรับ upload file
และสำหรับสั่งให้ตัว FastAPI ทำงาน ให้เราใช้คำสั่ง
เป็นการสั่งให้ app=FastAPI()ในไฟล์ main.py ทำงาน
ในการเอา FastAPI มาใช้งานร่วมกับ RAG เราจำเป็นต้องเข้าใจก่อนกว่า Step ในการทำงานนั้นเป็นอย่างไรบ้าง RAG จะมีขั้นตอนในการทำงานหลักๆคือ
การนำเข้าข้อมูล
การ query ข้อมูล
เมื่อเราเข้าใจตรงนี้แล้วเราจะสามารถสร้างเป็น function ออกมาได้หลักๆ 2 ตัวคือ function ที่ใช้ในการ upload ข้อมูลเข้า และ function ที่ใช้ในการถามคำถามจากข้อมูลที่ upload สุดท้ายแล้วเราจะสามารถเอา method มาจับกับ function เหล่านั้นได้เลย
อีกหนึ่งตัวเอกในงานนี้ของเราหนีไม่พ้นเจ้า database ตัวช่วยที่ให้เราค้นหาข้อมูลจากความคล้ายกันของข้อมูลได้ ด้วยความสามารถของ vector นั้นช่วยให้เราหาความคล้ายกันของข้อมูลได้ง่ายและรวดเร็ว ซึ่งส่วนนี้เป็นส่วนสำคัญของ RAG เลยก็ว่าได้ โดยการใช้งานเราจะติดตั้งตัว chromadb ก่อนโดย
แล้วทำการ import เข้ามาใช้งานใน code โดยเราจะต้องทำการประกาศให้เจ้าตัว chroma เป็น vector database ให้กับตัว langchain ในการใช้งานด้วย
เพื่อเพิ่มความปลอดภัยในการ integrate กับหน้าบ้าน สิ่งที่เราต้องมีการ config เพิ่มเลยก็คือ CORS และใน FastAPI การ config ก็ทำได้ง่ายมากเพียงแค่ config ส่วนนี้เพิ่มเติมเข้าไป
แล้ว CORS คืออะไร CORS (Cross-Origin Resource Sharing) คือ กลไกที่ทำให้ server สามารถกำหนดสิทธิการเข้าถึงทรัพยากรได้ เมื่อมีเว็บไซต์ที่มี origin (domain) อื่น ใช้ HTTP request มายัง server ที่เรา deploy หลังบ้านอยู่ เพื่อให้แค่คนที่ต้องใช้งานเท่านั้นเข้ามาใช้งานได้ โดยเราสามารถระบุได้ตั้งแต่ domain_name, method และ headers เลยว่าค่าไหนคือสิ่งที่เราอยากให้เข้าเรียกใช้งาน
สุดท้ายเราจะมา deploy ตัว application นี้ให้คนอื่นๆได้ใช้งานกัน ซึ่งวิธีการนั้นก็มีตัวช่วยที่ให้เรา deploy ได้อยู่มากมายไม่ว่าจะเป็น
แต่ว่าในครั้งนี้ผมจะขอยกตัวอย่างการ deploy โดยใช้ screen นะครับ ซึ่งผมมองว่าเป็นหนึ่งในวิธีที่ใช้งานไม่ยาก และทุกๆคนน่าจะใช้งานกันได้ เริ่มต้นจาก
Step 1: สร้าง session โดยค่า name ให้เราเปลี่ยนเป็นชื่อที่เราต้องการได้
Step 2: เข้าไปยัง folder ของ api
Step 3: สั่ง start FastAPI
Step 4: ออกจาก session screen ปัจจุบัน (detach)
โดย default ของ FastAPI จะเรียกใช้งานได้ผ่าน port 8000 ดังนั้นก่อนเข้าใช้งาน อย่าลืมตรวจสอบ security group ของ Instance ด้วยนะครับว่าได้ allow port ไว้แล้วหรือยัง ไม่อย่างนั้นเดี๋ยวจะเข้าใช้งานไม่ได้นะครับ
ส่วนสุดท้ายก่อนนำ api ไปใช้งานจริงเราก็ควรเพิ่มสิ่งที่จะมาเป็นตัวจัดการให้กับมันซักหน่อย โดยใช้งานตัว AWS API Gateway ที่จะเป็นตัวช่วยให้เราจัดการ traffic หรือ authentication ต่างๆได้ เพื่อเพิ่มทั้งความปลอดภัย และ feature ในการใช้งาน โดยวิธีการสร้างนั้นสามารถดูได้จาก
API Gateway · VulturePrime โดยเราสามารถใช้ api gateway integrate มายัง url ของ server และใช้งานผ่าน ตัว gateway ได้เลยโดยตรง
ในการทดสอบเราอาจจะทำการตั้งคำถามให้กับข้อมูลที่เรา upload ขึ้นไปแล้วมาดูว่าคำตอบที่ได้มันตรงกับใจเราหรือยัง หากยังรู้สึกว่าคำตอบที่ได้มันยังแปลกๆ เราก็จำเป็นที่ต้อง Tuning ให้กับตัว RAG ของเรา ไม่ว่าจะเป็นการเก็บข้อมูล เราควรแบ่งข้อมูลอย่างไร การค้นหาข้อมูลเราต้องการจำนวนข้อมูลที่ใกล้เคียงมากน้อยขนาดไหน รวมไปถึงความคิดสร้างสรรค์ของ AI ว่าจะให้มีมากน้อยเท่าไหร่ ทั้งหมดนี้ขึ้นอยู่กับการตั้งค่าของผู้พัฒนา เพื่อให้ได้ผลลัพธ์ที่ตรงใจเราหรือคนที่จะใช้งานเราบบของเราได้มากที่สุด
ทิ้งท้ายบทความสำหรับ Q&A bot