หากอยากสร้างแชตบอตสไตล์ ChatGPT แบบโอเพนซอร์สของคุณเอง
(hacks.mozilla.org)- ทีมเล็ก ๆ ในกลุ่มนวัตกรรมของ Mozilla สร้าง ต้นแบบแชตบอตสำหรับใช้ภายใน ในแฮกกาธอน 1 สัปดาห์ ทดลองโครงแบบที่รัน LLM โอเพนซอร์สภายในคลาวด์ของ Mozilla โดยไม่ใช้ API จากบุคคลที่สาม
- เมื่อตัด AI SaaS ภายนอกออกไป จึงต้องตั้งค่าเซิร์ฟเวอร์เองโดยตรงใน บัญชี GCP ของ Mozilla และเปลี่ยนจาก Hugging Face text-generation-inference ไปใช้ llama.cpp ที่รันได้เร็วกว่า
- การเลือกโมเดลถูกจำกัดด้วย ไลเซนส์และความเข้ากันได้ของรันไทม์ ก่อนคุณภาพ และหลังจากประเมินด้วยตนเองจากตัวเลือกตระกูล LLaMA ที่ใช้งานเชิงพาณิชย์ได้ ก็เลือก LLaMA 2
- การเชื่อมโยงความรู้ภายในทำด้วย embedding และ vector search โดยผสาน all-mpnet-base-v2, SentenceTransformers, LangChain และ FAISS เพื่อใช้บางส่วนของวิกิบริษัทในการตอบคำถาม
- แม้ต้นแบบจะเสร็จสมบูรณ์ แต่การสร้างแชตบอตโอเพนซอร์สที่เชื่อถือได้ยังมีหลายด้านที่ต้องตัดสินใจเอง ตั้งแต่โฮสติ้ง การประเมินโมเดล อคติ พรอมป์ ไปจนถึง UI
แชตบอตภายในที่ Mozilla พยายามสร้าง
- Mozilla ยึดหลัก trustworthy AI ว่าระบบ AI ต้อง โปร่งใส ต่อข้อมูลและการตัดสินใจที่ใช้ เคารพความเป็นส่วนตัว อำนาจการตัดสินใจของผู้ใช้ และความปลอดภัย รวมถึงลดอคติและเพิ่มความเป็นธรรม
- ช่องทางหลักที่ผู้ใช้จำนวนมากได้สัมผัส AI รุ่นใหม่คือ แชตบอต AI เชิงสร้างสรรค์ อย่าง ChatGPT และ Bard และบริการที่ครองตลาดมักดำเนินการโดยบริษัทเทคโนโลยีทรงอิทธิพลและพึ่งพาเทคโนโลยีแบบปิด
- Mozilla มองว่าโอเพนซอร์สเป็นวิธีเพิ่มพลังให้ผู้ใช้ เพิ่มความโปร่งใส และทำให้เทคโนโลยีไม่พัฒนาไปตามโลกทัศน์และแรงจูงใจทางการเงินของบริษัทไม่กี่แห่งเท่านั้น
- เป้าหมายโดยตรงของแฮกกาธอนคือการสร้าง ต้นแบบแชตบอตสำหรับใช้ภายใน ที่ตรงตามเงื่อนไขต่อไปนี้
- รันทั้งหมดบนโครงสร้างพื้นฐานคลาวด์ของ Mozilla และไม่พึ่งพา API หรือบริการจากบุคคลที่สาม
- ประกอบด้วย LLM และเครื่องมือโอเพนซอร์สฟรี
- สะท้อน Mozilla Manifesto และหลัก trustworthy AI
- รวมความรู้ภายในบางส่วนของ Mozilla เพื่อให้ตอบคำถามพนักงานได้
โฮสติ้ง: เซิร์ฟเวอร์ GCP ของตัวเองแทน SaaS ภายนอก
- มีบริการโฮสต์แอปแมชชีนเลิร์นนิงอยู่มาก แต่ MLOps เป็นเรื่องยาก และแอป AI ที่ตั้งค่าไม่ดีอาจช้า แพง หรือคุณภาพต่ำได้
- เป้าหมายที่ทีมระบุไว้อย่างชัดเจนคือ ความปลอดภัยและความเป็นส่วนตัว ที่บุคคลภายนอกไม่สามารถฟังสิ่งที่ใช้งาน เก็บข้อมูลผู้ใช้ หรือสอดส่องสถานะการใช้งานได้
- ดังนั้นจึงไม่ใช้ AI SaaS hosting จากบุคคลที่สาม แต่ตั้งค่าเซิร์ฟเวอร์เสมือนเองใน บัญชี Google Cloud Platform ที่ Mozilla มีอยู่แล้ว
- ทางเลือกนี้ทำให้ Mozilla ควบคุมระบบและรักษาให้เป็นส่วนตัวได้ แลกกับการต้องรับภาระ MLOps เอง
รันไทม์: เปลี่ยนจาก Hugging Face ไปใช้ llama.cpp
- แอป LLM ต้องมี runtime engine สำหรับรันโมเดล และด้วยข้อจำกัดด้านเวลา ทีมจึงมุ่งไปที่ llama.cpp และ ecosystem ของ Hugging Face
- Hugging Face มีไลบรารีโมเดล เอกสาร ทิวทอเรียล และ hosted inference API
- ทีมลองใช้ text-generation-inference แบบโอเพนซอร์ส แทน hosted API
- text-generation-inference รองรับหลายโมเดลและหลายสถาปัตยกรรมโมเดล และ deploy ด้วย Docker ได้ แต่ระหว่างรันเซิร์ฟเวอร์มี ปัญหาการตั้งค่าสภาพแวดล้อม ค่อนข้างมาก
- เนื่องจากเป็นเครื่องมือเร่งความเร็วด้วย GPU จึงต้องให้ OS, ฮาร์ดแวร์ และไดรเวอร์ของเซิร์ฟเวอร์เข้ากันได้
- ต้องใช้ NVIDIA CUDA toolkit
- ใช้เวลาส่วนใหญ่ของหนึ่งวันไปกับการตั้งค่า และหลังจากรันได้แล้ว output ก็ช้ากว่าที่คาดและผลลัพธ์ไม่ดี
- ด้วยข้อจำกัดด้านเวลา จึงเปลี่ยนทิศทางไปใช้ llama.cpp ที่เริ่มโดย Georgi Gerganov
- llama.cpp ช่วยให้รัน LLM บางตระกูลบนฮาร์ดแวร์ระดับผู้บริโภคได้ง่าย
- ใช้ CPU แทน GPU ระดับสูงได้ และรันโมเดลโอเพนซอร์สสมัยใหม่ขนาดค่อนข้างเล็กบน CPU อย่าง Apple Silicon เช่น M1 และ M2 ได้ดีเป็นพิเศษ
- llama-cpp-python มี implementation ของ OpenAI API specification ทำให้นำ LLM ของตัวเองมาเสียบแทน ChatGPT ได้ง่าย
- สุดท้ายทีมรัน llama.cpp ได้อย่างรวดเร็วบน เซิร์ฟเวอร์เสมือน AMD multicore CPU แทนการจัดการกับเวอร์ชัน CUDA และ GPU สำหรับโฮสติ้งราคาแพง
การเลือกโมเดล: ข้อจำกัดด้านไลเซนส์และสถาปัตยกรรม
- เมื่อเลือก llama.cpp โมเดลที่ใช้ได้ก็แคบลงเหลือ โมเดลที่อิงสถาปัตยกรรม LLaMA
- Facebook เปิดตัว LLaMA ช่วงปลายปี 2022 และ LLaMA สามารถแยกเป็นข้อมูลโมเดลกับสถาปัตยกรรมได้
- สถาปัตยกรรม LLaMA ถูกเปิดเป็นโอเพนซอร์ส แต่ข้อมูลโมเดลหรือ weights ไม่ใช่โอเพนซอร์ส
- การใช้ weights ต้องยื่นขออนุญาตและจำกัดไว้สำหรับวัตถุประสงค์ที่ไม่ใช่เชิงพาณิชย์
- LLaMA กระตุ้นให้เกิดนวัตกรรมโมเดลจำนวนมาก เช่น Alpaca ของ Stanford และ Vicuna ของ LMSYS
- แต่โมเดลเหล่านี้พัฒนาจาก weights ของ Facebook จึงสืบทอดข้อจำกัดทางกฎหมายของ weights เดิม
- ไม่สามารถใช้เพื่อวัตถุประสงค์เชิงพาณิชย์ได้ จึงถูกตัดออกจากตัวเลือกของทีม Mozilla
- ตัวสถาปัตยกรรม LLaMA เองเป็นโค้ดโอเพนซอร์ส ดังนั้นกลุ่มอื่น ๆ จึงสามารถเทรนโมเดลตั้งแต่ต้นและเผยแพร่ภายใต้ไลเซนส์ MIT, Apache 2.0 หรือ Creative Commons ได้
- โมเดลที่อิงสถาปัตยกรรมอื่น เช่น MPT, Falcon และ Open Assistant ไม่ได้รันบน llama.cpp ในเวลานั้น จึงหลุดจากตัวเลือก
การประเมินคุณภาพ อคติ และความปลอดภัยของโมเดล
- การเลือกโมเดลส่งผลโดยตรงต่อ ความน่าเชื่อถือ ไม่ใช่แค่ไลเซนส์และความเข้ากันได้
- LLM ถูกเทรนด้วยข้อมูลมหาศาล และถูกปรับละเอียดด้วย input เพิ่มเติมเพื่อสร้างพฤติกรรมและ output บางแบบ
- การเลือกข้อมูลนี้เองเป็นการ curate และมี อคติ หลากหลายรูปแบบ
- โมเดลแสดงลักษณะแตกต่างกันตามแหล่งข้อมูลที่ใช้เทรน
- อาจสร้างคำตอบไร้สาระแบบ hallucination ได้
- อาจนำไปสู่เนื้อหาเป็นพิษ ข้อมูลเท็จ หรือการแชร์ข้อมูลที่อันตรายหรือเป็นภัยได้
- อาจแสดงอคติต่อแนวคิดหรือกลุ่มคน
- การที่สื่อการเรียนรู้ออนไลน์ส่วนใหญ่เป็นภาษาอังกฤษ ส่งผลต่อความสามารถในการใช้เครื่องมือและโลกทัศน์ที่ได้รับ
- มีแหล่งข้อมูลสำหรับประเมินประสิทธิภาพและคุณภาพ เช่น Open LLM leaderboard ของ Hugging Face แต่การเปรียบเทียบโมเดลตามแหล่งที่มาและอคติยังคงทำได้ยาก
- ทีม Mozilla จำกัดขอบเขตเหลือโมเดลเปิดที่ใช้งานเชิงพาณิชย์ได้และทำงานบนสถาปัตยกรรม LLaMA แล้วทำ การประเมินด้วยตนเอง โดยถามคำถามหลายข้อเพื่อดูความต้านทานต่อเนื้อหาเป็นพิษ อคติ ข้อมูลเท็จ และเนื้อหาอันตราย
- ตัวเลือกสุดท้ายคือ LLaMA 2 ของ Facebook แต่ระเบียบวิธีประเมินภายในเวลาจำกัดอาจมีข้อบกพร่อง และยังไม่สบายใจกับเงื่อนไขไลเซนส์ทั้งหมด จึงยากจะถือว่าเป็นคำแนะนำ
การรวมความรู้ภายใน: embedding และ vector search
- ทีม Mozilla ต้องการเชื่อมข้อมูลภายในของ Mozilla บางส่วนที่พนักงานเข้าถึงได้แต่ LLM ทั่วไปไม่รู้ เข้ากับแชตบอต
- วิธีที่เลือกคือ embedding และ vector search เพื่อให้ใช้เอกสารภายนอกในการสร้างคำตอบได้
- ขั้นตอนพื้นฐานมีดังนี้
- นำข้อมูลที่จะใช้จากที่เก็บเดิมมาแปลงด้วย embedding model
- จัดทำดัชนี embedding ลงใน vector database ที่แชตบอตเข้าถึงได้
- เมื่อผู้ใช้ถามคำถาม แชตบอตค้นหาเนื้อหาที่เกี่ยวข้องจาก vector database
- นำเนื้อหาที่เกี่ยวข้องที่ค้นเจอใส่ใน context window ของโมเดลพื้นฐานเพื่อใช้สร้างคำตอบ
- ทีมไม่ใช้บริการ embedding หรือ vector database จากบุคคลที่สาม เพื่อคงการควบคุมข้อมูลไว้
- โซลูชันที่เขียนเองด้วย Python ใช้เครื่องมือต่อไปนี้
- โมเดล embedding all-mpnet-base-v2
- ไลบรารี embedding SentenceTransformers
- LangChain
- vector database FAISS
- แม้ขอบเขตจะจำกัดเพราะใส่เอกสารจากวิกิภายในบริษัทเพียงไม่กี่ฉบับ แต่ก็ทำงานได้ในฐานะ proof of concept
Prompt engineering และ context window
- LLM เริ่มทำงานในสภาพที่ไม่จดจำบทสนทนาก่อนหน้าหรือผู้ใช้ทุกครั้ง ดังนั้นถ้าต้องการให้แชตบอตสนทนาต่อเนื่อง นักพัฒนาต้องทำ memory management
- system prompt คือ คำสั่งเริ่มต้น ที่ระบุความสามารถและพฤติกรรมของแชตบอตเป็นข้อความธรรมดา
- ทีม Mozilla ออกแบบ system prompt ให้แชตบอตปฏิบัติตาม Mozilla Manifesto พฤติกรรมที่ให้ความเคารพ และนโยบายไม่เลือกปฏิบัติ
- เมื่อถามเรื่องทฤษฎีสมคบคิดว่าการลงจอดบนดวงจันทร์ของ Apollo เป็นเรื่องจัดฉาก หากมีคำสั่งให้ปฏิเสธคำตอบที่เป็นข้อมูลเท็จ ก็จะตอบว่าการลงจอดบนดวงจันทร์ไม่ได้ถูกจัดฉาก
- เมื่อลบข้อความห้ามข้อมูลเท็จออกจากโมเดลเดียวกัน ก็ให้รายการข้ออ้างทั่วไปของกลุ่มที่ปฏิเสธ Apollo
- system prompt รวมถึงชื่อ Mozilla Assistant การปฏิบัติตามหลัก Mozilla Manifesto ความเคารพ ความเป็นมืออาชีพ ความครอบคลุม การปฏิเสธพฤติกรรมที่เป็นภัย ผิดศีลธรรม ผิดจริยธรรม หรืออาจผิดกฎหมาย และการห้ามข้อมูลเท็จรวมถึงภาษาที่เลือกปฏิบัติ
- LLM ทุกตัวมี context window ซึ่งเป็นความยาวสูงสุดที่จำได้ในการสนทนาปัจจุบัน
- ส่วนใหญ่ถูกกำหนดตอนเทรนและเปลี่ยนภายหลังไม่ได้
- ยิ่ง context window ใหญ่ ก็ยิ่งอ้างอิงคำถามและคำตอบก่อนหน้าได้นานขึ้น
- และยังใส่ชิ้นเนื้อหาขนาดใหญ่ขึ้นที่ดึงมาจาก vector search ได้ด้วย
- context window ของ LLaMA 2 คือ 4096 tokens หรือประมาณ 3000 คำ
- ทีมลดความยาวของ system prompt ซ้ำ ๆ เพื่อประหยัด context window และมีแผนจะพิจารณาโมเดลที่รองรับ context window ใหญ่ขึ้นในอนาคต
การ orchestrate และการเลือก UI
- แชตบอตทั้งระบบต้องมี orchestration เพื่อประสานหลายชั้น เช่น agent prompt injection, การจัดการ context window, embedding ของเนื้อหาภายใน, การเรียก LLM และการประมวลผล response
- LangChain ซึ่งเป็นเครื่องมือหลักในวงการ LLM ทรงพลังและยืดหยุ่น แต่ก็มีความซับซ้อนสูง
- ทีม Mozilla ใช้ LangChain ให้น้อยที่สุด เฉพาะ embedding และ vector search
- เนื่องจากเป็นโปรเจกต์สั้นและมีข้อจำกัดสูง ส่วนใหญ่จึงจัดการด้วยโค้ด Python ที่เขียนเอง
- หากมีเวลามากกว่านี้ ก็น่าจะไม่ทำทุกอย่างแบบ manual
- UI ต้องมีฟังก์ชันมากกว่าที่ดูเหมือนง่าย เช่น การแสดงบทสนทนา การติดตามเธรดก่อนหน้า และการจัดการ backend ที่ส่ง output ด้วยความเร็วไม่สม่ำเสมอ
- ในบรรดา UI แชตบอตโอเพนซอร์ส chatbot-ui implement OpenAI API ทำให้ใช้ได้เหมือนตัวแทน UI ของ ChatGPT และนำมาใช้เป็น frontend ของระบบ LLM ของตัวเองได้ง่าย
- โดยปกติทีม Mozilla น่าจะใช้โปรเจกต์อย่าง chatbot-ui แต่เนื่องจากมีโค้ดแชตบอตสำหรับทดลองภายในชื่อ Companion และผู้เขียนอยู่ร่วมด้วย จึงใช้สิ่งนี้เป็น UI
- Companion ช่วยให้ iterate และทดลอง UI ได้อย่างรวดเร็ว
ผลลัพธ์แฮกกาธอนและงานที่ยังเหลือ
- เมื่อแฮกกาธอนจบ ทีม Mozilla ทำต้นแบบแชตบอตสำหรับใช้ภายในเสร็จ
- โฮสต์ทั้งหมดภายใน Mozilla
- ใช้งานได้อย่างปลอดภัยและเป็นส่วนตัว
- พยายามสะท้อนค่านิยมของ Mozilla ในพฤติกรรม
- การบรรลุเป้าหมายต้องผ่านการตัดสินใจและการประนีประนอมที่ยากหลายอย่าง
- สิ่งที่ได้เรียนรู้สรุปได้เป็นสามข้อ
- แชตบอตโอเพนซอร์สยังอยู่ระหว่างวิวัฒนาการ มีเรื่องต้องตัดสินใจจำนวนมาก เอกสารที่ชัดเจนยังไม่พอ และมีหลายวิธีที่จะล้มเหลว
- การประเมินและเลือกโมเดลด้วยเกณฑ์นอกเหนือจาก performance ดิบทำได้ยากเกินไป ทำให้การเลือกที่ถูกต้องสำหรับแอป AI ที่เชื่อถือได้ก็ยากตามไปด้วย
- ณ ตอนนี้ prompt engineering ที่มีประสิทธิภาพมีความสำคัญต่อความสำเร็จของแชตบอต
- Mozilla เริ่มสร้างวิธีให้ developer เข้าสู่ ecosystem ของแมชชีนเลิร์นนิงโอเพนซอร์สได้ง่ายขึ้น และตั้งใจจะนำงานจากแฮกกาธอนไปมีส่วนร่วมกับชุมชนโอเพนซอร์ส
- ในสถานการณ์ที่ LLM โอเพนซอร์สมีให้ใช้อย่างแพร่หลาย หากต้องการสร้างอนาคตที่ดีกว่า ทุกคนต้องร่วมกันและลงมือมีส่วนในการกำหนดมัน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เหตุที่ผมติดต่อบริษัทก็เพราะหาคำตอบบนเว็บไซต์ไม่เจอ หรือจำเป็นต้องขอให้เจ้าหน้าที่ทำสิ่งที่ทำบนเว็บไซต์ไม่ได้ เช่น ยกเลิกบริการ เป็นต้น
หน้า FAQ แบบพูดคุยได้ดูเหมือนเป็นความพยายามอุดช่องว่างของประสบการณ์ผู้ใช้ที่ไม่ดี และถ้าบริษัทไม่ได้ใส่ข้อมูลที่ผมหาไว้ในเว็บไซต์ ก็มีโอกาสสูงที่จะไม่ได้ใส่ไว้ในแชตบอตด้วย
แต่แชตบอตอาจช่วยพาไปหาเจ้าหน้าที่ที่เหมาะสมได้ ทว่าการตั้งมันเป็น กำแพงกั้น ก่อนจะได้รับความช่วยเหลือจากคน ผมมองว่าเป็น anti-pattern
ดังนั้นจึงมีเว็บจำนวนมากที่แสดงคำถามจำนวนมากเพื่อแนะนำคำตอบที่เกี่ยวข้องจากคำอธิบาย ก่อนจะให้ติดต่อทีมซัพพอร์ต และ AWS Support ก็ทำแบบนั้น
บอตอาจน่าหงุดหงิด แต่ก็ลดต้นทุนซัพพอร์ตลูกค้าได้มาก ถ้าประสบการณ์ผู้ใช้ดี และเมื่อบอตตอบไม่ได้ก็ส่งต่อไปยังเจ้าหน้าที่ได้เร็ว ผมก็เห็นด้วย แน่นอนว่าต้องอยู่บนเงื่อนไขว่าบอตจะไม่ hallucinate แล้วพูดข้อมูลปลอมออกมา
เราใช้แชตบอตเพราะไม่มีพนักงานซัพพอร์ตคอยตอบคำถาม ถ้าไม่มีบอตก็เท่ากับไม่มีอะไรเลย
แต่เราคอยมอนิเตอร์ล็อกของบอต หากมีฟีเจอร์ที่ขาดไปในผลิตภัณฑ์หรือเว็บไซต์ เราก็เพิ่มเข้าไป เพื่อให้ผู้ใช้ในภายหลังจัดการเองได้แบบ self-service อย่างสมบูรณ์
ผู้ใช้สามารถยกเลิกบัญชีหรือขอคืนเงินได้ทุกเมื่อ
สำหรับคำถามแบบนี้ large language model แทบจะเหมาะอย่างสมบูรณ์ เพียงแต่อยากให้ปรับปรุงให้บอตตรวจจับคำถามที่มันตอบเองไม่ได้ได้ดีขึ้น
แน่นอนว่ามีกรณีที่แชตบอตสามารถแทนคนหรือ FAQ ที่เขียนดี ๆ ได้ แต่ความพึงพอใจในตัวเองแบบนี้พลาดเหตุผลหลักที่ทำให้ซัพพอร์ตเลวร้าย นั่นคือมันถูกออกแบบมาแบบนั้นตั้งแต่แรก
ลองดูตัวอย่าง “ยกเลิกได้เฉพาะทางโทรศัพท์” การสมัครหรือ upsell เป็นปัญหาทางเทคนิคที่ยากกว่าด้วยซ้ำ แต่กลับทำให้ง่ายกว่ามาก เป้าหมายคือเพิ่มแรงเสียดทานให้กับพฤติกรรมที่ดูเหมือนเป็นต้นทุนหรือการสูญเสียระยะสั้น บริษัทต่าง ๆ รู้ดีว่าหากมีแรงเสียดทาน หลายคนจะล้มเลิกหรือผัดผ่อน
นี่คือแพราดายม์ของ nudge และ dark pattern ดูได้จากแบนเนอร์คุกกี้ที่ปุ่ม “ปฏิเสธทั้งหมด” ส่วนใหญ่ถูกซ่อนเอาไว้ nudge ทำให้บริษัทดูเหมือนปฏิบัติตามกฎหมาย ขณะเดียวกันก็หลบเลี่ยงผลโดยรวมโดยให้เวล่าและความสนใจของผู้ใช้เป็นต้นทุน
แชตบอตก็เป็นเพียงอีกชั้นหนึ่งที่เพิ่มเข้าไปในเขาวงกตของซัพพอร์ต
ผมไม่ตั้งตารออนาคตที่ทุกบริษัทจะมี แชตบอตซัพพอร์ต เลย
ตอนนี้ก็พบเห็นได้ค่อนข้างบ่อยและน่าอึดอัดอยู่แล้ว แต่ถึงอย่างนั้นอย่างน้อยครึ่งหนึ่งก็ยังมีช่องทางหลุดไปหาคน เพราะรู้ว่ามันไม่เข้าใจคำถาม
ยุคของ “คอมพิวเตอร์บอกว่าไม่ได้” มาถึงแล้ว
ขอเสริมว่าผมไม่ได้ตั้งใจจะพูดแต่แง่ลบและออกนอกประเด็น ตัวบทความเองดูค่อนข้างดี ขอปรบมือให้ผู้เขียน งานวิศวกรรมนั้นยอดเยี่ยม เพียงแต่ผมไม่ชอบวิธีใช้งานจริงเท่านั้น
แชตบอตไม่ใช่ยาครอบจักรวาล แต่ลด noise ที่ไม่จำเป็นได้มาก สิ่งที่ต้องการคืออะไรบางอย่างที่ตอบ คำถามพื้นฐาน ที่ผู้ใช้ทั่วไปถามในโดเมนเฉพาะนั้นได้
ที่ทำงานเก่าของผมเป็นบริษัทค่อนข้างใหญ่ และอินสแตนซ์ Confluence ก็ใหญ่มหาศาล ผมเสียเวลาไปมากกับการหาข้อมูลในนั้น ถ้ามีแชตบอตที่ฝึกจากข้อมูลทั้งหมดนั้น ก็น่าจะมีประโยชน์มากทีเดียว
นึกถึง Amazon ผมเป็นลูกค้ามานาน และเมื่อไม่นานมานี้ได้รับอุปกรณ์ต่อพ่วงคอมพิวเตอร์ที่มีตำหนิ
ผมอธิบายปัญหาสั้น ๆ กับแชตบอต มันก็สร้างคำสั่งซื้อใหม่ทันที และบอกว่าของเดิมที่ได้รับให้เก็บไว้ได้เลย พร้อมจัดส่งแบบเร่งด่วนโดยไม่คิดค่าใช้จ่ายเพิ่ม
แค่นั้นเอง และของก็มาถึงวันถัดไป ใช้งานได้ดี
แน่นอนว่ามันคงรู้ว่าผมเป็นลูกค้าเก่าและใช้เงินไปมากแล้ว แต่นั่นแทบจะเป็นประสบการณ์ที่ไร้ความเจ็บปวดที่สุดเท่าที่จินตนาการได้ ดีกว่าการคลิกตัวเลือกไปตามหน้าเว็บหลายหน้าอย่างมาก
“ท่านผู้พิพากษา คำแก้ต่างทั้งหมดของผมเป็นเรื่องไร้สาระและอ้างอิงข้อกฎหมายที่ไม่มีอยู่จริง แต่เป็นเพราะผมใช้ ChatGPT ครับ” — เป็นทนายความที่เกิดขึ้นจริง และแม้แต่ใบอนุญาตทนายก็ยังไม่ถูกเพิกถอน
วลีที่ว่า “กำลังเปลี่ยนเว็บที่เรารู้จักและรักไปแล้ว” นั้นเป็นการจับผิดถ้อยคำและชัดเจนว่าออกนอกประเด็น แต่ผมไม่ได้รัก เว็บ ในปัจจุบัน
เว็บกำลังถูกควบคุมโดยบริษัทไม่กี่แห่งมากขึ้นเรื่อย ๆ พวกเขาเป็นคนตัดสินว่าเนื้อหาใดจะถูกมองเห็น (meta, google) และอีเมลใดจะถูกส่งไปยังตัวกรองสแปม (ms, google)
เว็บในตอนนี้ห่างไกลจากคำว่ารักมาก แม้แต่การเข้าถึงคนที่เลือกติดตามผมเอง ผมก็ยังต้องสู้ต่อเนื่อง
สุดท้ายการสื่อสารส่วนใหญ่ของผมเกิดขึ้นในโลกจริงหรือแชตส่วนตัว ขอเสริมด้วยว่า messenger สำหรับธุรกิจนั้นแย่และไม่เสถียรเพียงใด
เว็บในวันนี้จำเป็นต้องมีบางอย่างเกิดขึ้น ผมไม่รู้ว่าอะไรและอย่างไร แต่การเปลี่ยนแปลงย่อมเป็นสิ่งที่ต้อนรับแน่นอน
ยังควรมีวิธีอื่น ๆ ทั้งหมดที่ทำให้ผู้คนติดตามได้อยู่ดี แต่ถ้าโปรโมต RSS feed ผู้คนก็อาจเริ่มใช้มัน
ถ้าอยากลองทำเชิงเทคนิค ก็สามารถตั้งค่า ActivityPub bridge เพื่อให้ติดตามบนโซเชียลมีเดียได้ด้วย ถ้าใช้ Wordpress ก็มี https://wordpress.org/plugins/activitypub/
ดูเหมือนว่าคอมเมนต์ระดับบนส่วนใหญ่จะมองแชตบอตในแง่ลบ เลยขอเล่าว่า ที่ทำงานของผมเคยมีแชตบอตที่ยอดเยี่ยมจริง ๆ
สำหรับผม มันดีกว่าการค้นหาใน Confluence มาก และยังตอบคำถามเกี่ยวกับ ข้อมูลแบบไดนามิก ได้ด้วย เช่น จำนวนวันลาพักร้อนที่เหลือ หรือชั่วโมงทำงานนำหน้าหรือตามหลังอยู่เท่าไร
เท่าที่จำได้ เบื้องหลังมีการใช้เทคโนโลยีอย่างชาญฉลาด ทำให้แม้ถามด้วยภาษาธรรมชาติก็เข้าใจได้เป็นส่วนใหญ่
การค้นหาของ Confluence นี่เป็นมุกตลกจริง ๆ แถมเป็นมุกที่แย่ด้วย
ลูกค้าใช้แชตบอตเพราะ UI ของเว็บไซต์ชวนสับสน พวกเขาอยากได้ข้อมูลแต่หาวิธีไม่เจอ
สมัยก่อนก็จะค้นใน Google ว่า “ชื่อบริการ + เบอร์โทรศัพท์” หรือ “ชื่อบริการ + ยกเลิกการสมัครสมาชิก”
เก้าในสิบครั้ง เว็บไซต์ไม่ได้อยากให้เบอร์โทรศัพท์ง่าย ๆ หรือทำให้การยกเลิกการสมัครสมาชิกง่าย ๆ อยู่แล้ว ถ้าตั้งแต่แรกก็ไม่อยากให้ลูกค้าทำการกระทำที่ซ่อนไว้แบบนั้น แล้วแชตบอตมีไว้เพื่ออะไรกันแน่?
ผมเคยทำงานในช่วงกระแสแชตบอต และต้องบอกลูกค้าหลายรายว่า ถ้าพวกเขาไม่มีความตั้งใจจะช่วยลูกค้าจริง ๆ สิ่งที่เราทำได้ก็มีไม่มาก
อย่างน้อยสำหรับบริษัทที่ต้องรับมือกับผู้คน เป้าหมายที่แท้จริงของแชตบอตคือการผลัก UI บนเว็บและแอปมือถือออกจากการเป็นจุดติดต่อแรก
ผู้ใช้ควรสามารถคุยกับบริษัทผ่าน SMS หรือแชตลักษณะคล้ายกัน หรือผ่านการโทรศัพท์ โดยใช้ตัวตนเดียวกันได้
เว็บและแอปมือถือเป็นเพียงยูทิลิตีลำดับสองและสามที่ช่วยเสริมวิธีสื่อสารหลักเท่านั้น
เหตุผลที่บริษัททำแบบนี้ไม่ได้มาก่อนคือ ความแม่นยำในการเข้าใจภาษา ยังไม่เพียงพอ โมเดลภาษาขนาดใหญ่ได้แก้ข้อจำกัดนั้นแล้ว
การที่บอตช่วยลดการปฏิสัมพันธ์กับเจ้าหน้าที่ลงได้บ้างด้วยเทคนิคจากประสบการณ์นั้นเป็นของแถม อัตราการหลีกเลี่ยงการโอนต่อก็เพิ่มขึ้นทีละน้อยด้วยโมเดลภาษาขนาดใหญ่ที่ดีขึ้น
วิดเจ็ตแชตบอตน่ารำคาญที่ติดอยู่มุมขวาล่างเป็นเพียงมาตรการชั่วคราว จนกว่าจะมีเบอร์โทรศัพท์เดียวให้ใช้และการสื่อสารผ่านช่องทางนั้นราบรื่น
สุดท้าย ชื่อเรื่องทำให้เข้าใจผิด ไม่ได้หมายถึงการสร้างแชตบอตโอเพนซอร์ส แต่หมายถึงการสร้างแชตบอตโดยใช้เฉพาะ ไลบรารีโอเพนซอร์ส แทนเครื่องมือปิด/เชิงพาณิชย์ เพื่อชุมชนและความก้าวหน้าของ AI ที่เร็วขึ้น
เขาบอกว่า “เราได้ตั้งเซิร์ฟเวอร์เสมือนของเราเองภายในบัญชี Google Cloud Platform (GCP) เดิมของ Mozilla ด้วยวิธีนั้น โดยพฤตินัยแล้วเท่ากับเราตัดสินใจทำ MLOps เอง แต่เราสามารถเดินหน้าต่อไปได้ด้วยความมั่นใจว่าระบบเป็นแบบส่วนตัวและอยู่ภายใต้การควบคุมของเราอย่างสมบูรณ์” แล้วการตั้งเซิร์ฟเวอร์ภายในโครงสร้างพื้นฐานของ Google เป็น ส่วนตัว และอยู่ภายใต้การควบคุมอย่างสมบูรณ์ของ Mozilla ได้อย่างไร?
การอธิบายไปถึงวิธีโฮสต์เองบนเบयरเมทัลนั้นอยู่นอกขอบเขตของบทความสร้างแชตบอต และการทำเหมือนว่า VPS ของ Google Cloud ไม่ปลอดภัยก็ดูฝืนไปหน่อย
ISO 27001 เป็นมาตรฐานสากลสำหรับระบบบริหารจัดการความมั่นคงปลอดภัยสารสนเทศ และการปฏิบัติตามของ GCP แสดงถึงคำมั่นต่อการปกป้องข้อมูล
ISO 27017 มุ่งเฉพาะด้านความปลอดภัยบนคลาวด์ และเน้นการควบคุมที่เฉพาะกับผู้ให้บริการคลาวด์
ISO 27018 เป็นมาตรฐานที่เกี่ยวข้องกับการคุ้มครองข้อมูลที่ระบุตัวบุคคลได้ในคลาวด์สาธารณะ
รายงาน SOC 2 สามารถให้ความมั่นใจเกี่ยวกับการควบคุมด้านความปลอดภัย ความพร้อมใช้งาน ความถูกต้องครบถ้วนของการประมวลผล การรักษาความลับ และการคุ้มครองข้อมูลส่วนบุคคล
หากจัดการข้อมูลทางการแพทย์ ก็จำเป็นต้องปฏิบัติตาม HIPAA และหากจัดการข้อมูลของยุโรปหรือพลเมืองยุโรป การปฏิบัติตาม GDPR ก็สำคัญ
หากเป็นลูกค้าหน่วยงานรัฐบาลสหรัฐฯ การปฏิบัติตาม FedRAMP อาจเป็นข้อบังคับ และหากประมวลผลข้อมูลบัตรเครดิต การปฏิบัติตาม PCI DSS ก็สำคัญ
ควรตรวจสอบว่าบริการที่จะใช้ภายใน GCP อยู่ในขอบเขตการรับรองที่จำเป็นสำหรับอุตสาหกรรมหรือกรณีใช้งานนั้น ๆ หรือไม่ โดยปกติการรับรองเหล่านี้ตรวจสอบได้บนเว็บไซต์ Google Cloud และหากต้องการเอกสารทางการ ก็อาจขอผ่านฝ่ายขายหรือทีมสนับสนุนของ Google ได้
ถ้าสงสัยว่าในทางปฏิบัติจะสร้าง โมเดลแชตฐานข้อมูลเวกเตอร์ แบบนี้อย่างไร ไลฟ์สตรีมสัปดาห์ที่แล้วได้แสดงขั้นตอนการสร้างในสภาพแวดล้อม Colab แทบตั้งแต่ต้น และทำ inference ด้วย Llama 2 https://www.youtube.com/live/kBB1A2ot-Bw?feature=share
ความท้าทายใหญ่ของโครงสร้างแบบนี้คือการทำ semantic similarity search ในสเกลใหญ่ Pinecone มีเอกสารเรื่องโครงสร้างข้อมูลสำหรับขยายฐานข้อมูลเวกเตอร์ขนาดใหญ่ที่ค่อนข้างดี
ผมรอให้ Mozilla กระโดดเข้ามาในกระแสนี้และพัฒนา โมเดลภาษาขนาดใหญ่ ของตัวเองอยู่ เมื่อคิดถึงพันธกิจขององค์กรที่ว่า “รักษาให้อินเทอร์เน็ตเปิดกว้างและเข้าถึงได้สำหรับทุกคน” ก็สมเหตุสมผลมาก เพียงแต่ไม่รู้ว่ามีทรัพยากรหรือความตั้งใจจะทำหรือไม่
เขาบอกว่า “มีเหตุผลที่การดำเนินงานแมชชีนเลิร์นนิง หรือ MLOps เป็นสาขาที่กำลังเติบโต การ deploy และจัดการแอปแบบนี้เป็นเรื่องยาก ต้องใช้ความรู้และทักษะเฉพาะที่นักพัฒนาและผู้ดูแลระบบจำนวนมากยังไม่มี” แล้วอะไรที่ยากหรือแตกต่างขนาดนั้น?
ผมเข้าใจว่ามันคือการรันเว็บ API ที่โหลดโมเดลซึ่งเป็นแอสเซ็ตที่คอมไพล์แล้ว ในแง่นั้นก็ดูไม่ได้ต่างกันมาก