Streamlit으로 내부 AI 도구 구축하기

3 weeks ago 5

  • 대부분의 기업은 내부에 귀중한 데이터를 보유하고 있음
    • 고객이 제품과 상호작용하는 분석 데이터
    • 제품 내에서 이루어진 작업의 감사 로그(기능 활성화 시점 파악 가능)
  • 작은 스타트업일지라도 유용한 데이터를 보유하고 있음
    • 지원 티켓을 통해 제품에서 가장 많은 주의가 필요한 부분 확인이 가능하며, 기능 요청도 포함되어 있음
  • 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와 프롬프트를 매개변수로 전달하여 프롬프트를 저장함

Read Entire Article