22 คะแนน โดย xguru 2024-10-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บริษัทส่วนใหญ่มักมีข้อมูลที่มีคุณค่าอยู่ภายในองค์กร
    • ข้อมูลวิเคราะห์การที่ลูกค้าโต้ตอบกับผลิตภัณฑ์
    • 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 ความคิดเห็น

 
xguru 2024-10-07

ผมเคยแนะนำสั้น ๆ ไว้เมื่อปี 2020 ในหัวข้อ Streamlit - ทำโค้ด Python ให้เป็นเครื่องมือ ML แบบคัสตอมได้ง่าย และในปี 2022 Snowflake ก็ได้เข้าซื้อ Streamlit ด้วยมูลค่า $800M

เมื่อไม่นานมานี้ เครื่องมือที่เขียนด้วย Streamlit ก็เคยถูกนำขึ้น Show GN ด้วยเหมือนกันนะครับ
MP3 Tag Editor (Python Streamlit +FastAPI) on Docker