- บริษัทส่วนใหญ่มักมีข้อมูลที่มีคุณค่าอยู่ภายในองค์กร
- ข้อมูลวิเคราะห์การที่ลูกค้าโต้ตอบกับผลิตภัณฑ์
- audit log ของกิจกรรมที่เกิดขึ้นภายในผลิตภัณฑ์ (ช่วยให้ทราบได้ว่าฟีเจอร์ถูกเปิดใช้งานเมื่อใด)
- แม้จะเป็นสตาร์ทอัปขนาดเล็กก็ยังมีข้อมูลที่มีประโยชน์
- ผ่าน support ticket สามารถดูได้ว่าส่วนใดของผลิตภัณฑ์ต้องการความใส่ใจมากที่สุด และยังมี feature request รวมอยู่ด้วย
- ก่อนยุคของ LLM (โมเดลภาษาขนาดใหญ่) การดึงอินไซต์จากข้อมูลเป็นเรื่องยาก
- ต้องฝึกโมเดลเอง ซึ่งรวมถึง feature engineering และ NLP, การเลือกโมเดล, และส่วนที่ยากที่สุดคือการรวบรวมข้อมูลสำหรับฝึก
- ตอนนี้ทำงานได้ด้วยพรอมป์ตง่าย ๆ
- ตัวอย่างพรอมป์ต: "โปรดจัดหมวดหมู่ ticket ต่อไปนี้เป็นหมวดหมู่ดังนี้: Uptime, Security, Bug, Feature Request, Other"
- ผลลัพธ์คือได้ตัวจำแนกแบบง่าย ๆ และแม้ปรับแต่งเพียงเล็กน้อยก็ให้ประสิทธิภาพที่เหมาะสม
- ใช้ Streamlit เพื่อสร้างเครื่องมือภายในได้อย่างง่ายดาย ให้ใครก็ได้สามารถทดลองนำ LLM ไปใช้กับชุดข้อมูลได้
สิ่งที่จะสร้าง
- ผู้ใช้สามารถทำสิ่งต่อไปนี้ได้
- ล็อกอิน
- เขียนพรอมป์ต: สำหรับระบบ classification ของ ticket
- ทดสอบพรอมป์ตกับข้อมูลตัวอย่างบางส่วน และตรวจดูผลลัพธ์ (รวมถึงข้อผิดพลาด)
- บันทึกพรอมป์ตเพื่อให้ผู้อื่นนำไปใช้ได้
แนะนำ Streamlit แบบย่อ
- Streamlit เป็นเครื่องมือยอดเยี่ยมสำหรับสร้าง data application ได้อย่างรวดเร็ว
- ใน Streamlit สามารถเขียนแอปพลิเคชันได้ด้วยโค้ดที่เรียบง่าย
import streamlit as st
prompt = st.text_area(
"Prompt to test (use {text} to indicate where the text should be inserted):",
"This is an example prompt:\\n\\n{text}",
)
prompt_with_data = f"{prompt}".format(
text="`Example data to be placed into prompt`"
)
st.write(prompt_with_data)
- ผลลัพธ์เมื่อรันโค้ด: Streamlit จะสร้างฟรอนต์เอนด์แบบอินเทอร์แอกทีฟให้อัตโนมัติ
- เมื่อผู้ใช้อัปเดตข้อความพรอมป์ตใน
text_area โค้ด Python ส่วนที่เหลือจะถูกรันใหม่โดยอัตโนมัติ
ความสามารถอันทรงพลังของ Streamlit
- Streamlit เป็นเครื่องมือที่ทรงพลังมากสำหรับสร้างเครื่องมือแบบอินเทอร์แอกทีฟ เช่น dashboard
- ใช้งาน คอมโพเนนต์ที่หลากหลาย ได้: เช่นเรนเดอร์ Pandas dataframe เป็นตาราง หรือใช้ปุ่มเพื่อ trigger การทำงาน
- มี ยูทิลิตีสำหรับโหลดข้อมูลภายนอก, จัดการ secrets, และแคชข้อมูล มาให้ ซึ่งช่วยให้การโต้ตอบกับข้อมูลทรงพลังยิ่งขึ้น
ขั้นตอนที่ 1: โหลดและแสดงข้อมูล
- ใช้ Streamlit เพื่อโหลดข้อมูลที่ hard-code ไว้และเรนเดอร์เป็นตาราง
- ใช้ไฟล์
.streamlit/secrets.toml เพื่อบอก Streamlit ว่าจะเชื่อมต่อกับฐานข้อมูล PostgreSQL อย่างไร
- ติดตั้ง
psycopg2-binary และอัปเดตฟังก์ชัน load_data_sample() เพื่อโหลดข้อมูลจาก PostgreSQL
- Streamlit สามารถเชื่อมต่อกับแหล่งข้อมูลได้หลากหลาย เช่น Snowflake และ Google ชีต
- สำหรับการแคช โดยทั่วไป
st.cache_resource ใช้กับการเชื่อมต่อ และ st.cache_data ใช้กับผลลัพธ์ของ query ที่มีต้นทุนสูง
ขั้นตอนที่ 2: รันข้อมูลด้วยพรอมป์ต
- รับพรอมป์ตจากผู้ใช้แล้วนำไปใช้กับข้อมูลที่โหลดมา
- พรอมป์ตต้องส่งออก JSON ที่ถูกต้องในรูปแบบ
{"urgent": false, "categories": ["CategoryA", "CategoryB"]}
- แปลง dataframe เพื่อเพิ่มคอลัมน์
urgent, categories และ error (เมื่อเกิดข้อผิดพลาด)
- แคชการเรียก OpenAI เพื่อประหยัดเวลาและค่าใช้จ่าย
- เพิ่มปุ่มเพื่อรันพรอมป์ตกับข้อมูลอีกครั้ง
ขั้นตอนที่ 3: เพิ่มการยืนยันตัวตน
- ใช้ PropelAuth เพื่อเพิ่มการยืนยันตัวตนให้กับ Streamlit
- สร้างไฟล์
propelauth.py และ export อ็อบเจ็กต์ auth
- โหลดผู้ใช้ที่ด้านบนของสคริปต์ หรือหยุดการรันสคริปต์
- ใน data query สามารถใช้ user ID เพื่อตรวจสอบเฉพาะข้อมูลที่ผู้ใช้นั้นมีสิทธิ์เข้าถึงได้
ขั้นตอนที่ 4: บันทึกพรอมป์ต
- เพิ่มปุ่มให้ผู้ใช้สามารถบันทึกพรอมป์ตได้
- โหลดการเชื่อมต่อฐานข้อมูลแล้ว insert พรอมป์ตลงในตาราง
prompts
- ส่ง user ID และพรอมป์ตเป็นพารามิเตอร์เพื่อบันทึกพรอมป์ต
1 ความคิดเห็น
ผมเคยแนะนำสั้น ๆ ไว้เมื่อปี 2020 ในหัวข้อ Streamlit - ทำโค้ด Python ให้เป็นเครื่องมือ ML แบบคัสตอมได้ง่าย และในปี 2022 Snowflake ก็ได้เข้าซื้อ Streamlit ด้วยมูลค่า $800M
เมื่อไม่นานมานี้ เครื่องมือที่เขียนด้วย Streamlit ก็เคยถูกนำขึ้น Show GN ด้วยเหมือนกันนะครับ
MP3 Tag Editor (Python Streamlit +FastAPI) on Docker