- ในช่วงต้นปี 2023 LinkedIn เริ่มเปิดตัวพอร์ตโฟลิโอผลิตภัณฑ์ที่ใช้ความสามารถของ GenAI
- ผลิตภัณฑ์ GenAI ระยะแรกเริ่มจากรูปแบบง่าย ๆ แบบ "ป้อนพรอมต์ แล้วได้สตริงผลลัพธ์" ก่อนจะพัฒนาไปเป็นประสบการณ์เอเจนต์เชิงสนทนาที่รองรับ contextual memory
- แนวทางนี้ถูกนำมาใช้ผ่านการสร้างเทคโนโลยีสแตกสำหรับแอปพลิเคชัน GenAI เพื่อรักษาสมดุลระหว่าง time-to-market และ leverage ในระยะยาว
Genesis and Evolution
- จำเป็นต้องสร้างเฟรมเวิร์กที่ให้กลไกมาตรฐานสำหรับงานที่ใช้ร่วมกัน
- เนื่องจากสแตกออนไลน์เซิร์ฟวิ่งส่วนใหญ่ของ LinkedIn เขียนด้วย Java ในช่วงแรกจึงเริ่มจาก Java midtier แบบใช้ร่วมกัน
- เมื่อ use case เพิ่มขึ้น midtier นี้กลายเป็นคอขวดทั้งด้านการพัฒนาและการปฏิบัติการ จึงแยกออกเป็นบริการ Java midtier หลายตัวตามแต่ละ use case
- วิศวกร AI นิยมใช้ Python สำหรับเวิร์กโฟลว์ออฟไลน์ที่อิง LLM, prompt engineering และการประเมินผล
- ในระยะสั้นตัดสินใจคงสแตกออนไลน์และออฟไลน์ที่แยกส่วนไว้ แต่ในระยะยาวเลือกใช้ Python กับการออนไลน์เซิร์ฟวิ่งด้วย
- สร้างเฟรมเวิร์ก Python สำหรับออนไลน์เซิร์ฟวิ่งบนพื้นฐานของโปรเจ็กต์โอเพนซอร์ส LangChain
- เริ่มโครงการเพื่อเปิดใช้การรองรับ Python สำหรับ dependency ด้านโครงสร้างพื้นฐานหลัก โดยเน้น Python เป็นหลัก
- ปัจจุบันเฟรมเวิร์กแอปพลิเคชัน GenAI เป็น thin wrapper ที่สร้างอยู่บน LangChain
การจัดการพรอมต์
- prompt engineering เป็นกลไกหลักในการ "เขียนโปรแกรม" ให้กับ LLM
- ในช่วงแรกใช้การแทรกสตริงด้วยตนเองในโค้ด แต่มีแนวโน้มเกิดข้อผิดพลาดและไม่สามารถขยายได้
- นำคอมโพเนนต์ Prompt Source of Truth มาใช้ และทำให้การใช้ภาษาเทมเพลต Jinja เป็นมาตรฐาน
- เขียนไลบรารี prompt resolution ใหม่จาก Java เป็น Python
- เมื่อมี UI แบบสนทนาเกิดขึ้น จึงต้องมีโครงสร้างเพิ่มเติมสำหรับบทบาทของมนุษย์และ AI ในบทสนทนา
- สุดท้ายแนวทางก็ลงตัวที่ OpenAI Chat Completions API
การทำงานอัตโนมัติผ่านสกิล
- ขยาย skill abstraction ไปสู่แอปพลิเคชัน GenAI และใช้เป็นกลไกสำหรับทำงานอัตโนมัติ
- ระยะแรกสร้างด้วยโค้ดแบบกำหนดเองที่ห่อ API ภายในและภายนอกของ LinkedIn โดยใช้ JSON schema ที่เป็นมิตรกับ LLM
- พบปัญหาอย่างการทำสกิลซ้ำซ้อน การเปลี่ยนแปลงของ downstream skill และการที่นักพัฒนาต้องระบุสกิลด้วยตนเอง
- จึงนำแนวคิด Skill Inversion มาใช้ เพื่อให้ฝั่ง downstream เป็นผู้กำหนดสกิลและเปิดให้แอปที่เรียกใช้นำไปใช้
- มีการทำให้กระบวนการเข้าถึง พัฒนา และปฏิบัติการของสกิลง่ายขึ้นผ่านบริการ skill registry แบบรวมศูนย์, build plugin และเครื่องมือ LangChain แบบไดนามิก
- ขณะนี้กำลังพัฒนาสแตกต่อไปโดยค่อย ๆ สร้าง skill abstraction สำหรับทุก API เพื่อให้ LLM โต้ตอบได้อย่างราบรื่น
การรับรู้บริบทและการปรับให้เหมาะกับแต่ละบุคคล
- เนื่องจาก LLM เป็น stateless โดยพื้นฐาน จึงทำให้การรับรู้บริบทและการปรับให้เหมาะกับแต่ละบุคคลทำได้ยาก
- ในช่วงแรกใช้ Couchbase หรือ Espresso DB เป็นสตอเรจ และแต่ละทีมรับผิดชอบการตั้งค่า DB รวมถึงการเขียน/อ่านข้อมูลเอง
- เนื่องจาก context window ของ LLM มีข้อจำกัด จึงต้องมีความสามารถด้าน semantic search โดยใช้ embedding และการสรุป
- สร้างโครงสร้างพื้นฐานด้าน conversational memory โดยใช้ประโยชน์จากสแตก messaging ของ LinkedIn
- นำแนวคิด Experiential Memory ซึ่งต่อยอดจากประสบการณ์ปฏิสัมพันธ์ระหว่างผู้ใช้กับแอปพลิเคชันมาใช้
- ผสานสิ่งนี้เข้ากับเฟรมเวิร์กแอปพลิเคชัน GenAI เพื่อให้นักพัฒนาใช้งานได้อย่างราบรื่น
การอนุมานโมเดลและการปรับจูนละเอียด
- ในช่วงแรกใช้เฉพาะ LLM ที่ให้บริการผ่าน Azure OpenAI Service
- LLM อย่าง Llama ที่ผ่านการปรับจูนละเอียดสำหรับงานเฉพาะของ LinkedIn แสดงคุณภาพที่ใกล้เคียงหรือดีกว่าโมเดลเชิงพาณิชย์
- กำลังพยายามทำให้ประสบการณ์ของนักพัฒนาแอปโปร่งใสเหมือนกันทั้งสำหรับโมเดลภายนอกและภายใน
- เลเยอร์อนุมานเปิดเผย OpenAI Chat Completions API ให้กับ LLM ทั้งหมด
- สามารถสลับระหว่างโมเดล on-premises และโมเดลภายนอกได้อย่างง่ายดายผ่าน configuration hook ของเฟรมเวิร์กแอปพลิเคชัน
การย้ายระบบ
- สิ่งสำคัญคือการย้ายจากโซลูชันแบบปรับแต่งเฉพาะเดิมไปสู่โซลูชันมาตรฐานอย่างรวดเร็ว
- ทีมขนาดเล็กแบบ lean ที่ประกอบด้วยวิศวกรซึ่งมีความรู้เชิงลึกทั้งในสแตก Java และสแตกใหม่เป็นผู้ดูแลการย้ายระบบ
- ใช้แนวทางแบบค่อยเป็นค่อยไป โดยย้ายแต่ละคอมโพเนนต์ทีละตัว
- เริ่มจากแอปที่เรียบง่ายและขนาดเล็ก ก่อนขยับไปสู่แอปที่ซับซ้อนและขนาดใหญ่
- จับคู่วิศวกรอาวุโสกับนักพัฒนา Python หน้าใหม่ เพื่อให้เรียนรู้ Python จากงานจริง
ความคิดส่งท้าย
- เทคโนโลยีสแตกใหม่สำหรับแอปพลิเคชัน GenAI นี้รองรับการพัฒนาแบบ AI-first และวางรากฐานที่แข็งแรงสำหรับการสร้างแอป GenAI อย่างมีประสิทธิภาพและมีความรับผิดชอบ
- จะมีบทบาทสำคัญต่อการบรรลุวิสัยทัศน์ในการมอบโอกาสทางเศรษฐกิจให้กับทุกคนในกำลังแรงงานทั่วโลก
- ยังมีความท้าทายอีกมากที่ต้องแก้ไข
- เมื่อแนวหน้าของประสบการณ์ผลิตภัณฑ์กำลังขยับจาก conversational assistant ไปสู่ AI agent ความต้องการใหม่ทั้งด้านความสามารถและการปฏิบัติการก็เพิ่มขึ้นอย่างรวดเร็ว และจะมีการเปิดเผยรายละเอียดเพิ่มเติมในภายหลัง
ยังไม่มีความคิดเห็น