การดำเนินงาน
Last updated
Last updated
GearMind ถูกพัฒนาขึ้นภายใต้รูปแบบของ โครงงานพัฒนาซอฟต์แวร์เชิงบูรณาการ (Integrated Software Development Project) โดยผสานองค์ความรู้จากหลากหลายสาขาวิชา เช่น วิทยาการคอมพิวเตอร์ วิศวกรรมซอฟต์แวร์ และ วิทยาศาสตร์ข้อมูล เข้าด้วยกัน เพื่อสร้างสรรค์ระบบจัดการองค์ความรู้ ที่ชาญฉลาด และ ตอบโจทย์ความต้องการของอุตสาหกรรมยุคใหม่
หัวข้อนี้จะอธิบายถึงวิธีการดำเนินโครงการ GearMind - คู่หูงานอุตสาหกรรมที่ล้ำหน้า ด้วยรูปแบบการพัฒนาแบบ Agile ซึ่งเน้นการทำงานที่ยืดหยุ่น รวดเร็ว และตอบสนองต่อการเปลี่ยนแปลงได้ดี โดยทีมพัฒนาจะแบ่งงานออกเป็นช่วงสั้นๆ เรียกว่า Sprint ซึ่งในแต่ละ Sprint จะครอบคลุมตั้งแต่การวางแผน การพัฒนา ไปจนถึงการทดสอบ เพื่อให้มั่นใจได้ว่า ผลลัพธ์ที่ได้ในแต่ละ Sprint มีคุณภาพและตรงตามความต้องการของผู้ใช้งานมากที่สุด
รายละเอียดของการดำเนินงานในแต่ละ Sprint สามารถสรุปออกมาได้ดังนี้
เราได้เริ่มนำปัญหาที่เกิดขึ้นโดยการสัมภาษณ์ผู้ที่ประสบปัญหา เพื่อเก็บรวบรวมความต้องการมาวิเคราะห์และค้นหาเทคโนโลยีที่สามารถแก้ไขปัญหาที่เกิดขึ้นได้จริง โดยได้พบแพลตฟอร์มแชทบอทหลายตัว เช่น
ChatGPT: แชทบอทที่พัฒนาโดย OpenAI
Gemini: แชทบอทที่พัฒนาโดย Google
Claude: แชทบอทที่พัฒนาโดย Antrophic
และอื่นๆอีกมากมาย ทั้งสามตัวข้างต้นสามารถสนทนากับผู้ใช้ได้อย่างดี และสามารถช่วยคิด วิเคราะห์ ความต้องการต่างๆของผู้ใช้ได้ เราจึงได้ทดลองให้ผู้ใช้งานลองใช้แชทบอทเหล่านี้ ซึ่งสามารถค้นหาข้อมูลจากเอกสารได้ โดยการอัพโหลดข้อมูล และทำการสนทนา ซึ่งสามารถทำงานได้อย่างดี แต่มีจุดที่ต้องพิจารณาคือประสบการณ์การใช้งานที่ดีกับการนำมาเป็นแชทบอทจัดการองค์ความรู้ เพราะแชทบอทข้างต้นไม่มีระบบเก็บข้อมูลที่เป็นศูนย์กลาง ทำให้ตอนที่สร้างบทสนทนาใหม่ ผู้ใช้จะต้องอัพโหลดเอกสารองค์ความรู้เข้าไปใหม่ทุกครั้ง เงื่อนไขการใช้งานนี้ ทำให้เป็นอุปสรรคต่อการใช้งาน นอกจากนั้นยังมีเงื่อนไขการใช้งานของแชทบอทดังกล่าวคือการเป็นแชทบอทใช้งานทั่วไป บางครั้ง โมเดลอาจจะไม่มีความรอบคอบในการตอบคำถาม ทำให้ผู้ใช้ได้ข้อมูลจากเอกสารไม่ละเอียดและครอบคลุม ทั้งหมดนี้ไม่ใช่จุดด้อยของแชทบอทดังกล่าว แต่เป็นเงื่อนไขการใช้งานในด้านทั่วไป
ระหว่างการฝึกงานที่บริษัทเวิลด์ เอนเนอร์จี กรุ๊ป จำกัด ได้มีการแชร์ความรู้เกี่ยวกับการนำ Generative AI มาประยุกต์ใช้กับองค์กร ทำให้เราทราบว่ามีหลายองค์กรที่ได้สร้างแชทบอทของตนเองขึ้นมาโดยให้เข้าถึงองค์ความรู้ภายในได้อย่างง่ายดาย แน่นอนว่าการดำเนินงานต่างๆกลายเป็นเรื่องที่สะดวกมากขึ้น แต่สำหรับองค์กรอื่นๆที่ไม่ได้มีทีมพัฒนาซอฟแวร์ หรือมีข้อจำกัดบางอย่างที่ทำให้ไม่สามารถพัฒนาแชทบอทส่วนตัวขึ้นมาได้ กลับเสียโอกาสที่จะเข้าถึงเทคโนโลยีที่น่าสนใจนี้ไป
จากบทเรียนดังกล่าว ผู้จัดทำโครงการจึงต้องการที่จะสร้างแชทบอทส่วนตัวเพื่อใช้ในการจัดการองค์ความรู้ในองค์กรได้อย่างง่ายดาย โดยจะต้อง
เข้าถึง GearMind ได้อย่างง่ายดายผ่านเว็บไซต์
มีฐานข้อมูลกลางส่วนตัว ใช้ในการเก็บองค์ความรู้เพื่อให้สามารถสะดวกต่อการเข้าถึงข้อมูล ของโมเดลภาษา
หลังจากได้ขอบเขตที่กำหนดไว้ดังกล่าวแล้ว เราจึงเริ่มทำการออกแบบส่วนติดต่อผู้ใช้ของระบบ โดยจะต้องใช้งานง่ายมากที่สุด ซึ่งได้โครงสร้างออกมาเป็นดังรูปภาพต่อไปนี้:
หลังจากที่ได้ตัวอย่างโครงร่างส่วนติดต่อผู้ใช้ของระบบอย่างง่ายแล้ว ต่อมาทำการวางแผนเลือกใช้เทคโนโลยี และ เครื่องมือที่ทันสมัย เพื่อให้มั่นใจได้ถึงประสิทธิภาพ ความเสถียร และความยืดหยุ่นของระบบ เครื่องมือหลักดังกล่าวประกอบไปด้วย:
Next.js และ TypeScript GearMind เลือกใช้ Next.js เฟรมเวิร์ค JavaScript ที่ได้รับความนิยม เพื่อสร้าง Web Application ที่รวดเร็ว และ ยืดหยุ่น ผสานการทำงานร่วมกับ TypeScript ภาษาโปรแกรมมิ่ง ที่เพิ่มความปลอดภัย และ ความชัดเจนของโค้ด ส่งผลให้ GearMind มีประสิทธิภาพ และ เสถียรภาพสูง
ภาษา Python ใช้ในการพัฒนา logic ที่เกี่ยวข้องกับการจัดการองค์ความรู้ที่ผู้ใช้งานอัพโหลดเข้ามา
Large Language Models หัวใจสำคัญของ GearMind คือการใช้ LLMs เช่น Gemini, GPT, และ Claude ซึ่งผ่านการฝึกฝนกับข้อมูลขนาดใหญ่ เพื่อ "เข้าใจ" ภาษา และ ความหมาย อย่างลึกซึ้ง โดยไม่ต้องสร้าง Model ขึ้นมาเอง GearMind จึงสามารถ ทำ Semantic Search และ วิเคราะห์ข้อมูล ได้อย่างแม่นยำ
API สำหรับ Model Inference ใช้เพื่อเชื่อมต่อกับ API ต่าง ๆ เช่น Google Cloud AI Platform APIs เพื่อเรียกใช้งาน Model สำหรับ NLP และ Semantic Search โดยไม่ต้อง Deploy Model เอง
Vector Databases ใช้สำหรับจัดเก็บ Embeddings ของข้อมูลเอกสารของผู้ช้งานเพื่อให้การค้นหาแบบ Semantic Search รวดเร็ว และ มีประสิทธิภาพ
Cloud Platform GearMind ถูก Deploy บน Cloud Platform คือ GCP เพื่อความยืดหยุ่น และ ความสามารถในการรองรับปริมาณข้อมูล และ ผู้ใช้งานจำนวนมหาศาล
PostgreSQL ใช้เป็นฐานข้อมูลเพื่อใช้ในการจัดเก็บข้อมูลทั่วไปของผู้ใช้งาน เช่น ชื่อ อีเมล รหัสผ่าน ประวัติการสนทนา และอื่นๆ
Redis ใช้เป็นฐานข้อมูลชั่วคราว เพื่อเพิ่มความรวดเร็วในการทำงานทั่วไปของระบบ
PrismaORM ใช้เป็นเครื่องมือที่ช่วยให้การพัฒนาระบบฐานข้อมูลได้ง่าย รวดเร็ว และปลอดภัยมากยิ่งขึ้น
จากนั้น เราจะทำการออกแบบฐานข้อมูล โดยต้องคำนึงถึงข้อมูลหลักที่ต้องการเก็บไว้ ผู้จัดทำโครงการได้ออกแบบอย่างต่อเนื่องจนได้ข้อสรุปว่าต้องเก็บข้อมูลต่อไปนี้:
หลังจากที่ได้ออกแบบฐานข้อมูลแล้ว ต่อมา ทำการออกแบบสถาปัตยกรรมระบบเบื้องต้น (System Architecture) โดยต้องคำนึงประสิทธิภาพในการทำงาน แต่ต้องมีค่าใช้จ่ายที่เหมาะสมด้วย จึงได้ออกมาเป็นโครงสร้างดังต่อไปนี้
จากนั้น เราได้ออกแบบระบบจัดเก็บองค์ความรู้ของผู้ใช้งาน โดยเราได้ทำการศึกษาวิธีการสร้างระบบนี้จากหลายแหล่งและได้พบเจอกับเทคนิค RAG ซึ่งจะประกอบไปด้วยสองขั้นตอนหลักคือ
Indexing คือการจัดระเบียบและเก็บข้อมูลในรูปแบบที่สามารถเข้าถึงได้ง่ายและรวดเร็ว โดยในบริบทของ RAG จะเกี่ยวข้องกับการแปลงข้อมูลจากแหล่งต่าง ๆ เช่น เอกสารหรือฐานข้อมูล ให้เป็นรูปแบบเวกเตอร์ (Vector) เพื่อให้สามารถนำไปใช้ในการค้นหาได้อย่างมีประสิทธิภาพ
Retrieval หมายถึงการดึงข้อมูลหรือเอกสารที่เกี่ยวข้องจากฐานข้อมูลหรือแหล่งข้อมูลภายนอก โดยกระบวนการนี้จะเกิดขึ้นก่อนที่โมเดลภาษาจะสร้างคำตอบ ซึ่งช่วยให้โมเดลสามารถใช้ข้อมูลที่ทันสมัยและเฉพาะเจาะจงในการตอบคำถามหรือสร้างเนื้อหาใหม่
ในส่วนของ Indexing เราได้ออกแบบให้เป็นต่อไปนี้
Load คือการนำเข้าข้อมูลจากแหล่งต่าง ๆ จะถูกโหลดเข้าสู่ระบบ เช่น ฐานข้อมูลหรือเอกสาร.
Split หมายถึงการแบ่งเอกสารหรือข้อมูลที่โหลดเข้ามาออกเป็นส่วนย่อย ๆ เพื่อให้สามารถจัดการได้ง่ายขึ้นและเพิ่มประสิทธิภาพในการค้นหาในขั้นตอนถัดไป โดยทั่วไปจะทำการแบ่งข้อมูลออกเป็น chunks หรือชิ้นส่วนที่มีขนาดเล็กลง เช่น ประโยคหรือย่อหน้า
Embed ข้อมูลจะถูกแปลงเป็นเวกเตอร์ ซึ่งเป็นรูปแบบที่โมเดลสามารถเข้าใจได้ โดยการแบ่งข้อความเป็นส่วน ๆ และทำการ embed เป็นเวกเตอร์.
Store ข้อมูลที่แปลงแล้วจะถูกเก็บไว้ในที่เก็บข้อมูล (Vector Store) เพื่อให้สามารถค้นหาได้ในขั้นตอนถัดไป
และในส่วนของ Retrieval เราได้ออกแบบให้เป็นต่อไปนี้
การสร้างคำถาม เมื่อผู้ใช้ส่งคำถามหรือคำสั่ง ระบบจะสร้างคำถามที่เหมาะสมเพื่อใช้ในการค้นหาข้อมูลที่เกี่ยวข้อง.
การค้นหาข้อมูล ระบบจะใช้คำถามที่สร้างขึ้นเพื่อค้นหาข้อมูลจากฐานข้อมูลหรือเอกสารที่มีอยู่ โดยมักจะใช้เทคนิคการค้นหาที่มีประสิทธิภาพ เช่น การใช้เวกเตอร์เพื่อค้นหาความคล้ายคลึงกัน.
การเลือกข้อมูลที่เกี่ยวข้อง ข้อมูลที่ถูกดึงออกมาจะถูกประเมินและเลือกเฉพาะข้อมูลที่เกี่ยวข้องที่สุดกับคำถามของผู้ใช้.
การรวมข้อมูลกับโมเดล ข้อมูลที่ได้จะถูกนำมารวมกับคำถามหรือคำสั่งที่ผู้ใช้ส่งมา เพื่อใช้เป็นบริบทในการสร้างคำตอบที่มีความแม่นยำและเฉพาะเจาะจงมากขึ้น.
บทเรียนที่ได้รับจาก Sprint นี้คือความรอบคอบในการออกแบบระบบทั้งหมด ตั้งแต่การออกแบบส่วนติดต่อผู้ใช้ของระบบ จนถึงการออกแบบสถาปัตยกรรมระบบเบื้องต้น โดยต้องคำนึงถึงประสบการณ์ใช้งานที่ดี ระบบที่มีเสถียรภาพ แต่ต้องอยู่ในกรอบของค่าใช้จ่ายที่จะเกิดขึ้นอย่างเหมาะสม ทั้งหมดนี้ ทำให้เราได้ข้อมูลต่อไปนี้
เอกสารรวบรวม User Stories และ User Requirements
แบบร่าง Entity Relationship Diagram (ERD)
แผนผังโครงสร้างระบบ (System Architecture Diagram)
เอกสารสรุปขอบเขตของโครงการ (Project Scope Document)
เราพัฒนาส่วนติดต่อผู้ใช้ด้วย Next.js โดยใช้ app router ถือเป็น Router รุ่นใหม่ล่าสุดของ Next.js ถูกพัฒนาขึ้นเพื่อปลดล็อคศักยภาพสูงสุดของ React โดยเฉพาะอย่างยิ่งการใช้ Server Components และ Streaming ซึ่งเป็นเทคโนโลยีที่ช่วยเพิ่มประสิทธิภาพและความเร็วในการโหลดหน้าเว็บไซต์ ระหว่างการพัฒนา เราได้ออกแบบส่วนติดต่อผู้ใช้ควบคู่ไปกับการพัฒนา ทำให้ได้หน้าตาออกมาดังต่อไปนี้
1. หน้าลงชื่อเข้าใช้
เมื่อผู้ใช้งานเริ่มต้นเข้าสู่ระบบ ผู้ใช้จะต้องทำการลงชื่อเข้าใช้ด้วยการกรอกอีเมลและรหัสผ่านที่เคยลงทะเบียนไว้ในระบบ โดยในขั้นตอนนี้ ระบบจะทำการตรวจสอบความถูกต้องของข้อมูลที่ผู้ใช้กรอก หากข้อมูลถูกต้อง ผู้ใช้จะสามารถเข้าสู่ระบบและใช้งานฟังก์ชันต่าง ๆ ได้ทันที อย่างไรก็ตาม หากผู้ใช้ยังไม่เคยทำการลงทะเบียนมาก่อน ระบบจะมีตัวเลือกให้ผู้ใช้สามารถลงทะเบียนได้โดยการคลิกที่ปุ่ม "ลงทะเบียน" ที่ปรากฏอยู่ในหน้านี้ เพื่อนำผู้ใช้ไปสู่ขั้นตอนการสร้างบัญชีใหม่ ทั้งนี้เพื่อให้กระบวนการเข้าถึงระบบมีความง่ายและสะดวกมากยิ่งขึ้น
2. หน้าลงทะเบียน
ในหน้าลงทะเบียน ผู้ใช้งานจะต้องทำการกรอกข้อมูลส่วนตัวให้ครบถ้วน เพื่อให้สามารถสร้างบัญชีผู้ใช้งานได้สำเร็จ รายละเอียดที่ผู้ใช้จะต้องกรอกประกอบด้วย ชื่อ อีเมล และการตั้งรหัสผ่านใหม่ โดยการตั้งรหัสผ่านนั้นจะต้องมีความยาวอย่างน้อย 8 ตัวอักษรขึ้นไป เพื่อความปลอดภัยของบัญชี ขณะเดียวกัน ระบบจะทำการตรวจสอบความถูกต้องของอีเมลที่ผู้ใช้กรอกอย่างอัตโนมัติ โดยจะเช็คว่ามีอีเมลนี้ถูกใช้ลงทะเบียนในระบบแล้วหรือไม่ หากพบว่าอีเมลนี้มีการใช้งานแล้ว ผู้ใช้จะไม่สามารถลงทะเบียนซ้ำด้วยอีเมลนี้ได้ และจะต้องเลือกใช้อีเมลอื่นที่ยังไม่เคยลงทะเบียนมาก่อนเพื่อดำเนินการต่อ ทั้งนี้เพื่อป้องกันความซ้ำซ้อนและรับประกันความถูกต้องของข้อมูลในระบบ
3. หน้าลืมรหัสผ่าน
ในกรณีที่ผู้ใช้งานไม่สามารถจำรหัสผ่านของตนเองได้ สามารถใช้หน้าลืมรหัสผ่านนี้เพื่อทำการตั้งรหัสผ่านใหม่ กระบวนการเริ่มต้นจากการที่ผู้ใช้จะต้องระบุอีเมลที่เคยใช้ในการลงทะเบียนบัญชีของตนเอง หลังจากที่กรอกอีเมลเรียบร้อยแล้ว ระบบจะทำการตรวจสอบความถูกต้องของอีเมลนั้น หากอีเมลที่กรอกตรงกับอีเมลในระบบ ระบบจะส่งอีเมลไปยังที่อยู่อีเมลดังกล่าว โดยในอีเมลจะมีลิงก์สำหรับรีเซ็ตรหัสผ่านที่หมดอายุภายในระยะเวลาที่กำหนด เมื่อผู้ใช้คลิกลิงก์นี้ ผู้ใช้จะถูกนำไปยังหน้าที่สามารถตั้งรหัสผ่านใหม่ได้ หลังจากที่ผู้ใช้กำหนดรหัสผ่านใหม่เรียบร้อยแล้ว จะสามารถเข้าสู่ระบบได้อีกครั้งโดยใช้รหัสผ่านที่เพิ่งตั้งใหม่เพื่อความปลอดภัยและความสะดวกในการเข้าถึงบัญชี
4. หน้าหลัก
เมื่อผู้ใช้งานทำการลงชื่อเข้าใช้หรือลงทะเบียนเรียบร้อยแล้ว ผู้ใช้จะถูกนำมายังหน้าหลัก ซึ่งออกแบบให้เป็นหน้าที่ง่ายต่อการใช้งานและเริ่มต้นการสนทนาได้อย่างสะดวก ภายในหน้าหลักนี้ จะมีการแสดงข้อความทักทายผู้ใช้ตามชื่อที่ได้ลงทะเบียนไว้ พร้อมกับช่องสำหรับการป้อนข้อมูลหรือคำถามที่ผู้ใช้อยากทราบ ผู้ใช้สามารถพิมพ์คำถามหรือข้อมูลที่ต้องการค้นหาในช่องดังกล่าว เพื่อให้ระบบตอบกลับข้อมูลที่เกี่ยวข้องหรือเริ่มต้นการสนทนาโดยทันที ฟังก์ชันนี้ถูกออกแบบมาเพื่อให้ผู้ใช้สามารถเข้าถึงข้อมูลที่ต้องการได้อย่างรวดเร็วและมีประสิทธิภาพในบรรยากาศที่เป็นมิตรและใช้งานง่าย
5. แถบด้านข้าง
แถบด้านข้าง (Sidebar) เป็นองค์ประกอบสำคัญที่ช่วยให้ผู้ใช้งานสามารถเข้าถึงฟีเจอร์และฟังก์ชันต่าง ๆ ภายในระบบได้อย่างรวดเร็วและง่ายดาย โดยจะอยู่ทางด้านซ้ายของหน้าจอ และมีเมนูต่าง ๆ ที่ออกแบบมาเพื่อช่วยในการนำทางไปยังส่วนต่าง ๆ ของแอปพลิเคชันหรือเว็บไซต์ได้สะดวก ในแถบด้านข้างนี้ ผู้ใช้งานสามารถทำสิ่งต่าง ๆ ได้ เช่น การสร้างแชทใหม่ การดูประวัติการสนทนาในช่วงเวลาล่าสุดและเมื่อวาน อีกทั้งยังมีตัวเลือกสำหรับจัดการข้อมูล จัดการเหรียญ ปรับแต่งการตั้งค่า และทำการออกจากระบบ
6. หน้าจัดการองค์ความรู้
ในหน้าจัดการองค์ความรู้นี้ ผู้ใช้งานสามารถจัดเก็บและจัดการเอกสารความรู้ต่าง ๆ ได้อย่างมีประสิทธิภาพ โดยหน้าจอจะแสดงรายการเอกสารที่ถูกอัปโหลดขึ้นไปในระบบเรียงตามลำดับเวลา มีฟังก์ชันการค้นหาอยู่ด้านบนที่ช่วยให้ผู้ใช้สามารถค้นหาเอกสารตามชื่อหรือคีย์เวิร์ดได้อย่างรวดเร็ว
องค์ประกอบของหน้าจอนี้ประกอบไปด้วย:
รายการเอกสาร: แต่ละเอกสารที่แสดงจะถูกแสดงในรูปแบบบัตร (Card) ซึ่งจะแสดงชื่อไฟล์ ประเภทไฟล์ (เช่น PDF) และวันที่อัปโหลด ผู้ใช้สามารถเลือกเอกสารที่ต้องการดูหรือติดตามได้
ปุ่มอัปโหลด: ปุ่ม "อัปโหลดซะ!" ที่อยู่ด้านบนขวาจะใช้สำหรับการเพิ่มเอกสารใหม่เข้าระบบ โดยผู้ใช้งานสามารถคลิกปุ่มนี้เพื่อทำการอัปโหลดไฟล์ใหม่
ฟังก์ชันการลบเอกสาร: นอกจากการอัปโหลดและดูเอกสารแล้ว ผู้ใช้ยังสามารถทำการลบเอกสารที่ไม่ต้องการได้ โดยการคลิกขวาที่เอกสาร จากนั้นเลือกตัวเลือกการลบ ระบบจะทำการลบเอกสารนั้นออกจากฐานข้อมูล
7. หน้าการตั้งค่า
หน้าการตั้งค่านี้เป็นส่วนสำคัญที่ช่วยให้ผู้ใช้สามารถปรับแต่งและจัดการบัญชีของตนเองได้ โดยมีองค์ประกอบดังนี้:
แสดงรูปโปรไฟล์ ชื่อ และอีเมล ของผู้ใช้
มีส่วนที่เรียกว่า "โหมดเครียด" ซึ่งมีตัวเลือกสองโหมด และมีสวิตช์สำหรับเปิด/ปิดโหมดนี้
มีปุ่ม "ลบแชททั้งหมด" ที่จะลบแชททั้งหมดที่คุณเคยสนทนาไว้อย่างถาวร
มีปุ่ม "ลบบัญชี" ที่จะลบบัญชีและข้อมูลทั้งหมดจากระบบอย่างถาวร
มีปุ่ม "ออกจากระบบ" ที่อยู่ด้านล่างสุดของหน้า
หน้าการตั้งค่านี้ให้อำนาจผู้ใช้ในการควบคุมประสบการณ์การใช้งาน ตั้งแต่การปรับเปลี่ยนโหมดการทำงานของ AI ไปจนถึงการจัดการข้อมูลส่วนตัวและความปลอดภัยของบัญชี การออกแบบใช้โทนสีเข้มเพื่อความสบายตา และใช้สีส้มสำหรับปุ่มที่ต้องการเน้นความสำคัญ
ในส่วนระบบ Backend นั้น จะถูกแยกออกเป็นหลายองค์ประกอบ เช่น
Auth API จัดการการยืนยันตัวตน
Chat API บริการสำหรับระบบแชท
IoT Devices API จัดการข้อมูลอุปกรณ์ IoT
Market API บริการข้อมูลตลาด
เราได้ใช้หลักการออกแบบ Layered architecture เพื่อให้โค้ดจัดการง่ายขึ้น โดยแบ่งออกเป็น 3 ส่วนหลักคือ
Data Access Layer ใช้จัดการการเข้าถึงและจัดเก็บข้อมูล
Use Cases ตรรกะทางธุรกิจหลักของแอปพลิเคชัน
Presentation Layer มีหน้าที่นำข้อมูลที่ได้จาก Use Cases หรือจากชั้นอื่น ๆ มานำเสนอในรูปแบบที่เหมาะสม
ทั้งหมดนี้จะทำให้เราได้ระบบแชทบอทที่ทำงานได้อย่างมีประสิทธิภาพและรวดเร็ว มีความพร้อมใช้งานสูง เราสามารถสรุปหลักการทำงานของระบบได้ดังแผนภาพต่อไปนี้
หลังจากทดสอบการใช้งานเราพบว่าประสิทธิภาพในการโต้ตอบของโมเดลไม่เป็นตามไปที่คาดหวัง โดยเฉพาะเหตุการณ์ที่ไม่ยอมเรียกใช้เครื่องมือค้นหาข้อมูล หรือใช้ keyword ในการค้นหาที่ไม่เหมาะสม ปัญหาดังกล่าวเกิดจากการเขียน system instruction ที่ไม่ชัดเจน
จากเดิม:
เราได้ลองปรับปรุงหลายครั้งอย่างต่อเนื่อง จนสามารถทำให้โมเดลเข้าใจบริบทของตนเอง และสามารถทำงานได้ดีมากขึ้น โดย system instruction ปัจจุบันคือ:
เริ่มต้นโดยการพัฒนาซอฟแวร์สำหรับสมองกลฝังตัว เราเลือกใช้เป็น ESP32 เนื่องจากรองรับการขยายที่ยืดหยุ่น โดยโค้ดเป็นดังต่อไปนี้