Streamlit으로 내부 AI 도구 구축하기
(propelauth.com)- 대부분의 기업은 내부에 귀중한 데이터를 보유하고 있음
- 고객이 제품과 상호작용하는 분석 데이터
- 제품 내에서 이루어진 작업의 감사 로그(기능 활성화 시점 파악 가능)
- 작은 스타트업일지라도 유용한 데이터를 보유하고 있음
- 지원 티켓을 통해 제품에서 가장 많은 주의가 필요한 부분 확인이 가능하며, 기능 요청도 포함되어 있음
- LLM(대규모 언어 모델) 이전에는 데이터를 통해 통찰을 추출하는 것이 어려웠음
- 자체 모델을 훈련해야 했으며, 이는 기능 엔지니어링 및 NLP, 모델 선택, 가장 어려운 훈련 데이터 수집을 포함함
- 이제는 간단한 프롬프트로 작업 가능
- 예시 프롬프트: "다음 티켓을 다음 카테고리로 분류하세요: Uptime, Security, Bug, Feature Request, Other"
- 결과적으로 간단한 분류기가 만들어지며, 약간의 수정만으로도 적절한 성능을 제공함
- Streamlit을 사용하여 누구나 LLM을 데이터셋에 적용해 실험할 수 있는 내부 도구를 쉽게 구축 가능
만들어 볼 것
- 사용자는 다음과 같은 동작이 가능
- 로그인
- 프롬프트 작성 : 티켓 classification 시스템을 위한 것
- 몇 가지 샘플 데이터에서 프롬프트를 테스트하고 출력(오류 포함)을 확인
- 다른 사람이 사용할수 있게 프롬프트 저장
Streamlit 간단 소개
-
Streamlit은 데이터 애플리케이션을 빠르게 구축할 수 있는 훌륭한 도구임
- 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은 대시보드 같은 인터랙티브 도구를 만들기 매우 강력한 도구임
- 다양한 컴포넌트 사용 가능: Pandas 데이터프레임을 테이블로 렌더링하거나 버튼을 통해 액션을 트리거할 수 있음
- 외부 데이터 로딩, 비밀 관리, 데이터 캐싱 유틸리티가 함께 제공되며, 이를 통해 데이터와의 상호작용이 훨씬 강력해짐
단계 1: 데이터 로드 및 시각화
- Streamlit을 사용하여 하드 코딩된 데이터를 로드하고 테이블로 렌더링함
-
.streamlit/secrets.toml
파일을 통해 Streamlit에게 PostgreSQL 데이터베이스에 연결하는 방법을 알려줌 -
psycopg2-binary
를 설치하고load_data_sample()
함수를 업데이트하여 PostgreSQL에서 데이터를 로드함 - Streamlit은 Snowflake 및 Google 시트와 같은 다양한 데이터 소스에 연결할 수 있음
- 캐싱을 위해
st.cache_resource
는 연결에,st.cache_data
는 비용이 많이 드는 쿼리 결과에 일반적으로 사용됨
단계 2: 프롬프트를 사용하여 데이터 실행
- 사용자로부터 프롬프트를 받아 로드된 데이터에 적용함
- 프롬프트는
{"urgent": false, "categories": ["CategoryA", "CategoryB"]}
형식의 유효한 JSON을 출력해야 함 - 데이터프레임을 변환하여
urgent
,categories
및error
(오류 발생 시) 열을 추가함 - OpenAI 호출을 캐시하여 시간과 비용을 절약함
- 프롬프트를 데이터에 다시 실행하려면 버튼을 추가함
단계 3: 인증 추가
- PropelAuth를 사용하여 Streamlit에 인증 추가
-
propelauth.py
파일을 만들어auth
객체를 내보냄 - 스크립트 상단에서 사용자를 로드하거나 스크립트 실행을 중지함
- 데이터 쿼리에서 사용자 ID를 사용하여 액세스 권한이 있는 데이터만 확인할 수 있음
단계 4: 프롬프트 저장
- 사용자가 프롬프트를 저장할 수 있는 버튼 추가
- 데이터베이스 연결을 로드하고 프롬프트를
prompts
테이블에 삽입함 - 사용자 ID와 프롬프트를 매개변수로 전달하여 프롬프트를 저장함
제가 2020년도에 Streamlit - 파이썬 코드를 커스텀ML도구로 쉽게 만들기 라고 간단히 소개했었는데, 2022년에 Snowflake가 Streamlit을 $800M에 인수 했습니다.
얼마전에는 Streamlit 을 이용해서 작성하신 도구가 Show GN에도 한번 올라왔었네요.
MP3 Tag Editor (Python Streamlit +FastAPI) on Docker